# bytegitaccnt/expensetrackerspring architecture

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

- Interactive diagram: https://gitdiagram.com/bytegitaccnt/expensetrackerspring
- Repository: https://github.com/bytegitaccnt/expensetrackerspring

## Overview

ETrace is a Spring Boot personal-finance REST backend. A client authenticates or registers, then uses user-scoped endpoints to record and browse expenses, manage categories and reserved funds, and review balances, transactions, or reports. Services implement domain rules and delegate persistence; expense and reserve operations also emit audit records. JWT security and configurable rate limiting protect API access. The README documents the broader reporting and transaction capabilities, but their implementation was not sampled, so those links are shown only at the documented layer boundaries.

Main entry points: [`src/main/java/com/myApp/ExpenseTracker/Repository`](https://github.com/bytegitaccnt/expensetrackerspring/tree/master/src/main/java/com/myApp/ExpenseTracker/Repository) (Data repositories), [`src/main/java/com/myApp/ExpenseTracker/Service/ExpenseService.java`](https://github.com/bytegitaccnt/expensetrackerspring/blob/master/src/main/java/com/myApp/ExpenseTracker/Service/ExpenseService.java) (Expense operations), [`src/main/java/com/myApp/ExpenseTracker/Service/UserService.java`](https://github.com/bytegitaccnt/expensetrackerspring/blob/master/src/main/java/com/myApp/ExpenseTracker/Service/UserService.java) (User operations), [`src/main/java/com/myApp/ExpenseTracker/Service/AuditService.java`](https://github.com/bytegitaccnt/expensetrackerspring/blob/master/src/main/java/com/myApp/ExpenseTracker/Service/AuditService.java) (Audit logging)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["REST API"]
  node_auth_api["Authentication API"]
  node_expense_api["Expense API"]
  node_category_api["Category API"]
  node_reserve_api["Reserve API"]
  node_balance_api["Balance API"]
  node_report_api["Report API"]
  node_app_api["App info API<br/>[AppController.java]"]
end

subgraph group_finance["Finance workflows"]
  node_user_service["User operations<br/>[UserService.java]"]
  node_expense_service["Expense operations"]
  node_category_service["Category operations"]
  node_reserve_service["Reserve operations"]
end

subgraph group_identity["Identity and protection"]
  node_auth_service["Token operations<br/>[JwtService.java]"]
  node_refresh_service["Refresh tokens"]
  node_security["JWT security"]
  node_jwt_filter["JWT request filter"]
  node_rate_limit["Rate limiting"]
end

subgraph group_data["Persistence and audit"]
  node_audit_service["Audit logging<br/>[AuditService.java]"]
  node_repositories["Data repositories"]
  node_domain_models["Finance entities"]
  node_database[("Relational database")]
end

subgraph group_reports["Transactions and reports"]
  node_transactions["Transaction records"]
  node_report_service["Report generation<br/>[ReportService.java]"]
  node_pdf["PDF output<br/>[PdfGenerator.java]"]
end

node_client(("API client"))

node_client -->|"sends auth requests"| node_auth_api
node_client -->|"manages expenses"| node_expense_api
node_client -->|"manages categories"| node_category_api
node_client -->|"manages reserves"| node_reserve_api
node_client -->|"checks balances"| node_balance_api
node_client -->|"requests reports"| node_report_api
node_client -->|"requests app info"| node_app_api
node_client -->|"requests throttled"| node_rate_limit
node_rate_limit -.->|"allows or rejects"| node_expense_api
node_auth_api -->|"registers users"| node_user_service
node_auth_api -->|"issues tokens"| node_auth_service
node_auth_api -->|"manages refresh"| node_refresh_service
node_security -->|"installs filter"| node_jwt_filter
node_jwt_filter -->|"validates tokens"| node_auth_service
node_expense_api -->|"handles requests"| node_expense_service
node_category_api -->|"handles requests"| node_category_service
node_reserve_api -->|"handles requests"| node_reserve_service
node_balance_api -->|"reads balance"| node_user_service
node_report_api -->|"requests reports"| node_report_service
node_expense_service -->|"finds or creates category"| node_category_service
node_expense_service -->|"withdraws reserved funds"| node_reserve_service
node_user_service -->|"records income"| node_transactions
node_report_service -->|"generates documents"| node_pdf
node_user_service -->|"reads and writes"| node_repositories
node_expense_service -->|"reads and writes"| node_repositories
node_category_service -->|"reads and writes"| node_repositories
node_reserve_service -->|"reads and writes"| node_repositories
node_transactions -->|"reads and writes"| node_repositories
node_refresh_service -->|"persists tokens"| node_repositories
node_expense_service -->|"logs changes"| node_audit_service
node_category_service -->|"logs changes"| node_audit_service
node_reserve_service -->|"logs changes"| node_audit_service
node_user_service -->|"logs changes"| node_audit_service
node_audit_service -->|"stores audit records"| node_repositories
node_repositories -->|"maps entities"| node_domain_models
node_repositories -->|"persists data"| node_database

click node_auth_api "https://github.com/bytegitaccnt/expensetrackerspring/blob/master/src/main/java/com/myApp/ExpenseTracker/Controller/AuthController.java"
click node_expense_api "https://github.com/bytegitaccnt/expensetrackerspring/blob/master/src/main/java/com/myApp/ExpenseTracker/Controller/ExpenseController.java"
click node_category_api "https://github.com/bytegitaccnt/expensetrackerspring/blob/master/src/main/java/com/myApp/ExpenseTracker/Controller/CategoryController.java"
click node_reserve_api "https://github.com/bytegitaccnt/expensetrackerspring/blob/master/src/main/java/com/myApp/ExpenseTracker/Controller/ReserveFundController.java"
click node_balance_api "https://github.com/bytegitaccnt/expensetrackerspring/blob/master/src/main/java/com/myApp/ExpenseTracker/Controller/BalanceController.java"
click node_report_api "https://github.com/bytegitaccnt/expensetrackerspring/blob/master/src/main/java/com/myApp/ExpenseTracker/Controller/ReportController.java"
click node_app_api "https://github.com/bytegitaccnt/expensetrackerspring/blob/master/src/main/java/com/myApp/ExpenseTracker/Controller/AppController.java"
click node_user_service "https://github.com/bytegitaccnt/expensetrackerspring/blob/master/src/main/java/com/myApp/ExpenseTracker/Service/UserService.java"
click node_expense_service "https://github.com/bytegitaccnt/expensetrackerspring/blob/master/src/main/java/com/myApp/ExpenseTracker/Service/ExpenseService.java"
click node_category_service "https://github.com/bytegitaccnt/expensetrackerspring/blob/master/src/main/java/com/myApp/ExpenseTracker/Service/CategoryService.java"
click node_reserve_service "https://github.com/bytegitaccnt/expensetrackerspring/blob/master/src/main/java/com/myApp/ExpenseTracker/Service/ReservedService.java"
click node_auth_service "https://github.com/bytegitaccnt/expensetrackerspring/blob/master/src/main/java/com/myApp/ExpenseTracker/Service/JwtService.java"
click node_refresh_service "https://github.com/bytegitaccnt/expensetrackerspring/blob/master/src/main/java/com/myApp/ExpenseTracker/Service/RefreshTokenService.java"
click node_security "https://github.com/bytegitaccnt/expensetrackerspring/blob/master/src/main/java/com/myApp/ExpenseTracker/Config/SecurityConfig.java"
click node_jwt_filter "https://github.com/bytegitaccnt/expensetrackerspring/blob/master/src/main/java/com/myApp/ExpenseTracker/Config/JwtAuthenticationFilter.java"
click node_rate_limit "https://github.com/bytegitaccnt/expensetrackerspring/blob/master/src/main/java/com/myApp/ExpenseTracker/Ratelimit/RateLimitInterceptor.java"
click node_audit_service "https://github.com/bytegitaccnt/expensetrackerspring/blob/master/src/main/java/com/myApp/ExpenseTracker/Service/AuditService.java"
click node_repositories "https://github.com/bytegitaccnt/expensetrackerspring/tree/master/src/main/java/com/myApp/ExpenseTracker/Repository"
click node_domain_models "https://github.com/bytegitaccnt/expensetrackerspring/tree/master/src/main/java/com/myApp/ExpenseTracker/Model"
click node_transactions "https://github.com/bytegitaccnt/expensetrackerspring/blob/master/src/main/java/com/myApp/ExpenseTracker/Service/TransactionService.java"
click node_report_service "https://github.com/bytegitaccnt/expensetrackerspring/blob/master/src/main/java/com/myApp/ExpenseTracker/Service/ReportService.java"
click node_pdf "https://github.com/bytegitaccnt/expensetrackerspring/blob/master/src/main/java/com/myApp/ExpenseTracker/Service/PdfGenerator.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_expense_api,node_category_api,node_reserve_api,node_balance_api,node_report_api,node_app_api,node_client toneBlue
class node_user_service,node_expense_service,node_category_service,node_reserve_service toneAmber
class node_auth_service,node_refresh_service,node_security,node_jwt_filter,node_rate_limit toneMint
class node_audit_service,node_repositories,node_domain_models,node_database toneRose
class node_transactions,node_report_service,node_pdf toneIndigo
```

## Components

### REST API

- [Authentication API](https://github.com/bytegitaccnt/expensetrackerspring/blob/master/src/main/java/com/myApp/ExpenseTracker/Controller/AuthController.java): `src/main/java/com/myApp/ExpenseTracker/Controller/AuthController.java`
- [Expense API](https://github.com/bytegitaccnt/expensetrackerspring/blob/master/src/main/java/com/myApp/ExpenseTracker/Controller/ExpenseController.java): `src/main/java/com/myApp/ExpenseTracker/Controller/ExpenseController.java`
- [Category API](https://github.com/bytegitaccnt/expensetrackerspring/blob/master/src/main/java/com/myApp/ExpenseTracker/Controller/CategoryController.java): `src/main/java/com/myApp/ExpenseTracker/Controller/CategoryController.java`
- [Reserve API](https://github.com/bytegitaccnt/expensetrackerspring/blob/master/src/main/java/com/myApp/ExpenseTracker/Controller/ReserveFundController.java): `src/main/java/com/myApp/ExpenseTracker/Controller/ReserveFundController.java`
- [Balance API](https://github.com/bytegitaccnt/expensetrackerspring/blob/master/src/main/java/com/myApp/ExpenseTracker/Controller/BalanceController.java): `src/main/java/com/myApp/ExpenseTracker/Controller/BalanceController.java`
- [Report API](https://github.com/bytegitaccnt/expensetrackerspring/blob/master/src/main/java/com/myApp/ExpenseTracker/Controller/ReportController.java): `src/main/java/com/myApp/ExpenseTracker/Controller/ReportController.java`
- [App info API](https://github.com/bytegitaccnt/expensetrackerspring/blob/master/src/main/java/com/myApp/ExpenseTracker/Controller/AppController.java): `src/main/java/com/myApp/ExpenseTracker/Controller/AppController.java`

### Finance workflows

- [User operations](https://github.com/bytegitaccnt/expensetrackerspring/blob/master/src/main/java/com/myApp/ExpenseTracker/Service/UserService.java): `src/main/java/com/myApp/ExpenseTracker/Service/UserService.java`
- [Expense operations](https://github.com/bytegitaccnt/expensetrackerspring/blob/master/src/main/java/com/myApp/ExpenseTracker/Service/ExpenseService.java): `src/main/java/com/myApp/ExpenseTracker/Service/ExpenseService.java`
- [Category operations](https://github.com/bytegitaccnt/expensetrackerspring/blob/master/src/main/java/com/myApp/ExpenseTracker/Service/CategoryService.java): `src/main/java/com/myApp/ExpenseTracker/Service/CategoryService.java`
- [Reserve operations](https://github.com/bytegitaccnt/expensetrackerspring/blob/master/src/main/java/com/myApp/ExpenseTracker/Service/ReservedService.java): `src/main/java/com/myApp/ExpenseTracker/Service/ReservedService.java`

### Identity and protection

- [Token operations](https://github.com/bytegitaccnt/expensetrackerspring/blob/master/src/main/java/com/myApp/ExpenseTracker/Service/JwtService.java): `src/main/java/com/myApp/ExpenseTracker/Service/JwtService.java`
- [Refresh tokens](https://github.com/bytegitaccnt/expensetrackerspring/blob/master/src/main/java/com/myApp/ExpenseTracker/Service/RefreshTokenService.java): `src/main/java/com/myApp/ExpenseTracker/Service/RefreshTokenService.java`
- [JWT security](https://github.com/bytegitaccnt/expensetrackerspring/blob/master/src/main/java/com/myApp/ExpenseTracker/Config/SecurityConfig.java): `src/main/java/com/myApp/ExpenseTracker/Config/SecurityConfig.java`
- [JWT request filter](https://github.com/bytegitaccnt/expensetrackerspring/blob/master/src/main/java/com/myApp/ExpenseTracker/Config/JwtAuthenticationFilter.java): `src/main/java/com/myApp/ExpenseTracker/Config/JwtAuthenticationFilter.java`
- [Rate limiting](https://github.com/bytegitaccnt/expensetrackerspring/blob/master/src/main/java/com/myApp/ExpenseTracker/Ratelimit/RateLimitInterceptor.java): `src/main/java/com/myApp/ExpenseTracker/Ratelimit/RateLimitInterceptor.java`

### Persistence and audit

- [Audit logging](https://github.com/bytegitaccnt/expensetrackerspring/blob/master/src/main/java/com/myApp/ExpenseTracker/Service/AuditService.java): `src/main/java/com/myApp/ExpenseTracker/Service/AuditService.java`
- [Data repositories](https://github.com/bytegitaccnt/expensetrackerspring/tree/master/src/main/java/com/myApp/ExpenseTracker/Repository): `src/main/java/com/myApp/ExpenseTracker/Repository`
- [Finance entities](https://github.com/bytegitaccnt/expensetrackerspring/tree/master/src/main/java/com/myApp/ExpenseTracker/Model): `src/main/java/com/myApp/ExpenseTracker/Model`
- **Relational database**

### Transactions and reports

- [Transaction records](https://github.com/bytegitaccnt/expensetrackerspring/blob/master/src/main/java/com/myApp/ExpenseTracker/Service/TransactionService.java): `src/main/java/com/myApp/ExpenseTracker/Service/TransactionService.java`
- [Report generation](https://github.com/bytegitaccnt/expensetrackerspring/blob/master/src/main/java/com/myApp/ExpenseTracker/Service/ReportService.java): `src/main/java/com/myApp/ExpenseTracker/Service/ReportService.java`
- [PDF output](https://github.com/bytegitaccnt/expensetrackerspring/blob/master/src/main/java/com/myApp/ExpenseTracker/Service/PdfGenerator.java): `src/main/java/com/myApp/ExpenseTracker/Service/PdfGenerator.java`

### Other components

- **API client**

## Connections

- API client → Authentication API: sends auth requests
- API client → Expense API: manages expenses
- API client → Category API: manages categories
- API client → Reserve API: manages reserves
- API client → Balance API: checks balances
- API client → Report API: requests reports
- API client → App info API: requests app info
- API client → Rate limiting: requests throttled
- Rate limiting → Expense API: allows or rejects
- Authentication API → User operations: registers users
- Authentication API → Token operations: issues tokens
- Authentication API → Refresh tokens: manages refresh
- JWT security → JWT request filter: installs filter
- JWT request filter → Token operations: validates tokens
- Expense API → Expense operations: handles requests
- Category API → Category operations: handles requests
- Reserve API → Reserve operations: handles requests
- Balance API → User operations: reads balance
- Report API → Report generation: requests reports
- Expense operations → Category operations: finds or creates category
- Expense operations → Reserve operations: withdraws reserved funds
- User operations → Transaction records: records income
- Report generation → PDF output: generates documents
- User operations → Data repositories: reads and writes
- Expense operations → Data repositories: reads and writes
- Category operations → Data repositories: reads and writes
- Reserve operations → Data repositories: reads and writes
- Transaction records → Data repositories: reads and writes
- Refresh tokens → Data repositories: persists tokens
- Expense operations → Audit logging: logs changes
- Category operations → Audit logging: logs changes
- Reserve operations → Audit logging: logs changes
- User operations → Audit logging: logs changes
- Audit logging → Data repositories: stores audit records
- Data repositories → Finance entities: maps entities
- Data repositories → Relational database: persists data
