Skip to content
 
 

Latest commit

 

History

110 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Finance-Management-System

ZakaWise is a full-stack personal finance management web application that allow users to take charge of their money. It provides users with the functionaliity of tracking their income and expenses, create and manage budgets, create and monitor saving goals and gives daily financial tips to users. This is secure with Firebase Authentication.

Kanban Board Customization

The Kanban board for ZakaWise was customized using the Automated Kanban template to support Agile development.

Two additional columns were added:

  • Testing: This column is used to track tasks that have been implemented but require testing. This ensures quality assurance before completion.
  • Blocked: This column is used to identify tasks that cannot proceed due to dependencies or technical issues. This helps in quickly identifying bottlenecks.

The board includes user stories and sprint tasks from Assignment 6, allowing full traceability between planning and implementation.

Automation was used to move tasks between "To Do", "In Progress", and "Done", improving workflow efficiency and reducing manual updates.

Assignment 10

The system follows a layered architecture:

  • Controller Layer (REST API endpoints)
  • Service Layer (business logic)
  • Repository Layer (data access using Spring Data JPA)
  • Model Layer (entities representing database tables)
  • Creational Patterns Layer (object creation logic/design patterns)

Design patterns used:

  • Singleton pattern was used for DatabaseConnection to ensure only one instance of the database connection exists throughout the application lifecycle. This improves performance and prevents multiple unnecessary connections.
  • Factory pattern was used in NotificationFactory and other object creation utilities to centralize object creation logic and reduce duplication in service classes.
  • Builder pattern was Used for User, Budget, Transaction, SavingsGoal, and Notification objects because these entities contain multiple fields, some fields are optional, improves readability and maintainability prevents regeneration of constructors

Technologies used

  • Java 17+
  • Spring Boot
  • Spring Data JPA
  • Hibernate
  • JUnit 5
  • Mockito
  • Maven

Key decisions

  • Builder Pattern was chosen for complex entity creation.
  • Service layer handles business logic only (no direct repository logic in controllers).
  • Repository layer abstracts database operations.
  • Mockito was avoided in final testing to demonstrate manual unit testing using JUnit and in-memory fakes.

Assignment 11

Design Choice: Dependency Injection (DI)

I selected Dependency Injection (DI) as the primary pattern for managing repository dependencies in the service layer.

Reasons:

  • Services do not depend on concrete repository implementations.
  • Enables easy unit testing using mock or in-memory repositories.
  • Spring Boot manages the instantiation of repository beans and injects them into services
  • Repositories can be swapped without changing service code.

Assignment 13

How to Run the Project Locally

1. Clone Repositor

CI/CD PIPELINE (GitHub Actions)

Continuous Integration (CI)

Triggered on:

  • Push to any branch
  • Pull requests to main

CI pipeline:

  • Sets up Java environment (JDK 17)
  • Builds the project using Maven
  • Runs all unit tests

Continuous Deployment (CD)

Triggered only when code is merged into main.

CD pipeline:

  • Builds the Spring Boot JAR file
  • Skips tests (after CI validation)
  • Uploads .jar file as a GitHub Actions artifact

Project Documents

About

No description, website, or topics provided.

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages