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
Transaction
in UniCa$h. By taking inspiration from thePerson
class in AB3, I developed theTransacation
class along with its attributes. - Justification: It is necessary to provide an internal representation of a
Transaction
as it serves as the primary object used throughout UniCa$h. Helps to map out business logic into code through the attributes in theTransaction
class. - Highlights: By taking inspiration from the implementation of
Tag
andUniquePersonList
in AB3, I developed theUniqueCategoryList
as an attribute inTransaction
. This enforced uniqueness in theCategory
added to aTransaction
. - Challenges: Before we developed
Transaction
, we had thought to split the class into 2 separate classesIncome
andExpense
. However, this proved to be a less effective approach which led to the pivoting to 1 consolidatedTransaction
class 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
TransactionList
andUniCash
models 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
UniquePersonList
andAddressBook
classes 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 theTransactionList
class where a limit of 100000Transaction
was 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
DateTime
field 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 aClock
which 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
help
would 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_WORD
to 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
AddTransactionCommand
andHelpCommand
.
- Developer Guide:
- Added implementation details of model features like
Tranasaction
,TransactionList
andBudget
models. - Added documentation on commands implemented like
AddTransactionCommand
andHelpCommand
.
- Added implementation details of model features like
- User Guide:
- Community:
- PRs reviewed : refer to here