Tan Lip Wei's Project Portfolio Page
Project: UniCa$h
UniCa$h is a finance tracking application for university students who want to be more financially conscious. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 19 kLoC.
Given below are my contributions to the project.
- Transaction Model: pull requests #58, #85, #81, #66, #72, #97, #116, #121
- What it does: Provides an internal encapsulation of a
Transactionin UniCa$h. By taking inspiration from thePersonclass in AB3, I developed theTransacationclass along with its attributes. - Justification: It is necessary to provide an internal representation of a
Transactionas it serves as the primary object used throughout UniCa$h. Helps to map out business logic into code through the attributes in theTransactionclass. - Highlights: By taking inspiration from the implementation of
TagandUniquePersonListin AB3, I developed theUniqueCategoryListas an attribute inTransaction. This enforced uniqueness in theCategoryadded to aTransaction. - Challenges: Before we developed
Transaction, we had thought to split the class into 2 separate classesIncomeandExpense. However, this proved to be a less effective approach which led to the pivoting to 1 consolidatedTransactionclass duringmilestone 1.2.
- What it does: Provides an internal encapsulation of a
- UniCash and TransactionList Model: pull requests #53, #121, #146
- What it does: The combination of the 2
TransactionListandUniCashmodels provides an internal encapsulation of transactions in UniCa$h. - Justification: As our application serves as a platform for users to manage transactions, we had to encapsulate certain key business logic of transactions into a class.
- Highlights: I developed the 2 classes by taking inspiration from the implementation of
UniquePersonListandAddressBookclasses in AB3. I also morphed the implementation to fit into our business needs of allowing duplicate transactions.- Later into the project, we discovered a potential room where a bug could arise due to there being too many
Transaction. Hence, I later on added more constraints to theTransactionListclass where a limit of 100000Transactionwas set.
- Later into the project, we discovered a potential room where a bug could arise due to there being too many
- What it does: The combination of the 2
- Add Transaction Command: pull requests #53, #95
- What it does: Provide a CLI command for users to add a transaction into UniCa$h.
- Justification: As an application optimised for CLI users, I had to come up with the command as well as the related fields to add a transaction.
- Highlights: To account for an intuitive process to add a
Transaction, we had to minimise the number of compulsary fields.- One highlight was the
DateTimefield where we automatically set the current date and time as the default value if not set explicitly by the user.
- One highlight was the
- Challenges: There was a small challenge in mocking the
LocalDateTime.now()method in test cases, which required another constructor with an added parameter of aClock. This allowed test cases to manually input aClockwhich could be used for mocking the current date and time.
-
Code contributed: RepoSense link
- Project management:
- Managed releases
v1.3a(1 release) on GitHub
- Managed releases
- Enhancements to existing features:
- Help Command: pull requests #128, #135
- What it does: Provides users minimal and sufficient help to successfully execute commands.
- Justification: The previous implementation of AB3
helpwould show a pop up with a link to our User Guide. This proved to be cumbersome as users would have to spend time switching back and forth the application in order to run commands. Hence, I allowed for the use ofhelp COMMAND_WORDto get help for a specific command within the application. - Highlights: This allowed users to successfully get the description of a command, command format and example command all within the application.
- Help Command: pull requests #128, #135
- Documentation:
- User Guide:
- Set up structure skeleton for User Guide for easy and structured documentation by the team.
- Added documentation for own features like
AddTransactionCommandandHelpCommand.
- Developer Guide:
- Added implementation details of model features like
Tranasaction,TransactionListandBudgetmodels. - Added documentation on commands implemented like
AddTransactionCommandandHelpCommand.
- Added implementation details of model features like
- User Guide:
- Community:
- PRs reviewed : refer to here