# udaychand348/expense-tracker-backend architecture

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

- Interactive diagram: https://gitdiagram.com/udaychand348/expense-tracker-backend
- Repository: https://github.com/udaychand348/expense-tracker-backend

## Overview

Expense Tracker is a Spring application for user registration/login and personal expense management. Users can register through an OTP validation flow, log in for a JWT, and use authenticated expense/profile endpoints; the expense controller is present, though its implementation was not sampled. OTPs are held in process memory and the code persists users/expenses through Spring Data repositories. The graph shows only relationships evidenced by sampled calls or the source index; unsampled controller behavior and database configuration are not asserted.

Main entry points: [`src/main/java/com/expense/app/repo/UserRepository.java`](https://github.com/udaychand348/expense-tracker-backend/blob/master/src/main/java/com/expense/app/repo/UserRepository.java) (User repository), [`src/main/java/com/expense/app/controller/UserController.java`](https://github.com/udaychand348/expense-tracker-backend/blob/master/src/main/java/com/expense/app/controller/UserController.java) (User API), [`src/main/java/com/expense/app/service/UserService.java`](https://github.com/udaychand348/expense-tracker-backend/blob/master/src/main/java/com/expense/app/service/UserService.java) (User service), [`src/main/java/com/expense/app/loginimp/UserDetailsServiceImpl.java`](https://github.com/udaychand348/expense-tracker-backend/blob/master/src/main/java/com/expense/app/loginimp/UserDetailsServiceImpl.java) (User details loader)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API endpoints"]
  node_expense_api["Expense API"]
  node_user_api["User API"]
  node_profile_api["Profile API"]
  node_error_handler["Error handling"]
end

subgraph group_identity["Identity and security"]
  node_user_service["User service<br/>[UserService.java]"]
  node_otp["OTP registration<br/>[Otpgenerator.java]"]
  node_jwt_filter["JWT filter"]
  node_jwt["JWT utilities<br/>[JwtUtil.java]"]
  node_user_details["User details loader"]
  node_security_config["Security configuration<br/>[MyConfig.java]"]
end

subgraph group_expenses["Expense management"]
  node_expense_service["Expense service"]
end

subgraph group_persistence["Domain and persistence"]
  node_expense_model["Expense records<br/>[Expense.java]"]
  node_user_model["User accounts<br/>[User.java]"]
  node_auth_models["Login and OTP DTOs<br/>[LoginRequest.java]"]
  node_login_response["Login response<br/>[LoginResponse.java]"]
  node_otp_request["OTP request<br/>[Otprequest.java]"]
  node_expense_repo["Expense repository"]
  node_user_repo["User repository"]
  node_database[("Relational database")]
end

node_user(("User"))

node_user -->|"registers or logs in"| node_user_api
node_user_api -->|"checks and authenticates"| node_user_service
node_user_api -->|"starts and validates OTP"| node_otp
node_user_api -->|"looks up account"| node_user_repo
node_user_api -->|"returns token details"| node_login_response
node_otp -->|"saves verified user"| node_user_repo
node_user_service -->|"looks up account"| node_user_repo
node_user_service -->|"loads login identity"| node_user_details
node_user_service -->|"generates token"| node_jwt
node_jwt_filter -->|"extracts and validates"| node_jwt
node_jwt_filter -->|"loads token identity"| node_user_details
node_security_config -->|"configures filter"| node_jwt_filter
node_security_config -->|"configures identity service"| node_user_details
node_user_details -->|"finds account"| node_user_repo
node_profile_api -.->|"retrieves profile"| node_user_service
node_expense_api -.->|"delegates expense actions"| node_expense_service
node_expense_service -->|"loads account"| node_user_repo
node_expense_service -->|"queries and changes expenses"| node_expense_repo
node_user_repo -->|"persists accounts"| node_user_model
node_expense_repo -->|"persists expenses"| node_expense_model
node_expense_model -->|"belongs to"| node_user_model
node_user_repo -.->|"stores records"| node_database
node_expense_repo -.->|"stores records"| node_database

click node_expense_api "https://github.com/udaychand348/expense-tracker-backend/blob/master/src/main/java/com/expense/app/controller/ExpenseController.java"
click node_user_api "https://github.com/udaychand348/expense-tracker-backend/blob/master/src/main/java/com/expense/app/controller/UserController.java"
click node_profile_api "https://github.com/udaychand348/expense-tracker-backend/blob/master/src/main/java/com/expense/app/controller/ProfileController.java"
click node_error_handler "https://github.com/udaychand348/expense-tracker-backend/blob/master/src/main/java/com/expense/app/controller/GlobalExceptionHandler.java"
click node_user_service "https://github.com/udaychand348/expense-tracker-backend/blob/master/src/main/java/com/expense/app/service/UserService.java"
click node_otp "https://github.com/udaychand348/expense-tracker-backend/blob/master/src/main/java/com/expense/app/service/Otpgenerator.java"
click node_jwt_filter "https://github.com/udaychand348/expense-tracker-backend/blob/master/src/main/java/com/expense/app/loginimp/JwtRequestFilter.java"
click node_jwt "https://github.com/udaychand348/expense-tracker-backend/blob/master/src/main/java/com/expense/app/loginimp/JwtUtil.java"
click node_user_details "https://github.com/udaychand348/expense-tracker-backend/blob/master/src/main/java/com/expense/app/loginimp/UserDetailsServiceImpl.java"
click node_security_config "https://github.com/udaychand348/expense-tracker-backend/blob/master/src/main/java/com/expense/app/loginimp/MyConfig.java"
click node_expense_service "https://github.com/udaychand348/expense-tracker-backend/blob/master/src/main/java/com/expense/app/service/ExpenseService.java"
click node_expense_model "https://github.com/udaychand348/expense-tracker-backend/blob/master/src/main/java/com/expense/app/entity/Expense.java"
click node_user_model "https://github.com/udaychand348/expense-tracker-backend/blob/master/src/main/java/com/expense/app/entity/User.java"
click node_auth_models "https://github.com/udaychand348/expense-tracker-backend/blob/master/src/main/java/com/expense/app/entity/LoginRequest.java"
click node_login_response "https://github.com/udaychand348/expense-tracker-backend/blob/master/src/main/java/com/expense/app/entity/LoginResponse.java"
click node_otp_request "https://github.com/udaychand348/expense-tracker-backend/blob/master/src/main/java/com/expense/app/entity/Otprequest.java"
click node_expense_repo "https://github.com/udaychand348/expense-tracker-backend/blob/master/src/main/java/com/expense/app/repo/ExpenseRepository.java"
click node_user_repo "https://github.com/udaychand348/expense-tracker-backend/blob/master/src/main/java/com/expense/app/repo/UserRepository.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_expense_api,node_user_api,node_profile_api,node_error_handler,node_user toneBlue
class node_user_service,node_otp,node_jwt_filter,node_jwt,node_user_details,node_security_config toneAmber
class node_expense_service toneMint
class node_expense_model,node_user_model,node_auth_models,node_login_response,node_otp_request,node_expense_repo,node_user_repo,node_database toneRose
```

## Components

### API endpoints

- [Expense API](https://github.com/udaychand348/expense-tracker-backend/blob/master/src/main/java/com/expense/app/controller/ExpenseController.java): `src/main/java/com/expense/app/controller/ExpenseController.java`
- [User API](https://github.com/udaychand348/expense-tracker-backend/blob/master/src/main/java/com/expense/app/controller/UserController.java): `src/main/java/com/expense/app/controller/UserController.java`
- [Profile API](https://github.com/udaychand348/expense-tracker-backend/blob/master/src/main/java/com/expense/app/controller/ProfileController.java): `src/main/java/com/expense/app/controller/ProfileController.java`
- [Error handling](https://github.com/udaychand348/expense-tracker-backend/blob/master/src/main/java/com/expense/app/controller/GlobalExceptionHandler.java): `src/main/java/com/expense/app/controller/GlobalExceptionHandler.java`

### Identity and security

- [User service](https://github.com/udaychand348/expense-tracker-backend/blob/master/src/main/java/com/expense/app/service/UserService.java): `src/main/java/com/expense/app/service/UserService.java`
- [OTP registration](https://github.com/udaychand348/expense-tracker-backend/blob/master/src/main/java/com/expense/app/service/Otpgenerator.java): `src/main/java/com/expense/app/service/Otpgenerator.java`
- [JWT filter](https://github.com/udaychand348/expense-tracker-backend/blob/master/src/main/java/com/expense/app/loginimp/JwtRequestFilter.java): `src/main/java/com/expense/app/loginimp/JwtRequestFilter.java`
- [JWT utilities](https://github.com/udaychand348/expense-tracker-backend/blob/master/src/main/java/com/expense/app/loginimp/JwtUtil.java): `src/main/java/com/expense/app/loginimp/JwtUtil.java`
- [User details loader](https://github.com/udaychand348/expense-tracker-backend/blob/master/src/main/java/com/expense/app/loginimp/UserDetailsServiceImpl.java): `src/main/java/com/expense/app/loginimp/UserDetailsServiceImpl.java`
- [Security configuration](https://github.com/udaychand348/expense-tracker-backend/blob/master/src/main/java/com/expense/app/loginimp/MyConfig.java): `src/main/java/com/expense/app/loginimp/MyConfig.java`

### Expense management

- [Expense service](https://github.com/udaychand348/expense-tracker-backend/blob/master/src/main/java/com/expense/app/service/ExpenseService.java): `src/main/java/com/expense/app/service/ExpenseService.java`

### Domain and persistence

- [Expense records](https://github.com/udaychand348/expense-tracker-backend/blob/master/src/main/java/com/expense/app/entity/Expense.java): `src/main/java/com/expense/app/entity/Expense.java`
- [User accounts](https://github.com/udaychand348/expense-tracker-backend/blob/master/src/main/java/com/expense/app/entity/User.java): `src/main/java/com/expense/app/entity/User.java`
- [Login and OTP DTOs](https://github.com/udaychand348/expense-tracker-backend/blob/master/src/main/java/com/expense/app/entity/LoginRequest.java): `src/main/java/com/expense/app/entity/LoginRequest.java`
- [Login response](https://github.com/udaychand348/expense-tracker-backend/blob/master/src/main/java/com/expense/app/entity/LoginResponse.java): `src/main/java/com/expense/app/entity/LoginResponse.java`
- [OTP request](https://github.com/udaychand348/expense-tracker-backend/blob/master/src/main/java/com/expense/app/entity/Otprequest.java): `src/main/java/com/expense/app/entity/Otprequest.java`
- [Expense repository](https://github.com/udaychand348/expense-tracker-backend/blob/master/src/main/java/com/expense/app/repo/ExpenseRepository.java): `src/main/java/com/expense/app/repo/ExpenseRepository.java`
- [User repository](https://github.com/udaychand348/expense-tracker-backend/blob/master/src/main/java/com/expense/app/repo/UserRepository.java): `src/main/java/com/expense/app/repo/UserRepository.java`
- **Relational database**

### Other components

- **User**

## Connections

- User → User API: registers or logs in (evidence: `src/main/java/com/expense/app/controller/UserController.java`)
- User API → User service: checks and authenticates (evidence: `src/main/java/com/expense/app/controller/UserController.java`)
- User API → OTP registration: starts and validates OTP (evidence: `src/main/java/com/expense/app/controller/UserController.java`)
- User API → User repository: looks up account (evidence: `src/main/java/com/expense/app/controller/UserController.java`)
- User API → Login response: returns token details (evidence: `src/main/java/com/expense/app/controller/UserController.java`)
- OTP registration → User repository: saves verified user (evidence: `src/main/java/com/expense/app/service/Otpgenerator.java`)
- User service → User repository: looks up account (evidence: `src/main/java/com/expense/app/service/UserService.java`)
- User service → User details loader: loads login identity (evidence: `src/main/java/com/expense/app/service/UserService.java`)
- User service → JWT utilities: generates token (evidence: `src/main/java/com/expense/app/service/UserService.java`)
- JWT filter → JWT utilities: extracts and validates (evidence: `src/main/java/com/expense/app/loginimp/JwtRequestFilter.java`)
- JWT filter → User details loader: loads token identity (evidence: `src/main/java/com/expense/app/loginimp/JwtRequestFilter.java`)
- Security configuration → JWT filter: configures filter (evidence: `src/main/java/com/expense/app/loginimp/MyConfig.java`)
- Security configuration → User details loader: configures identity service (evidence: `src/main/java/com/expense/app/loginimp/MyConfig.java`)
- User details loader → User repository: finds account (evidence: `src/main/java/com/expense/app/loginimp/UserDetailsServiceImpl.java`)
- Profile API → User service: retrieves profile (evidence: `src/main/java/com/expense/app/controller/ProfileController.java`)
- Expense API → Expense service: delegates expense actions (evidence: `src/main/java/com/expense/app/controller/ExpenseController.java`)
- Expense service → User repository: loads account (evidence: `src/main/java/com/expense/app/service/ExpenseService.java`)
- Expense service → Expense repository: queries and changes expenses (evidence: `src/main/java/com/expense/app/service/ExpenseService.java`)
- User repository → User accounts: persists accounts (evidence: `src/main/java/com/expense/app/repo/UserRepository.java`)
- Expense repository → Expense records: persists expenses (evidence: `src/main/java/com/expense/app/repo/ExpenseRepository.java`)
- Expense records → User accounts: belongs to (evidence: `src/main/java/com/expense/app/entity/Expense.java`)
- User repository → Relational database: stores records
- Expense repository → Relational database: stores records
