PROJECT: Internship Diary
This portfolio summarizes my contributions to Internship Diary.
Overview
Internship Diary is a desktop-based internship tracking application. The user interacts with it using a CLI, and it has a GUI created with JavaFX.
The inspiration behind this project is a common problem faced by all group members - the difficulty in organising and tracking internship applications efficiently. With having internship experience being a graduation requirement for all Computer Science NUS undergraduates, we strongly feel for the need to have a software application to help students like us deal with the organising and tracking of internship applications. Hence, Internship Diary was created.
Summary of contributions
-
Major enhancement: Adding Reminder feature (PR: #82, #152, #201, #215)
-
What it does: This feature enables the user to view applications that need to be submitted or have interviews scheduled in 7 days.
-
Justification: It aims to help the user keep track of his internship applications, to avoid missing submission deadlines or interview dates. It can also give the user an idea of the applications to focus on more first.
-
-
Minor enhancement: Implement the display of the last stage where an application failed (PR: #115, #134)
-
What it does: This implementation enables the user to view the stage (
applied
,interview
,offered
) which the application was at before it wasghosted
orrejected
. -
Justification: This aims to help the user reflect on the stage at which the application could have been done better, to aid future applications.
-
-
Code contributed: Reposense
-
Other contributions:
-
Helped with refactoring UI of Internship Diary from Address Book (PR: #52)
-
Project management:
-
Updated team repository’s issue panel by assigning, labelling and closing issues
-
-
Documentation:
-
Added relevant sections for Reminder feature and improved other sections in User Guide and Developer Guide
-
-
Contributions to the User Guide
Given below are sections I contributed to the User Guide. They showcase my ability to write documentation targeting end-users. |
Getting applications due or have interviews in 7 days: reminder
Displays all internship application(s) that:
-
have status
wishlist
and need to be submitted in 7 days -
have status
interview
and interviews scheduled in 7 days
The applications will be displayed in order of earliest application date or scheduled interview date followed by those with later dates.
This command helps to remind you of applications which you might want to focus on first, so that you do not miss submission deadlines or any upcoming interviews.
Format: reminder
reminder
is executed
reminder can be used anytime, but it does not work on archived applications.
|
Any command after reminder will be ignored.e.g. reminder dummy variable be just be treated as reminder
|
Contributions to the Developer Guide
Given below are sections I contributed to the Developer Guide. They showcase my ability to write technical documentation and the technical depth of my contributions to the project. |
Reminder Command
The reminder command displays to users a list of internship applications which:
-
have status
wishlist
and need to be submitted in 7 days -
have status
interview
and interviews scheduled in 7 days
The applications will be displayed in order of earliest application date or scheduled interview date followed by those with later dates.
The following sequence diagram shows how the command is executed:
reminder
CommandImplementation
The reminder command is implemented in the class ReminderCommand
.
When the execute()
method of the ReminderCommand
is called, several predicates classes implementing Predicate<InternshipApplication>
are created:
-
ApplicationDateDuePredicate
— Predicate to check whether theApplicationDate
field of an internship application has a date of the current date or within 7 days of the current date. -
StatusIsWishlistPredicate
— Predicate to check whether theStatus
field of an internship application iswishlist
. -
InterviewDateDuePredicate
— Predicate to check whether there is at least one interview in theArrayList<Interview> interviews
of an internship application that has a date of the current date or within 7 days from the current date. -
StatusIsInterviewPredicate
— Predicate to check whether theStatus
field of an internship application isinterview
. -
IsNotArchivedPredicate
— Predicate to check whether an internship application is not archived.
Firstly, an AND
operation on the ApplicationDateDuePredicate
and StatusIsWishlistPredicate
as well as another
AND
operation on the InterviewDateDuePredicate
and StatusIsInterviewPredicate
are performed. Next, an OR
operation is performed on the predicates from the previous two AND
operations. An AND
operation is then performed on
the predicate obtained from the previous OR
operation and the IsNotArchivedPredicate
. The IsNotArchivedPredicate
is used to make sure that archived internship applications do not appear when reminder
is used. The final predicate
produced is then passed into the method updateFilteredInternshipApplicationList()
of the ModelManager
instance.
The activity diagram below summarises how each internship application is checked by the predicates mentioned above:
ReminderCommand
filters out applications to displayA comparator ApplicationDateAndInterviewDateComparator
implementing Comparator<InternshipApplication>
is also created and
then passed into the method updateFilteredInternshipApplicationList()
of the ModelManager
instance to sort internship
applications in terms of which application is more urgent. For each internship application, its ApplicationDate
field
as well as the earliest interview date in the List<Interview> interviews
are compared to current date and the
earlier date out of the two is used for the sorting. The most urgent application will be at the top.
Design Considerations
Aspect: The order to display the internship applications
-
Alternative 1 (current choice): Display the internship applications in the order of either their
applicationDate
orinterviewDate
of the earliest interview scheduled inList<Interview> interviews
is closer to current date.-
Pros: More useful to the user as the user can directly know which internship application to focus on more, regardless of whether it is to prepare for the submission of the application, or to prepare for an interview scheduled.
-
Cons: Longer code as both the earliest
interviewDate
and theapplicationDate
of an application needs to be compared to current date to see which date is closer and that date will then be used to sort the internship applications.
-
-
Alternative 2: Display the internship applications in the order of which application’s
applicationDate
is closer to current date.-
Pros: Cleaner code as the applications can just be sorted by their
applicationDate
. -
Cons: Has the assumption that an internship application with a earlier
applicationDate
will have an interview scheduled at an earlierinterviewDate
as compared to an application with laterapplicationDate
. User might miss out on a earlierinterviewDate
for an application with laterapplicationDate
and additional commands have to be typed in to checkinterviewDate
.
-
Aspect: The filtering of internship applications to be shown
-
Alternative 1 (current choice): Using separate predicates(
ApplicationDateDuePredicate
,StatusIsWishlistPredicate
,InterviewDateDuePredicate
,StatusIsInterviewPredicate
) to filter out internship applications withApplicationDate
or earliestinterviewDate
within 7 days from current date.-
Pros: Cleaner code and each Predicate class only needs to check for one field. Easier to test as well.
-
Cons: Longer code as more predicates instantiated and used.
-
-
Alternative 2: Using just one predicate to filter out internship applications with
ApplicationDate
or earliestinterviewDate
within 7 days from current date.-
Pros: Reduce the number of predicates to be instantiated and to be used.
-
Cons: More conditions to check for in one predicate which could lead to potential bugs.
-