Project: InternHunter

InternHunter is a CLI-centric desktop application which aids university students in applying for tech internships. It lets users manage their own customisable collection of companies, internships, internship applications and their own user profile, so that they can keep track of internships that they are interested in. It has a GUI created with JavaFX. It is written in Java, and has about 35k LoC.

Summary of contributions

  • Parser and Command Structure Design (Pull request #118)
    • What it is: Allows one command word to be used for multiple entity types.
    • Highlights: the parser is designed such that a single command word can be used to specify the operation for multiple entity types. Instead of the need to implement a long switch statement for all the command words (where more than 20 commands words will need to be specified for every operation of each entity type). Similar commands classes for different entities all extend the same abstract class so that the the operation’s CommandParser can leverage on polymorphism to return the command for execution. This is a useful design as it can be applied to all the other kinds of entities which share common operations.
  • Add internship to a company (Pull request #151)
    • What it is: Allows the user to add an internship to a company’s internship list.
    • Highlights: The add internship command is a challenging feature to implement as it needs to account for the composition relationship between the company and internship objects and how they interact. The addInternshipCommand has retrieve the company targeted, check for duplicates in a company’s internship list and then parse its fields carefully before it can be added. Careful consideration of how the addition of internship would affect subsequent features such as application objects applying to it is also needed.
  • Add Profile Items (Pull request #142)
    • What it is: Allows the user to add a profile item to the profile list
    • Highlights: This enhancement affects other commands like the match command and commands to be added in future. It required an analysis of other design alternatives. It allows users to keep track of profile item which stores an title, category which is an enum type and a set of descriptors complying with a fixed set of characters.
  • Delete a Profile Item (Pull request #150)
  • Edit a Profile Item (Pull request #154)
  • View a Profile Item (Pull request #155)
  • Find Profile Items (Pull request #253)
  • List all Profiles Items (Pull request #253)
  • Contributed significantly to improving the test coverage (Pull requests #352, #253, #204, #203, #168, #400)

  • Code contributed: RepoSense link

  • Documentation:
    • User Guide:
      • Added documentation for profile features - add, delete, edit, view, list, find. (Pull requests #82, #260, #271)
      • Update overview portion and contents page.
    • Developer Guide:
      • Added implementation details and UML diagrams for the ‘Edit a profile item’ feature. (Pull request #216)
      • Added details and UML diagrams for the ‘Architecture’. (Pull request #288)
      • Added use cases for all profile items, find, list, help and exit commands. (Pull requests #92, #124, #256)
      • Added Non Functional Requirements (Pull requests #92)
      • Added Effort Section (Pull request #363)
  • Team-based tasks:
    • Maintaining the issue tracker and milestone management.
    • Integration code for common functions.
    • Documenting team effort.
  • Community: