# izayata/reference-spring-boot-api architecture

> Architecture diagram of the GitHub repository izayata/reference-spring-boot-api, 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/izayata/reference-spring-boot-api
- Repository: https://github.com/izayata/reference-spring-boot-api

## Overview

ImagineBar is a Spring Boot REST backend for restaurant and bar management. Clients use its API for authentication, registration, catalog browsing, customer/account operations, orders, and password resets. The documented architecture routes controller work through services to repositories and entities, with converters between persistence entities and API DTOs. Security adds session/CSRF controls and Redis-backed rate limits; documented event-driven side effects dispatch email for registration, orders, and password changes. Relationships reflect README statements; source excerpts were unavailable, so finer-grained calls and event wiring are not asserted.

Main entry points: [`src/main/java/bar/imagine/demo/service`](https://github.com/izayata/reference-spring-boot-api/tree/main/src/main/java/bar/imagine/demo/service) (Business services), [`src/main/java/bar/imagine/demo/controller/AuthController.java`](https://github.com/izayata/reference-spring-boot-api/blob/main/src/main/java/bar/imagine/demo/controller/AuthController.java) (Authentication), [`src/main/java/bar/imagine/demo/repository`](https://github.com/izayata/reference-spring-boot-api/tree/main/src/main/java/bar/imagine/demo/repository) (Data repositories), [`src/main/java/bar/imagine/demo/converter`](https://github.com/izayata/reference-spring-boot-api/tree/main/src/main/java/bar/imagine/demo/converter) (DTO converters)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API workflows"]
  node_auth["Authentication"]
  node_registration["Registration"]
  node_catalog["Food catalog"]
  node_orders["Order handling"]
  node_customer["Customer accounts"]
  node_password["Password reset"]
end

subgraph group_domain["Domain and persistence"]
  node_services["Business services"]
  node_converters["DTO converters"]
  node_dto["API DTOs"]
  node_repositories["Data repositories"]
  node_entities["Domain entities"]
end

subgraph group_security["Security"]
  node_security["Session security"]
  node_ratefilter["Login rate limit"]
end

subgraph group_integrations["External integrations"]
  node_postgres[("PostgreSQL")]
  node_redis[("Redis")]
  node_email["Email dispatch<br/>[EmailService.java]"]
  node_outbox["Email outbox"]
end

node_client(("API client"))

node_client -->|"uses REST"| node_auth
node_client -->|"uses REST"| node_registration
node_client -->|"uses REST"| node_catalog
node_client -->|"uses REST"| node_orders
node_client -->|"uses REST"| node_customer
node_client -->|"uses REST"| node_password
node_auth -->|"delegates to"| node_services
node_registration -->|"delegates to"| node_services
node_catalog -->|"delegates to"| node_services
node_orders -->|"delegates to"| node_services
node_customer -->|"delegates to"| node_services
node_password -->|"delegates to"| node_services
node_services -->|"uses"| node_repositories
node_repositories -->|"persists"| node_entities
node_converters -->|"converts"| node_entities
node_converters -->|"converts"| node_dto
node_auth -->|"secured by"| node_security
node_ratefilter -->|"rate limits with"| node_redis
node_repositories -->|"persists to"| node_postgres
node_services -.->|"queues email"| node_outbox
node_outbox -.->|"dispatches"| node_email

click node_auth "https://github.com/izayata/reference-spring-boot-api/blob/main/src/main/java/bar/imagine/demo/controller/AuthController.java"
click node_registration "https://github.com/izayata/reference-spring-boot-api/blob/main/src/main/java/bar/imagine/demo/controller/RegistrationController.java"
click node_catalog "https://github.com/izayata/reference-spring-boot-api/blob/main/src/main/java/bar/imagine/demo/controller/FoodController.java"
click node_orders "https://github.com/izayata/reference-spring-boot-api/blob/main/src/main/java/bar/imagine/demo/controller/OrderController.java"
click node_customer "https://github.com/izayata/reference-spring-boot-api/blob/main/src/main/java/bar/imagine/demo/controller/CustomerController.java"
click node_password "https://github.com/izayata/reference-spring-boot-api/blob/main/src/main/java/bar/imagine/demo/controller/PasswordResetController.java"
click node_services "https://github.com/izayata/reference-spring-boot-api/tree/main/src/main/java/bar/imagine/demo/service"
click node_converters "https://github.com/izayata/reference-spring-boot-api/tree/main/src/main/java/bar/imagine/demo/converter"
click node_dto "https://github.com/izayata/reference-spring-boot-api/tree/main/src/main/java/bar/imagine/demo/dto"
click node_repositories "https://github.com/izayata/reference-spring-boot-api/tree/main/src/main/java/bar/imagine/demo/repository"
click node_entities "https://github.com/izayata/reference-spring-boot-api/tree/main/src/main/java/bar/imagine/demo/data"
click node_security "https://github.com/izayata/reference-spring-boot-api/blob/main/src/main/java/bar/imagine/demo/config/SecurityConfig.java"
click node_ratefilter "https://github.com/izayata/reference-spring-boot-api/blob/main/src/main/java/bar/imagine/demo/config/LoginRateLimitFilter.java"
click node_email "https://github.com/izayata/reference-spring-boot-api/blob/main/src/main/java/bar/imagine/demo/service/EmailService.java"
click node_outbox "https://github.com/izayata/reference-spring-boot-api/blob/main/src/main/java/bar/imagine/demo/service/EmailOutboxService.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,node_registration,node_catalog,node_orders,node_customer,node_password,node_client toneBlue
class node_services,node_converters,node_dto,node_repositories,node_entities toneAmber
class node_security,node_ratefilter toneMint
class node_postgres,node_redis,node_email,node_outbox toneRose
```

## Components

### API workflows

- [Authentication](https://github.com/izayata/reference-spring-boot-api/blob/main/src/main/java/bar/imagine/demo/controller/AuthController.java): `src/main/java/bar/imagine/demo/controller/AuthController.java`
- [Registration](https://github.com/izayata/reference-spring-boot-api/blob/main/src/main/java/bar/imagine/demo/controller/RegistrationController.java): `src/main/java/bar/imagine/demo/controller/RegistrationController.java`
- [Food catalog](https://github.com/izayata/reference-spring-boot-api/blob/main/src/main/java/bar/imagine/demo/controller/FoodController.java): `src/main/java/bar/imagine/demo/controller/FoodController.java`
- [Order handling](https://github.com/izayata/reference-spring-boot-api/blob/main/src/main/java/bar/imagine/demo/controller/OrderController.java): `src/main/java/bar/imagine/demo/controller/OrderController.java`
- [Customer accounts](https://github.com/izayata/reference-spring-boot-api/blob/main/src/main/java/bar/imagine/demo/controller/CustomerController.java): `src/main/java/bar/imagine/demo/controller/CustomerController.java`
- [Password reset](https://github.com/izayata/reference-spring-boot-api/blob/main/src/main/java/bar/imagine/demo/controller/PasswordResetController.java): `src/main/java/bar/imagine/demo/controller/PasswordResetController.java`

### Domain and persistence

- [Business services](https://github.com/izayata/reference-spring-boot-api/tree/main/src/main/java/bar/imagine/demo/service): `src/main/java/bar/imagine/demo/service`
- [DTO converters](https://github.com/izayata/reference-spring-boot-api/tree/main/src/main/java/bar/imagine/demo/converter): `src/main/java/bar/imagine/demo/converter`
- [API DTOs](https://github.com/izayata/reference-spring-boot-api/tree/main/src/main/java/bar/imagine/demo/dto): `src/main/java/bar/imagine/demo/dto`
- [Data repositories](https://github.com/izayata/reference-spring-boot-api/tree/main/src/main/java/bar/imagine/demo/repository): `src/main/java/bar/imagine/demo/repository`
- [Domain entities](https://github.com/izayata/reference-spring-boot-api/tree/main/src/main/java/bar/imagine/demo/data): `src/main/java/bar/imagine/demo/data`

### Security

- [Session security](https://github.com/izayata/reference-spring-boot-api/blob/main/src/main/java/bar/imagine/demo/config/SecurityConfig.java): `src/main/java/bar/imagine/demo/config/SecurityConfig.java`
- [Login rate limit](https://github.com/izayata/reference-spring-boot-api/blob/main/src/main/java/bar/imagine/demo/config/LoginRateLimitFilter.java): `src/main/java/bar/imagine/demo/config/LoginRateLimitFilter.java`

### External integrations

- **PostgreSQL**
- **Redis**
- [Email dispatch](https://github.com/izayata/reference-spring-boot-api/blob/main/src/main/java/bar/imagine/demo/service/EmailService.java): `src/main/java/bar/imagine/demo/service/EmailService.java`
- [Email outbox](https://github.com/izayata/reference-spring-boot-api/blob/main/src/main/java/bar/imagine/demo/service/EmailOutboxService.java): `src/main/java/bar/imagine/demo/service/EmailOutboxService.java`

### Other components

- **API client**

## Connections

- API client → Authentication: uses REST (evidence: `README.md`)
- API client → Registration: uses REST (evidence: `README.md`)
- API client → Food catalog: uses REST (evidence: `README.md`)
- API client → Order handling: uses REST (evidence: `README.md`)
- API client → Customer accounts: uses REST (evidence: `README.md`)
- API client → Password reset: uses REST (evidence: `README.md`)
- Authentication → Business services: delegates to (evidence: `README.md`)
- Registration → Business services: delegates to (evidence: `README.md`)
- Food catalog → Business services: delegates to (evidence: `README.md`)
- Order handling → Business services: delegates to (evidence: `README.md`)
- Customer accounts → Business services: delegates to (evidence: `README.md`)
- Password reset → Business services: delegates to (evidence: `README.md`)
- Business services → Data repositories: uses (evidence: `README.md`)
- Data repositories → Domain entities: persists (evidence: `README.md`)
- DTO converters → Domain entities: converts (evidence: `README.md`)
- DTO converters → API DTOs: converts (evidence: `README.md`)
- Authentication → Session security: secured by (evidence: `README.md`)
- Login rate limit → Redis: rate limits with (evidence: `README.md`)
- Data repositories → PostgreSQL: persists to (evidence: `README.md`)
- Business services → Email outbox: queues email
- Email outbox → Email dispatch: dispatches
