PROJECT: Infinity Book

Welcome to my portfolio page for CS2103T AY 2017/2018 Sem 2 project - Infinity Book.

1. Overview

Infinity Book is a desktop application that provides Tech recruiters end-to-end support, from searching for candidates,to adding job postings and saving their resumes and interviews.

More importantly, IB is optimized for those who prefer to work with a desktop Command Line Interface (CLI) while still having the benefits of a Graphical User Interface (GUI). If you can type fast, IB can get your candidates management tasks done faster than traditional GUI apps.

2. Summary of contributions

Code contributed: [Functional code] [Test code]_

2.1. Major enhancement: added the interview management.

  • Motivation: Interviewing is one of the important steps in recruiting process. HR may need a tool to manage interview efficiently.

  • What it does: allows the user to add the interview relevant command which are add interview command, find interview command, listing interview command.

  • Highlights: This enhancement affects existing commands and commands to be added in future. It required an in-depth analysis of design alternatives. The implementation too was challenging as it required changes to existing model, ui, and storage.

2.2. Minor enhancement: added the view command.

  • Motivation: The HR may want to find more details information of specific candidates. The view command helps HR with this problem.

  • What it does: allows user to view a specific person by email ID and display the linked page of the person.

  • Highlights: This enhancement affects existing commands and commands to be added in future. It required an in-depth analysis of design alternatives. The implementation too was challenging as it required changes to existing commands.

2.3. Other contributions:

2.3.1. Project management:

  • Managed releases v1.5rc on GitHub

  • Managed milestones on GitHub.

2.3.2. Enhancements to existing features:

  • Updated the add command to support viewing a person (Pull requests #15)

  • Wrote additional tests for existing features to increase coverage (Pull requests #168, #166)

2.3.3. Documentation:

  • Did cosmetic tweaks to existing contents of the User Guide: #14

    • Community:

  • PRs reviewed (with non-trivial review comments): #51

  • Reported bugs and suggestions for other teams in the class

3. Contributions to the User Guide

3.1. Viewing a person: view

  • Description: viewing the person records and linking page locating by emailID

  • Format: view EmailID

  • Examples: view abcd@gmail.com

viewCommand
  • Returns the person whose email is john@gmail.com

  • Displays all the person’s information and resume in the browser panel.

  • The email needs to be correct format.

  • Only one person returned since email is unique.

  • The email needs to be correct format.

  • Only one person returned since email is unique.

If there are two persons with same email, the viewcommand will render URL of the first person
When a person has no linked page, it will display black board in the browser panel.

3.2. Managing Interview

This section describes command available for managing interview in the Infinity Book.

3.2.1. Add Interview Command

  • Description: Add a Interview to Infinity Book.

  • Format: addInterview i/Interview Title n/Interviewee l/LOCATION d/DATE

  • Examples: addInterview i/SE Interview n/John l/One North d/30.1.2018

addInterviewCommand
Figure 1. Add Interview command adds a new interview, as shown above.
  • Add the interview with predicate name, location, and date

  • Displays the added interview in list of Interview panel.

3.2.2. List Interview

  • Description: List all interviews of Infinity Book.

  • Format: listInterview

  • Example: listInterview

ListInterview
Figure 2. List Interview command lists all interviews, as shown above.

3.2.3. Delete Interview

  • Description: Remove an interview from Infinity Book using the index from latest listing.

  • Format: deleteInterview INDEX

  • Examples: deleteInterview 1

DeleteInterview
Figure 3. List Interview command lists all interviews, as shown above.
  • Deletes the interview at the specified INDEX.

  • The index refers to the index number shown in the most recent listing.

  • The index must be a positive integer 1, 2, 3, …​

4. Contributions to the Developer Guide

4.1. Display relevant Github or resume page. (Since v1.3)

As a candidate may have linked online resume or github page. The recruiter may want to consider these pages.

4.1.1. Design Considerations

Aspect: Aspects: Implementation of removing/adding a linked page.

Alternative 1:(current choice) Each person has a page, which is resume or github. Add the view command to view a specific person, and view the linked page on the browser panel.
Pros: The page can be linked to the person, and it is easier to view by person’s email
Cons: Need to modify current implementation of person model
Alternative 2: Add a new command to view specific page, which is hard code URL. Pros: No need to modify current person
Cons: Hard to maintain the hard code URL

4.1.2. Implementation details

  • ViewCommandParser class will extract emails ID from user input, form a predicate, then pass it to ViewCommand class.

  • ViewCommand will take in the predicate and update the list of Persons by email ID, and change the browser panel accordingly. source, java]

public class EmailFilter implements Predicate<Person> {
    private final String email;

    public EmailFilter (Email email) {
        this.email = email.toString();
    }

    @Override
    public boolean test(Person person) {
        return person.getEmail().toString().equals(this.email);
    }

    @Override
    public boolean equals(Object other) {
        return other == this // short circuit if same object
                || (other instanceof EmailFilter // instanceof handles nulls
                && this.email.equals(((EmailFilter) other).email)); // state check
    }

}

4.2. Interview Management [Since v1.5rc]

Interviewing is one of the important steps in recruiting process. HR may need a tool to manage interview efficiently. The Infinity Book will need interview model with basic features including adding interview, listing interview, and deleting interview.

  • Model Component:

InterviewModel
Figure 4. Add Interview Model to Model Component
  • Storage Component:

InterviewStorage
Figure 5. add XmlAdaptedInterview to Storage Component

4.2.1. Adding an interview

The recruiter may want to conduct an interview with candidates, and maintain an interview lists.

Aspects: Implementation of removing/add interview with candidates.

Alternative 1: (current choice): Add a new model interview including many sub fields such as Date, Location, List of Questions.
Pros: It is easier to implement other commands such as find Interview, delete Interview, add questions.
Cons: It takes time to create new model.

Alternative 2: Add a new field interview to each candidates and maintain according to each candidates.
Pros: It is easier to implement.
Cons: It is difficult to search specific interview effectively.

  • Current implementation details

    • AddInterviewCommandParser class will extract interview title, interviewee name, date, and interview location from user input, form a new interview, then pass it to AddInterviewCommand class.

    • AddInterviewCommand will take in the interview and call add new interview to storage in model management.

addInterviewSequence
Figure 6. Adding an interview sequence diagram
public synchronized void addInterview(Interview interview) throws DuplicateInterviewException {
        addressBook.addInterview(interview);
        updateFilteredInterviewList(PREDICATE_SHOW_ALL_INTERVIEWS);
        indicateAddressBookChanged();
}

4.2.2. List interview

The recruiter may want to take a look at all of the interviews.

Aspects: Implementation of listing all the interviews.

Alternative 1: (current choice) create a new command to listing all the interview.
Pros: It is easier to use and modify.
Cons: New command is needed.

Alternative 2: each candidate has been linked to an interview, listing all the interview when listing all candidates.
Pros: No need to create new command, just need to edit current list comamnd
Cons: It increases coupling and it is harder to implement.

  • Current implementation details

    • AddressBookParser class will parse the command listInterview from CLI and call ListInterviewCommand.

    • ListInterviewCommand will call updateFilteredList in model and list all the interviews in storage.

ListInterviewSequence
Figure 7. Listing an interview sequence diagram
public void updateFilteredInterviewList(Predicate<Interview> predicate) {
        requireNonNull(predicate);
        filteredInterviews.setPredicate(predicate);
}

4.2.3. Deleting Interview

After conducted interview, the HR may want to delete the interview from the Infinity Book.

Aspects: Implementation of deleting an interview:

Alternative 1: (current choice) create deleting command for deleting interview by index
Pros: It can be easily to use follow the index of listing interview command
Cons: It requires users to use two commands

Alternative 2: create deleting command for deleting interview by name.
Pros: It requires addtional tools to match interview
Cons: It is easier for user to use.

DeleteInterviewSequence
Figure 8. Delete an interview sequence diagram
  • Current implementation details

    • DeletingInterviewParser class will extract the index of the interview needed to be deleted and pass in to DeleteInterviewCommand.

    • DeleteInterviewCommand will take in the index and update the interview list accordingly.

public synchronized void deleteInterview(Interview target) throws InterviewNotFoundException {
        addressBook.removeInterview(target);
        indicateAddressBookChanged();
}