# pierregoupil13/spending architecture

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

- Interactive diagram: https://gitdiagram.com/pierregoupil13/spending
- Repository: https://github.com/pierregoupil13/spending

## Overview

This is a small Spring Boot spending tracker. Users can open an entry form, save a categorized spending record, view all records, and filter records by date range. The controller owns those request flows, delegates persistence to a Spring Data JPA repository, and returns server-rendered templates. The entity and category enum define the stored spending data and its classification. Template contents and database configuration were not sampled, so the form and storage wiring are shown only where supported by the controller and repository declarations.

Main entry points: [`src/main/java/app/spending/spending/Controller/SpendingController.java`](https://github.com/pierregoupil13/spending/blob/main/src/main/java/app/spending/spending/Controller/SpendingController.java) (Spending controller), [`src/main/java/app/spending/spending/Repository/SpendingRepository.java`](https://github.com/pierregoupil13/spending/blob/main/src/main/java/app/spending/spending/Repository/SpendingRepository.java) (Spending repository), [`src/main/resources/templates/add-spending.html`](https://github.com/pierregoupil13/spending/blob/main/src/main/resources/templates/add-spending.html) (Add spending view), [`src/main/resources/templates/list-spending.html`](https://github.com/pierregoupil13/spending/blob/main/src/main/resources/templates/list-spending.html) (Spending list view)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web interaction"]
  node_controller["Spending controller"]
  node_add_view["Add spending view<br/>[add-spending.html]"]
  node_list_view["Spending list view<br/>[list-spending.html]"]
end

subgraph group_domain["Spending domain"]
  node_spending["Spending record<br/>[Spending.java]"]
  node_category["Spending categories<br/>[Category.java]"]
end

subgraph group_persistence["Persistence"]
  node_repository["Spending repository"]
  node_database[("JPA database")]
end

node_user(("User"))

node_user -->|"sends requests"| node_controller
node_controller -->|"renders form"| node_add_view
node_controller -->|"renders results"| node_list_view
node_controller -->|"loads categories"| node_category
node_controller -->|"saves spending"| node_repository
node_controller -->|"reads spending"| node_repository
node_repository -->|"persists records"| node_database
node_controller -->|"binds record"| node_spending

click node_controller "https://github.com/pierregoupil13/spending/blob/main/src/main/java/app/spending/spending/Controller/SpendingController.java"
click node_add_view "https://github.com/pierregoupil13/spending/blob/main/src/main/resources/templates/add-spending.html"
click node_list_view "https://github.com/pierregoupil13/spending/blob/main/src/main/resources/templates/list-spending.html"
click node_spending "https://github.com/pierregoupil13/spending/blob/main/src/main/java/app/spending/spending/Entity/Spending.java"
click node_category "https://github.com/pierregoupil13/spending/blob/main/src/main/java/app/spending/spending/Entity/Category.java"
click node_repository "https://github.com/pierregoupil13/spending/blob/main/src/main/java/app/spending/spending/Repository/SpendingRepository.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_controller,node_add_view,node_list_view,node_user toneBlue
class node_spending,node_category toneAmber
class node_repository,node_database toneMint
```

## Components

### Web interaction

- [Spending controller](https://github.com/pierregoupil13/spending/blob/main/src/main/java/app/spending/spending/Controller/SpendingController.java): `src/main/java/app/spending/spending/Controller/SpendingController.java`
- [Add spending view](https://github.com/pierregoupil13/spending/blob/main/src/main/resources/templates/add-spending.html): `src/main/resources/templates/add-spending.html`
- [Spending list view](https://github.com/pierregoupil13/spending/blob/main/src/main/resources/templates/list-spending.html): `src/main/resources/templates/list-spending.html`

### Spending domain

- [Spending record](https://github.com/pierregoupil13/spending/blob/main/src/main/java/app/spending/spending/Entity/Spending.java): `src/main/java/app/spending/spending/Entity/Spending.java`
- [Spending categories](https://github.com/pierregoupil13/spending/blob/main/src/main/java/app/spending/spending/Entity/Category.java): `src/main/java/app/spending/spending/Entity/Category.java`

### Persistence

- [Spending repository](https://github.com/pierregoupil13/spending/blob/main/src/main/java/app/spending/spending/Repository/SpendingRepository.java): `src/main/java/app/spending/spending/Repository/SpendingRepository.java`
- **JPA database**

### Other components

- **User**

## Connections

- User → Spending controller: sends requests
- Spending controller → Add spending view: renders form
- Spending controller → Spending list view: renders results
- Spending controller → Spending categories: loads categories
- Spending controller → Spending repository: saves spending
- Spending controller → Spending repository: reads spending
- Spending repository → JPA database: persists records
- Spending controller → Spending record: binds record
