# samuelrmagro/reservas-salas-api architecture

> Architecture diagram of the GitHub repository samuelrmagro/reservas-salas-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/samuelrmagro/reservas-salas-api
- Repository: https://github.com/samuelrmagro/reservas-salas-api

## Overview

This is a Spring API for managing room reservations, rooms, and users. Clients submit CRUD, filtered-list, and reservation lifecycle requests through REST controllers; services validate domain rules, coordinate room/user eligibility and persistence, and return DTOs. Reservation creation and reactivation enforce scheduling constraints, while room and user records can be inactivated. The graph reflects explicit controller calls and source-index references; several implementation details, including the room repository and custom validator implementations, were not sampled, so their links are omitted.

Main entry points: [`src/main/java/br/com/samuelmagro/reserva_salas_api/service/ReservaService.java`](https://github.com/samuelrmagro/reservas-salas-api/blob/main/src/main/java/br/com/samuelmagro/reserva_salas_api/service/ReservaService.java) (Reservation Rules), [`src/main/java/br/com/samuelmagro/reserva_salas_api/service/SalaService.java`](https://github.com/samuelrmagro/reservas-salas-api/blob/main/src/main/java/br/com/samuelmagro/reserva_salas_api/service/SalaService.java) (Room Management), [`src/main/java/br/com/samuelmagro/reserva_salas_api/service/UsuarioService.java`](https://github.com/samuelrmagro/reservas-salas-api/blob/main/src/main/java/br/com/samuelmagro/reserva_salas_api/service/UsuarioService.java) (User Management), [`src/main/java/br/com/samuelmagro/reserva_salas_api/controller/ReservaController.java`](https://github.com/samuelrmagro/reservas-salas-api/blob/main/src/main/java/br/com/samuelmagro/reserva_salas_api/controller/ReservaController.java) (Reservation Endpoints)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["REST API"]
  node_reservation_api["Reservation Endpoints"]
  node_room_api["Room Endpoints"]
  node_user_api["User Endpoints"]
  node_error_handler["Error Responses"]
end

subgraph group_domain["Domain Services"]
  node_reservation_service["Reservation Rules"]
  node_room_service["Room Management<br/>[SalaService.java]"]
  node_user_service["User Management"]
  node_reservation_mapper["Reservation Mapping<br/>[ReservaMapper.java]"]
  node_room_mapper["Room Mapping<br/>[SalaMapper.java]"]
  node_user_mapper["User Mapping<br/>[UsuarioMapper.java]"]
end

subgraph group_persistence["Persistence"]
  node_reservation_repo["Reservation Access"]
  node_room_repo["Room Access"]
  node_user_repo["User Access"]
  node_reservation_model["Reservation State<br/>[Reserva.java]"]
  node_room_model["Room State<br/>[Sala.java]"]
  node_user_model["User State<br/>[Usuario.java]"]
end

subgraph group_contracts["Contracts And Validation"]
  node_reservation_contracts["Reservation DTOs"]
  node_room_contracts["Room DTOs"]
  node_user_contracts["User DTOs"]
  node_date_validation["Date Constraints"]
  node_date_validators["Date Validators"]
  node_error_dtos["Error DTOs"]
end

node_client(("API Client"))

node_client -->|"sends requests"| node_reservation_api
node_client -->|"sends requests"| node_room_api
node_client -->|"sends requests"| node_user_api
node_reservation_api -->|"delegates to"| node_reservation_service
node_room_api -->|"delegates to"| node_room_service
node_user_api -->|"delegates to"| node_user_service
node_reservation_service -->|"queries and saves"| node_reservation_repo
node_reservation_service -->|"checks room"| node_room_service
node_reservation_service -->|"checks user"| node_user_service
node_reservation_service -->|"maps results"| node_reservation_mapper
node_room_service -->|"queries and saves"| node_room_repo
node_room_service -->|"maps results"| node_room_mapper
node_user_service -->|"queries and saves"| node_user_repo
node_user_service -->|"maps results"| node_user_mapper
node_reservation_repo -->|"accesses entity"| node_reservation_model
node_user_repo -->|"accesses entity"| node_user_model
node_reservation_service -->|"uses requests"| node_reservation_contracts
node_room_service -->|"uses requests"| node_room_contracts
node_user_service -->|"uses requests"| node_user_contracts
node_date_validation -->|"registers validators"| node_date_validators
node_error_handler -->|"builds responses"| node_error_dtos

click node_reservation_api "https://github.com/samuelrmagro/reservas-salas-api/blob/main/src/main/java/br/com/samuelmagro/reserva_salas_api/controller/ReservaController.java"
click node_room_api "https://github.com/samuelrmagro/reservas-salas-api/blob/main/src/main/java/br/com/samuelmagro/reserva_salas_api/controller/SalaController.java"
click node_user_api "https://github.com/samuelrmagro/reservas-salas-api/blob/main/src/main/java/br/com/samuelmagro/reserva_salas_api/controller/UsuarioController.java"
click node_error_handler "https://github.com/samuelrmagro/reservas-salas-api/blob/main/src/main/java/br/com/samuelmagro/reserva_salas_api/exception/GlobalExceptionHandler.java"
click node_reservation_service "https://github.com/samuelrmagro/reservas-salas-api/blob/main/src/main/java/br/com/samuelmagro/reserva_salas_api/service/ReservaService.java"
click node_room_service "https://github.com/samuelrmagro/reservas-salas-api/blob/main/src/main/java/br/com/samuelmagro/reserva_salas_api/service/SalaService.java"
click node_user_service "https://github.com/samuelrmagro/reservas-salas-api/blob/main/src/main/java/br/com/samuelmagro/reserva_salas_api/service/UsuarioService.java"
click node_reservation_mapper "https://github.com/samuelrmagro/reservas-salas-api/blob/main/src/main/java/br/com/samuelmagro/reserva_salas_api/mapper/ReservaMapper.java"
click node_room_mapper "https://github.com/samuelrmagro/reservas-salas-api/blob/main/src/main/java/br/com/samuelmagro/reserva_salas_api/mapper/SalaMapper.java"
click node_user_mapper "https://github.com/samuelrmagro/reservas-salas-api/blob/main/src/main/java/br/com/samuelmagro/reserva_salas_api/mapper/UsuarioMapper.java"
click node_reservation_repo "https://github.com/samuelrmagro/reservas-salas-api/blob/main/src/main/java/br/com/samuelmagro/reserva_salas_api/repository/ReservaRepository.java"
click node_room_repo "https://github.com/samuelrmagro/reservas-salas-api/blob/main/src/main/java/br/com/samuelmagro/reserva_salas_api/repository/SalaRepository.java"
click node_user_repo "https://github.com/samuelrmagro/reservas-salas-api/blob/main/src/main/java/br/com/samuelmagro/reserva_salas_api/repository/UsuarioRepository.java"
click node_reservation_model "https://github.com/samuelrmagro/reservas-salas-api/blob/main/src/main/java/br/com/samuelmagro/reserva_salas_api/model/Reserva.java"
click node_room_model "https://github.com/samuelrmagro/reservas-salas-api/blob/main/src/main/java/br/com/samuelmagro/reserva_salas_api/model/Sala.java"
click node_user_model "https://github.com/samuelrmagro/reservas-salas-api/blob/main/src/main/java/br/com/samuelmagro/reserva_salas_api/model/Usuario.java"
click node_reservation_contracts "https://github.com/samuelrmagro/reservas-salas-api/tree/main/src/main/java/br/com/samuelmagro/reserva_salas_api/dto/reserva"
click node_room_contracts "https://github.com/samuelrmagro/reservas-salas-api/tree/main/src/main/java/br/com/samuelmagro/reserva_salas_api/dto/sala"
click node_user_contracts "https://github.com/samuelrmagro/reservas-salas-api/tree/main/src/main/java/br/com/samuelmagro/reserva_salas_api/dto/usuario"
click node_date_validation "https://github.com/samuelrmagro/reservas-salas-api/tree/main/src/main/java/br/com/samuelmagro/reserva_salas_api/customValidation/anotacaoCustomizada"
click node_date_validators "https://github.com/samuelrmagro/reservas-salas-api/tree/main/src/main/java/br/com/samuelmagro/reserva_salas_api/customValidation/validator"
click node_error_dtos "https://github.com/samuelrmagro/reservas-salas-api/tree/main/src/main/java/br/com/samuelmagro/reserva_salas_api/dto/exception"

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_reservation_api,node_room_api,node_user_api,node_error_handler,node_client toneBlue
class node_reservation_service,node_room_service,node_user_service,node_reservation_mapper,node_room_mapper,node_user_mapper toneAmber
class node_reservation_repo,node_room_repo,node_user_repo,node_reservation_model,node_room_model,node_user_model toneMint
class node_reservation_contracts,node_room_contracts,node_user_contracts,node_date_validation,node_date_validators,node_error_dtos toneRose
```

## Components

### REST API

- [Reservation Endpoints](https://github.com/samuelrmagro/reservas-salas-api/blob/main/src/main/java/br/com/samuelmagro/reserva_salas_api/controller/ReservaController.java): `src/main/java/br/com/samuelmagro/reserva_salas_api/controller/ReservaController.java`
- [Room Endpoints](https://github.com/samuelrmagro/reservas-salas-api/blob/main/src/main/java/br/com/samuelmagro/reserva_salas_api/controller/SalaController.java): `src/main/java/br/com/samuelmagro/reserva_salas_api/controller/SalaController.java`
- [User Endpoints](https://github.com/samuelrmagro/reservas-salas-api/blob/main/src/main/java/br/com/samuelmagro/reserva_salas_api/controller/UsuarioController.java): `src/main/java/br/com/samuelmagro/reserva_salas_api/controller/UsuarioController.java`
- [Error Responses](https://github.com/samuelrmagro/reservas-salas-api/blob/main/src/main/java/br/com/samuelmagro/reserva_salas_api/exception/GlobalExceptionHandler.java): `src/main/java/br/com/samuelmagro/reserva_salas_api/exception/GlobalExceptionHandler.java`

### Domain Services

- [Reservation Rules](https://github.com/samuelrmagro/reservas-salas-api/blob/main/src/main/java/br/com/samuelmagro/reserva_salas_api/service/ReservaService.java): `src/main/java/br/com/samuelmagro/reserva_salas_api/service/ReservaService.java`
- [Room Management](https://github.com/samuelrmagro/reservas-salas-api/blob/main/src/main/java/br/com/samuelmagro/reserva_salas_api/service/SalaService.java): `src/main/java/br/com/samuelmagro/reserva_salas_api/service/SalaService.java`
- [User Management](https://github.com/samuelrmagro/reservas-salas-api/blob/main/src/main/java/br/com/samuelmagro/reserva_salas_api/service/UsuarioService.java): `src/main/java/br/com/samuelmagro/reserva_salas_api/service/UsuarioService.java`
- [Reservation Mapping](https://github.com/samuelrmagro/reservas-salas-api/blob/main/src/main/java/br/com/samuelmagro/reserva_salas_api/mapper/ReservaMapper.java): `src/main/java/br/com/samuelmagro/reserva_salas_api/mapper/ReservaMapper.java`
- [Room Mapping](https://github.com/samuelrmagro/reservas-salas-api/blob/main/src/main/java/br/com/samuelmagro/reserva_salas_api/mapper/SalaMapper.java): `src/main/java/br/com/samuelmagro/reserva_salas_api/mapper/SalaMapper.java`
- [User Mapping](https://github.com/samuelrmagro/reservas-salas-api/blob/main/src/main/java/br/com/samuelmagro/reserva_salas_api/mapper/UsuarioMapper.java): `src/main/java/br/com/samuelmagro/reserva_salas_api/mapper/UsuarioMapper.java`

### Persistence

- [Reservation Access](https://github.com/samuelrmagro/reservas-salas-api/blob/main/src/main/java/br/com/samuelmagro/reserva_salas_api/repository/ReservaRepository.java): `src/main/java/br/com/samuelmagro/reserva_salas_api/repository/ReservaRepository.java`
- [Room Access](https://github.com/samuelrmagro/reservas-salas-api/blob/main/src/main/java/br/com/samuelmagro/reserva_salas_api/repository/SalaRepository.java): `src/main/java/br/com/samuelmagro/reserva_salas_api/repository/SalaRepository.java`
- [User Access](https://github.com/samuelrmagro/reservas-salas-api/blob/main/src/main/java/br/com/samuelmagro/reserva_salas_api/repository/UsuarioRepository.java): `src/main/java/br/com/samuelmagro/reserva_salas_api/repository/UsuarioRepository.java`
- [Reservation State](https://github.com/samuelrmagro/reservas-salas-api/blob/main/src/main/java/br/com/samuelmagro/reserva_salas_api/model/Reserva.java): `src/main/java/br/com/samuelmagro/reserva_salas_api/model/Reserva.java`
- [Room State](https://github.com/samuelrmagro/reservas-salas-api/blob/main/src/main/java/br/com/samuelmagro/reserva_salas_api/model/Sala.java): `src/main/java/br/com/samuelmagro/reserva_salas_api/model/Sala.java`
- [User State](https://github.com/samuelrmagro/reservas-salas-api/blob/main/src/main/java/br/com/samuelmagro/reserva_salas_api/model/Usuario.java): `src/main/java/br/com/samuelmagro/reserva_salas_api/model/Usuario.java`

### Contracts And Validation

- [Reservation DTOs](https://github.com/samuelrmagro/reservas-salas-api/tree/main/src/main/java/br/com/samuelmagro/reserva_salas_api/dto/reserva): `src/main/java/br/com/samuelmagro/reserva_salas_api/dto/reserva`
- [Room DTOs](https://github.com/samuelrmagro/reservas-salas-api/tree/main/src/main/java/br/com/samuelmagro/reserva_salas_api/dto/sala): `src/main/java/br/com/samuelmagro/reserva_salas_api/dto/sala`
- [User DTOs](https://github.com/samuelrmagro/reservas-salas-api/tree/main/src/main/java/br/com/samuelmagro/reserva_salas_api/dto/usuario): `src/main/java/br/com/samuelmagro/reserva_salas_api/dto/usuario`
- [Date Constraints](https://github.com/samuelrmagro/reservas-salas-api/tree/main/src/main/java/br/com/samuelmagro/reserva_salas_api/customValidation/anotacaoCustomizada): `src/main/java/br/com/samuelmagro/reserva_salas_api/customValidation/anotacaoCustomizada`
- [Date Validators](https://github.com/samuelrmagro/reservas-salas-api/tree/main/src/main/java/br/com/samuelmagro/reserva_salas_api/customValidation/validator): `src/main/java/br/com/samuelmagro/reserva_salas_api/customValidation/validator`
- [Error DTOs](https://github.com/samuelrmagro/reservas-salas-api/tree/main/src/main/java/br/com/samuelmagro/reserva_salas_api/dto/exception): `src/main/java/br/com/samuelmagro/reserva_salas_api/dto/exception`

### Other components

- **API Client**

## Connections

- API Client → Reservation Endpoints: sends requests
- API Client → Room Endpoints: sends requests
- API Client → User Endpoints: sends requests
- Reservation Endpoints → Reservation Rules: delegates to (evidence: `src/main/java/br/com/samuelmagro/reserva_salas_api/controller/ReservaController.java`)
- Room Endpoints → Room Management: delegates to (evidence: `src/main/java/br/com/samuelmagro/reserva_salas_api/controller/SalaController.java`)
- User Endpoints → User Management: delegates to (evidence: `src/main/java/br/com/samuelmagro/reserva_salas_api/controller/UsuarioController.java`)
- Reservation Rules → Reservation Access: queries and saves (evidence: `src/main/java/br/com/samuelmagro/reserva_salas_api/service/ReservaService.java`)
- Reservation Rules → Room Management: checks room (evidence: `src/main/java/br/com/samuelmagro/reserva_salas_api/service/ReservaService.java`)
- Reservation Rules → User Management: checks user (evidence: `src/main/java/br/com/samuelmagro/reserva_salas_api/service/ReservaService.java`)
- Reservation Rules → Reservation Mapping: maps results (evidence: `src/main/java/br/com/samuelmagro/reserva_salas_api/service/ReservaService.java`)
- Room Management → Room Access: queries and saves (evidence: `src/main/java/br/com/samuelmagro/reserva_salas_api/service/SalaService.java`)
- Room Management → Room Mapping: maps results (evidence: `src/main/java/br/com/samuelmagro/reserva_salas_api/service/SalaService.java`)
- User Management → User Access: queries and saves (evidence: `src/main/java/br/com/samuelmagro/reserva_salas_api/service/UsuarioService.java`)
- User Management → User Mapping: maps results (evidence: `src/main/java/br/com/samuelmagro/reserva_salas_api/service/UsuarioService.java`)
- Reservation Access → Reservation State: accesses entity (evidence: `src/main/java/br/com/samuelmagro/reserva_salas_api/repository/ReservaRepository.java`)
- User Access → User State: accesses entity (evidence: `src/main/java/br/com/samuelmagro/reserva_salas_api/repository/UsuarioRepository.java`)
- Reservation Rules → Reservation DTOs: uses requests (evidence: `src/main/java/br/com/samuelmagro/reserva_salas_api/service/ReservaService.java`)
- Room Management → Room DTOs: uses requests (evidence: `src/main/java/br/com/samuelmagro/reserva_salas_api/service/SalaService.java`)
- User Management → User DTOs: uses requests (evidence: `src/main/java/br/com/samuelmagro/reserva_salas_api/service/UsuarioService.java`)
- Date Constraints → Date Validators: registers validators (evidence: `src/main/java/br/com/samuelmagro/reserva_salas_api/customValidation/anotacaoCustomizada/DataDentroIntervalo.java`)
- Error Responses → Error DTOs: builds responses (evidence: `src/main/java/br/com/samuelmagro/reserva_salas_api/exception/GlobalExceptionHandler.java`)
