# isaacggr/finance_app architecture

> Architecture diagram of the GitHub repository isaacggr/finance_app, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-10). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/isaacggr/finance_app
- Repository: https://github.com/isaacggr/finance_app

## Overview

Finance App is a personal-finance REST API. Users authenticate and manage accounts, record and filter income or expenses, then review dashboard summaries and category budgets; reports and due-bill alerts provide email automation. The graph separates API entry points, business services, persistence/domain, and security/notifications. README-documented capabilities are included where implementation files were not sampled; those links cite the README rather than implying source inspection.

Main entry points: [`src/main/java/com/isaacggr/finance_app/service/AuthService.java`](https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/service/AuthService.java) (Auth and verification), [`src/main/java/com/isaacggr/finance_app/service/MonthlyReportService.java`](https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/service/MonthlyReportService.java) (Monthly reports), [`src/main/java/com/isaacggr/finance_app/controller/ReportController.java`](https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/controller/ReportController.java) (Reports API), [`src/main/java/com/isaacggr/finance_app/service/BudgetService.java`](https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/service/BudgetService.java) (Budget progress)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API endpoints"]
  node_auth_api["Authentication API"]
  node_users_api["User API"]
  node_transactions_api["Transactions API"]
  node_budgets_api["Budgets API"]
  node_dashboard_api["Dashboard API"]
  node_reports_api["Reports API"]
end

subgraph group_services["Finance services"]
  node_user_service["User management<br/>[UserService.java]"]
  node_transaction_service["Transaction management"]
  node_budget_service["Budget progress<br/>[BudgetService.java]"]
  node_dashboard_service["Financial analytics"]
end

subgraph group_identity["Identity and security"]
  node_auth_service["Auth and verification<br/>[AuthService.java]"]
  node_token_service["JWT tokens<br/>[TokenService.java]"]
  node_verification_service["Verification codes"]
  node_security["JWT request security"]
end

subgraph group_data["Domain and persistence"]
  node_user_repository[("Users and accounts")]
  node_transaction_repository[("Transaction queries")]
  node_token_repository[("Verification token store")]
  node_budget_repository[("Budget store")]
end

subgraph group_automation["Email automation"]
  node_monthly_service["Monthly reports"]
  node_bill_service["Due-bill alerts"]
  node_email_service["Email delivery<br/>[EmailService.java]"]
end

node_person(("Finance user"))
node_mail_provider["Mail service"]

node_person -->|"authenticates"| node_auth_api
node_person -->|"manages profile"| node_users_api
node_person -->|"records activity"| node_transactions_api
node_person -->|"sets limits"| node_budgets_api
node_person -->|"views summary"| node_dashboard_api
node_person -->|"requests reports"| node_reports_api
node_auth_api -->|"delegates to"| node_auth_service
node_users_api -->|"delegates to"| node_user_service
node_transactions_api -->|"delegates to"| node_transaction_service
node_budgets_api -->|"delegates to"| node_budget_service
node_dashboard_api -->|"requests analytics"| node_dashboard_service
node_reports_api -->|"requests report"| node_monthly_service
node_reports_api -->|"requests alerts"| node_bill_service
node_auth_service -->|"reads users"| node_user_repository
node_auth_service -->|"creates JWT"| node_token_service
node_auth_service -->|"manages codes"| node_verification_service
node_auth_service -->|"sends codes"| node_email_service
node_verification_service -->|"persists tokens"| node_token_repository
node_transaction_service -->|"queries transactions"| node_transaction_repository
node_budget_service -->|"loads budgets"| node_budget_repository
node_budget_service -->|"aggregates spending"| node_transaction_repository
node_monthly_service -->|"gets summary"| node_dashboard_service
node_monthly_service -->|"sends report"| node_email_service
node_monthly_service -->|"loads recipients"| node_user_repository
node_email_service -.->|"delivers email"| node_mail_provider

click node_auth_api "https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/controller/AuthController.java"
click node_users_api "https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/controller/UserController.java"
click node_transactions_api "https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/controller/TransactionController.java"
click node_budgets_api "https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/controller/BudgetController.java"
click node_dashboard_api "https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/controller/DashboardController.java"
click node_reports_api "https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/controller/ReportController.java"
click node_auth_service "https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/service/AuthService.java"
click node_token_service "https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/service/TokenService.java"
click node_verification_service "https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/service/VerificationTokenService.java"
click node_security "https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/config/SecurityFilter.java"
click node_user_service "https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/service/UserService.java"
click node_transaction_service "https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/service/TransactionService.java"
click node_budget_service "https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/service/BudgetService.java"
click node_dashboard_service "https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/service/DashboardService.java"
click node_monthly_service "https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/service/MonthlyReportService.java"
click node_bill_service "https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/service/BillAlertService.java"
click node_email_service "https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/service/EmailService.java"
click node_user_repository "https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/repository/UserRepository.java"
click node_transaction_repository "https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/repository/TransactionRepository.java"
click node_token_repository "https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/repository/VerificationTokenRepository.java"
click node_budget_repository "https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/repository/BudgetRepository.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_auth_api,node_users_api,node_transactions_api,node_budgets_api,node_dashboard_api,node_reports_api,node_person toneBlue
class node_user_service,node_transaction_service,node_budget_service,node_dashboard_service toneAmber
class node_auth_service,node_token_service,node_verification_service,node_security toneMint
class node_user_repository,node_transaction_repository,node_token_repository,node_budget_repository toneRose
class node_monthly_service,node_bill_service,node_email_service,node_mail_provider toneIndigo
```

## Components

### API endpoints

- [Authentication API](https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/controller/AuthController.java): `src/main/java/com/isaacggr/finance_app/controller/AuthController.java`
- [User API](https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/controller/UserController.java): `src/main/java/com/isaacggr/finance_app/controller/UserController.java`
- [Transactions API](https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/controller/TransactionController.java): `src/main/java/com/isaacggr/finance_app/controller/TransactionController.java`
- [Budgets API](https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/controller/BudgetController.java): `src/main/java/com/isaacggr/finance_app/controller/BudgetController.java`
- [Dashboard API](https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/controller/DashboardController.java): `src/main/java/com/isaacggr/finance_app/controller/DashboardController.java`
- [Reports API](https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/controller/ReportController.java): `src/main/java/com/isaacggr/finance_app/controller/ReportController.java`

### Finance services

- [User management](https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/service/UserService.java): `src/main/java/com/isaacggr/finance_app/service/UserService.java`
- [Transaction management](https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/service/TransactionService.java): `src/main/java/com/isaacggr/finance_app/service/TransactionService.java`
- [Budget progress](https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/service/BudgetService.java): `src/main/java/com/isaacggr/finance_app/service/BudgetService.java`
- [Financial analytics](https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/service/DashboardService.java): `src/main/java/com/isaacggr/finance_app/service/DashboardService.java`

### Identity and security

- [Auth and verification](https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/service/AuthService.java): `src/main/java/com/isaacggr/finance_app/service/AuthService.java`
- [JWT tokens](https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/service/TokenService.java): `src/main/java/com/isaacggr/finance_app/service/TokenService.java`
- [Verification codes](https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/service/VerificationTokenService.java): `src/main/java/com/isaacggr/finance_app/service/VerificationTokenService.java`
- [JWT request security](https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/config/SecurityFilter.java): `src/main/java/com/isaacggr/finance_app/config/SecurityFilter.java`

### Domain and persistence

- [Users and accounts](https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/repository/UserRepository.java): `src/main/java/com/isaacggr/finance_app/repository/UserRepository.java`
- [Transaction queries](https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/repository/TransactionRepository.java): `src/main/java/com/isaacggr/finance_app/repository/TransactionRepository.java`
- [Verification token store](https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/repository/VerificationTokenRepository.java): `src/main/java/com/isaacggr/finance_app/repository/VerificationTokenRepository.java`
- [Budget store](https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/repository/BudgetRepository.java): `src/main/java/com/isaacggr/finance_app/repository/BudgetRepository.java`

### Email automation

- [Monthly reports](https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/service/MonthlyReportService.java): `src/main/java/com/isaacggr/finance_app/service/MonthlyReportService.java`
- [Due-bill alerts](https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/service/BillAlertService.java): `src/main/java/com/isaacggr/finance_app/service/BillAlertService.java`
- [Email delivery](https://github.com/isaacggr/finance_app/blob/main/src/main/java/com/isaacggr/finance_app/service/EmailService.java): `src/main/java/com/isaacggr/finance_app/service/EmailService.java`

### Other components

- **Finance user**
- **Mail service**

## Connections

- Finance user → Authentication API: authenticates
- Finance user → User API: manages profile
- Finance user → Transactions API: records activity
- Finance user → Budgets API: sets limits
- Finance user → Dashboard API: views summary
- Finance user → Reports API: requests reports
- Authentication API → Auth and verification: delegates to (evidence: `src/main/java/com/isaacggr/finance_app/controller/AuthController.java`)
- User API → User management: delegates to (evidence: `src/main/java/com/isaacggr/finance_app/controller/UserController.java`)
- Transactions API → Transaction management: delegates to (evidence: `src/main/java/com/isaacggr/finance_app/controller/TransactionController.java`)
- Budgets API → Budget progress: delegates to (evidence: `src/main/java/com/isaacggr/finance_app/controller/BudgetController.java`)
- Dashboard API → Financial analytics: requests analytics (evidence: `src/main/java/com/isaacggr/finance_app/controller/DashboardController.java`)
- Reports API → Monthly reports: requests report (evidence: `src/main/java/com/isaacggr/finance_app/controller/ReportController.java`)
- Reports API → Due-bill alerts: requests alerts (evidence: `src/main/java/com/isaacggr/finance_app/controller/ReportController.java`)
- Auth and verification → Users and accounts: reads users (evidence: `src/main/java/com/isaacggr/finance_app/service/AuthService.java`)
- Auth and verification → JWT tokens: creates JWT (evidence: `src/main/java/com/isaacggr/finance_app/service/AuthService.java`)
- Auth and verification → Verification codes: manages codes (evidence: `src/main/java/com/isaacggr/finance_app/service/AuthService.java`)
- Auth and verification → Email delivery: sends codes (evidence: `src/main/java/com/isaacggr/finance_app/service/AuthService.java`)
- Verification codes → Verification token store: persists tokens (evidence: `src/main/java/com/isaacggr/finance_app/service/VerificationTokenService.java`)
- Transaction management → Transaction queries: queries transactions (evidence: `src/main/java/com/isaacggr/finance_app/service/TransactionService.java`)
- Budget progress → Budget store: loads budgets (evidence: `src/main/java/com/isaacggr/finance_app/service/BudgetService.java`)
- Budget progress → Transaction queries: aggregates spending (evidence: `src/main/java/com/isaacggr/finance_app/service/BudgetService.java`)
- Monthly reports → Financial analytics: gets summary (evidence: `src/main/java/com/isaacggr/finance_app/service/MonthlyReportService.java`)
- Monthly reports → Email delivery: sends report (evidence: `src/main/java/com/isaacggr/finance_app/service/MonthlyReportService.java`)
- Monthly reports → Users and accounts: loads recipients (evidence: `src/main/java/com/isaacggr/finance_app/service/MonthlyReportService.java`)
- Email delivery → Mail service: delivers email
