Bernard Boey Khai Chen - Project Portfolio Page
Overview
ExpiryEliminator aims to help young adults living by themselves manage their ingredients and recipes they can cook based on the ingredients they have. The application is CLI based and is suitable for users who can type quickly and accurately.
Summary of Contributions
-
Code contributed: RepoSense link
- New Feature: Added the ability to add ingredients.
- What it does: Allows the user to add an ingredient to the ingredient repository, and optionally define a unit for that ingredient (e.g.
g
,kg
,btl
). - Justification: This feature is essential for the product as the app aims helps users to manage their ingredients.
- Highlights: The implementation was challenging as it underwent three versions. At first, for v1.0, it allowed users to add ingredients together with an initial quantity and expiry date. Then, when implementing units for v2.0, we allowed users to optionally add units at the same time. At this point, I also changed the quantity and expiry date to be optional so that users could add an ingredient with 0 quantity. Finally, for v2.1 the quantity and expiry date was removed from this command after feedback from classmates, to focus this command on adding an ingredient and an (optional) associated unit, and quantity and expiry date were delegated to other commands.
- What it does: Allows the user to add an ingredient to the ingredient repository, and optionally define a unit for that ingredient (e.g.
- New Feature: Added the ability to increment and decrement quantities of ingredients.
- What it does: Allows the user to increment/decrement quantities of ingredients. For the increment command, it allows the user to specify the expiry date of the ingredients.
- Justification: This feature is essential for the product, otherwise users would not be able to modify the quantities of ingredients.
- Highlights: Having different batches of expiry dates for a single ingredient (added one batch at a time) is allowed, which is technically difficult to implement. Additionally, for the decrement command, users don’t have to specify an expiry date, and the app automatically decrements from the oldest batch.
- New Feature: Added the ability to delete ingredients.
- What it does: Allows the user to delete an ingredient entirely from the ingredient repository.
- Justification: This feature is necessary so that the user can remove ingredients that they no longer have and use.
- Highlights: I made sure that users cannot delete an ingredient if it is being used by a recipe, as it is necessary for an ingredient to be in the repository if it is used in a recipe (the ingredient stores the associated unit).
- Enhancements:
- Set up starter code (
commands
,data
,ui
, andparser
packages) (#19), taking inspiration from my own ip. - Extensively refactored and improved parser by adding more OOP, thereby improving code quality, reducing coupling and increasing cohesion (#24).
- Organised into the
Parser
class,ArgsParser
class,argparser
package which involve theSingleArgParser
andMultipleArgParser
, as well as theprefix
package, making use of abstract classes.
- Organised into the
- Refactored the
data
package to improve OOP and code quality (#45).
- Set up starter code (
- User Guide:
- Developer Guide:
- Added table of contents, acknowledgements, value proposition, user stories, and non-functional requirements to the developer guide (#84, #87, #90).
- Added documentation for the parser and added 3 class diagrams and 1 sequence diagram (#84, #87).
- Added instructions for manual testing for
add
,increment
,decrement
,delete
, andbye
(#150).
- Team-based tasks:
- Set up the GitHub team org and repo.
- Created and maintained the three milestones (v1.0, v2.0, v2.1).
- Maintained the issue tracker by triaging, organising, and closing bugs.
- Managed the GitHub workflow by imposing branch protection rules (i.e. requiring pull request, approvals, and status checks to pass before merging). Subsequently removed the rules when it was less useful (e.g. cosmetic edits to the UG/DG).
- Added code enhancements for the team (see more under enhancements)
- Updated the user guide and developer guide on parts not specific to a feature (see more under user guide and developer guide).
- Managed the release for v2.1.
- Review/mentoring:
- Beyond project team: