# janaylson-369/biblioteca-ag-backend architecture

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

- Interactive diagram: https://gitdiagram.com/janaylson-369/biblioteca-ag-backend
- Repository: https://github.com/janaylson-369/biblioteca-ag-backend

## Overview

This is a Spring backend for a library system: its domain includes book/catalog management, users and reader profiles, reservations, physical copies, and loans. The principal workflow is cataloging a book and its copies, then reserving or borrowing an available copy and recording its return. Sampled service code shows book registration and cover storage, and loan entities encode return and renewal behavior. The README provides no capability details; unsampled controllers and services are represented cautiously, and edges are limited to relationships shown in excerpts or the source index.

Main entry points: [`src/main/java/br/gov/biblioteca_ag_backend/service/LivroService.java`](https://github.com/janaylson-369/biblioteca-ag-backend/blob/main/src/main/java/br/gov/biblioteca_ag_backend/service/LivroService.java) (Book management), [`src/main/java/br/gov/biblioteca_ag_backend/controller`](https://github.com/janaylson-369/biblioteca-ag-backend/tree/main/src/main/java/br/gov/biblioteca_ag_backend/controller) (Catalog endpoints), [`src/main/java/br/gov/biblioteca_ag_backend/service/EmprestimoService.java`](https://github.com/janaylson-369/biblioteca-ag-backend/blob/main/src/main/java/br/gov/biblioteca_ag_backend/service/EmprestimoService.java) (Loan operations), [`src/main/java/br/gov/biblioteca_ag_backend/service/UsuarioService.java`](https://github.com/janaylson-369/biblioteca-ag-backend/blob/main/src/main/java/br/gov/biblioteca_ag_backend/service/UsuarioService.java) (User management)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_catalog["Catalog"]
  node_book_service["Book management<br/>[LivroService.java]"]
  node_cover_storage["Cover storage"]
  node_book_entity["Book catalog<br/>[Livro.java]"]
  node_authors["Authors and categories"]
end

subgraph group_circulation["Circulation"]
  node_loan_service["Loan operations"]
  node_loan_entity["Loan lifecycle<br/>[Emprestimo.java]"]
  node_reservation_service["Reservations"]
  node_reservation_entity["Reservation state<br/>[Reserva.java]"]
  node_copy_records["Physical copies<br/>[Exemplar.java]"]
end

subgraph group_identity["Users and Access"]
  node_user_service["User management"]
  node_user_entity["User identity<br/>[Usuario.java]"]
  node_reader_profile["Reader profiles"]
end

subgraph group_runtime["API and Persistence"]
  node_catalog_api["Catalog endpoints"]
  node_book_repo["Book records"]
  node_circulation_api["Circulation endpoints"]
  node_loan_repo["Loan records"]
  node_reservation_repo["Reservation records"]
  node_user_api["User endpoints"]
  node_user_repo["User records"]
  node_validation["Request validation"]
end

node_staff(("Library staff"))
node_database[("Relational database")]

node_staff -.->|"submits requests"| node_catalog_api
node_catalog_api -->|"routes to"| node_book_service
node_book_service -->|"reads and writes"| node_book_repo
node_book_service -->|"stores cover"| node_cover_storage
node_book_service -->|"links authors"| node_authors
node_book_repo -->|"persists entities"| node_database
node_staff -.->|"submits requests"| node_circulation_api
node_circulation_api -->|"routes to"| node_loan_service
node_loan_service -->|"queries loans"| node_loan_repo
node_loan_repo -->|"persists entities"| node_database
node_loan_entity -->|"releases copy"| node_copy_records
node_staff -.->|"requests reservation"| node_circulation_api
node_reservation_service -->|"queries reservations"| node_reservation_repo
node_reservation_repo -->|"persists entities"| node_database
node_staff -.->|"submits requests"| node_user_api
node_user_api -.->|"routes to"| node_user_service
node_user_service -.->|"accesses records"| node_user_repo
node_user_repo -->|"persists entities"| node_database
node_validation -.->|"validates input"| node_catalog_api

click node_catalog_api "https://github.com/janaylson-369/biblioteca-ag-backend/tree/main/src/main/java/br/gov/biblioteca_ag_backend/controller"
click node_book_service "https://github.com/janaylson-369/biblioteca-ag-backend/blob/main/src/main/java/br/gov/biblioteca_ag_backend/service/LivroService.java"
click node_cover_storage "https://github.com/janaylson-369/biblioteca-ag-backend/blob/main/src/main/java/br/gov/biblioteca_ag_backend/service/CapaStorageService.java"
click node_book_repo "https://github.com/janaylson-369/biblioteca-ag-backend/blob/main/src/main/java/br/gov/biblioteca_ag_backend/repository/LivroRepository.java"
click node_book_entity "https://github.com/janaylson-369/biblioteca-ag-backend/blob/main/src/main/java/br/gov/biblioteca_ag_backend/model/Livro.java"
click node_authors "https://github.com/janaylson-369/biblioteca-ag-backend/tree/main/src/main/java/br/gov/biblioteca_ag_backend/model"
click node_circulation_api "https://github.com/janaylson-369/biblioteca-ag-backend/tree/main/src/main/java/br/gov/biblioteca_ag_backend/controller"
click node_loan_service "https://github.com/janaylson-369/biblioteca-ag-backend/blob/main/src/main/java/br/gov/biblioteca_ag_backend/service/EmprestimoService.java"
click node_loan_entity "https://github.com/janaylson-369/biblioteca-ag-backend/blob/main/src/main/java/br/gov/biblioteca_ag_backend/model/Emprestimo.java"
click node_loan_repo "https://github.com/janaylson-369/biblioteca-ag-backend/blob/main/src/main/java/br/gov/biblioteca_ag_backend/repository/EmprestimoRepository.java"
click node_reservation_service "https://github.com/janaylson-369/biblioteca-ag-backend/blob/main/src/main/java/br/gov/biblioteca_ag_backend/service/ReservaService.java"
click node_reservation_entity "https://github.com/janaylson-369/biblioteca-ag-backend/blob/main/src/main/java/br/gov/biblioteca_ag_backend/model/Reserva.java"
click node_reservation_repo "https://github.com/janaylson-369/biblioteca-ag-backend/blob/main/src/main/java/br/gov/biblioteca_ag_backend/repository/ReservaRepository.java"
click node_copy_records "https://github.com/janaylson-369/biblioteca-ag-backend/blob/main/src/main/java/br/gov/biblioteca_ag_backend/model/Exemplar.java"
click node_user_api "https://github.com/janaylson-369/biblioteca-ag-backend/tree/main/src/main/java/br/gov/biblioteca_ag_backend/controller"
click node_user_service "https://github.com/janaylson-369/biblioteca-ag-backend/blob/main/src/main/java/br/gov/biblioteca_ag_backend/service/UsuarioService.java"
click node_user_entity "https://github.com/janaylson-369/biblioteca-ag-backend/blob/main/src/main/java/br/gov/biblioteca_ag_backend/model/Usuario.java"
click node_user_repo "https://github.com/janaylson-369/biblioteca-ag-backend/blob/main/src/main/java/br/gov/biblioteca_ag_backend/repository/UsuarioRepository.java"
click node_reader_profile "https://github.com/janaylson-369/biblioteca-ag-backend/blob/main/src/main/java/br/gov/biblioteca_ag_backend/service/DadosLeitorService.java"
click node_validation "https://github.com/janaylson-369/biblioteca-ag-backend/blob/main/src/main/java/br/gov/biblioteca_ag_backend/validation/RequestValidator.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_book_service,node_cover_storage,node_book_entity,node_authors toneBlue
class node_loan_service,node_loan_entity,node_reservation_service,node_reservation_entity,node_copy_records,node_database toneAmber
class node_user_service,node_user_entity,node_reader_profile toneMint
class node_catalog_api,node_book_repo,node_circulation_api,node_loan_repo,node_reservation_repo,node_user_api,node_user_repo,node_validation toneRose
class node_staff toneIndigo
```

## Components

### Catalog

- [Book management](https://github.com/janaylson-369/biblioteca-ag-backend/blob/main/src/main/java/br/gov/biblioteca_ag_backend/service/LivroService.java): `src/main/java/br/gov/biblioteca_ag_backend/service/LivroService.java`
- [Cover storage](https://github.com/janaylson-369/biblioteca-ag-backend/blob/main/src/main/java/br/gov/biblioteca_ag_backend/service/CapaStorageService.java): `src/main/java/br/gov/biblioteca_ag_backend/service/CapaStorageService.java`
- [Book catalog](https://github.com/janaylson-369/biblioteca-ag-backend/blob/main/src/main/java/br/gov/biblioteca_ag_backend/model/Livro.java): `src/main/java/br/gov/biblioteca_ag_backend/model/Livro.java`
- [Authors and categories](https://github.com/janaylson-369/biblioteca-ag-backend/tree/main/src/main/java/br/gov/biblioteca_ag_backend/model): `src/main/java/br/gov/biblioteca_ag_backend/model`

### Circulation

- [Loan operations](https://github.com/janaylson-369/biblioteca-ag-backend/blob/main/src/main/java/br/gov/biblioteca_ag_backend/service/EmprestimoService.java): `src/main/java/br/gov/biblioteca_ag_backend/service/EmprestimoService.java`
- [Loan lifecycle](https://github.com/janaylson-369/biblioteca-ag-backend/blob/main/src/main/java/br/gov/biblioteca_ag_backend/model/Emprestimo.java): `src/main/java/br/gov/biblioteca_ag_backend/model/Emprestimo.java`
- [Reservations](https://github.com/janaylson-369/biblioteca-ag-backend/blob/main/src/main/java/br/gov/biblioteca_ag_backend/service/ReservaService.java): `src/main/java/br/gov/biblioteca_ag_backend/service/ReservaService.java`
- [Reservation state](https://github.com/janaylson-369/biblioteca-ag-backend/blob/main/src/main/java/br/gov/biblioteca_ag_backend/model/Reserva.java): `src/main/java/br/gov/biblioteca_ag_backend/model/Reserva.java`
- [Physical copies](https://github.com/janaylson-369/biblioteca-ag-backend/blob/main/src/main/java/br/gov/biblioteca_ag_backend/model/Exemplar.java): `src/main/java/br/gov/biblioteca_ag_backend/model/Exemplar.java`

### Users and Access

- [User management](https://github.com/janaylson-369/biblioteca-ag-backend/blob/main/src/main/java/br/gov/biblioteca_ag_backend/service/UsuarioService.java): `src/main/java/br/gov/biblioteca_ag_backend/service/UsuarioService.java`
- [User identity](https://github.com/janaylson-369/biblioteca-ag-backend/blob/main/src/main/java/br/gov/biblioteca_ag_backend/model/Usuario.java): `src/main/java/br/gov/biblioteca_ag_backend/model/Usuario.java`
- [Reader profiles](https://github.com/janaylson-369/biblioteca-ag-backend/blob/main/src/main/java/br/gov/biblioteca_ag_backend/service/DadosLeitorService.java): `src/main/java/br/gov/biblioteca_ag_backend/service/DadosLeitorService.java`

### API and Persistence

- [Catalog endpoints](https://github.com/janaylson-369/biblioteca-ag-backend/tree/main/src/main/java/br/gov/biblioteca_ag_backend/controller): `src/main/java/br/gov/biblioteca_ag_backend/controller`
- [Book records](https://github.com/janaylson-369/biblioteca-ag-backend/blob/main/src/main/java/br/gov/biblioteca_ag_backend/repository/LivroRepository.java): `src/main/java/br/gov/biblioteca_ag_backend/repository/LivroRepository.java`
- [Circulation endpoints](https://github.com/janaylson-369/biblioteca-ag-backend/tree/main/src/main/java/br/gov/biblioteca_ag_backend/controller): `src/main/java/br/gov/biblioteca_ag_backend/controller`
- [Loan records](https://github.com/janaylson-369/biblioteca-ag-backend/blob/main/src/main/java/br/gov/biblioteca_ag_backend/repository/EmprestimoRepository.java): `src/main/java/br/gov/biblioteca_ag_backend/repository/EmprestimoRepository.java`
- [Reservation records](https://github.com/janaylson-369/biblioteca-ag-backend/blob/main/src/main/java/br/gov/biblioteca_ag_backend/repository/ReservaRepository.java): `src/main/java/br/gov/biblioteca_ag_backend/repository/ReservaRepository.java`
- [User endpoints](https://github.com/janaylson-369/biblioteca-ag-backend/tree/main/src/main/java/br/gov/biblioteca_ag_backend/controller): `src/main/java/br/gov/biblioteca_ag_backend/controller`
- [User records](https://github.com/janaylson-369/biblioteca-ag-backend/blob/main/src/main/java/br/gov/biblioteca_ag_backend/repository/UsuarioRepository.java): `src/main/java/br/gov/biblioteca_ag_backend/repository/UsuarioRepository.java`
- [Request validation](https://github.com/janaylson-369/biblioteca-ag-backend/blob/main/src/main/java/br/gov/biblioteca_ag_backend/validation/RequestValidator.java): `src/main/java/br/gov/biblioteca_ag_backend/validation/RequestValidator.java`

### Other components

- **Library staff**
- **Relational database**

## Connections

- Library staff → Catalog endpoints: submits requests
- Catalog endpoints → Book management: routes to (evidence: `src/main/java/br/gov/biblioteca_ag_backend/controller/LivroController.java`)
- Book management → Book records: reads and writes (evidence: `src/main/java/br/gov/biblioteca_ag_backend/service/LivroService.java`)
- Book management → Cover storage: stores cover (evidence: `src/main/java/br/gov/biblioteca_ag_backend/service/LivroService.java`)
- Book management → Authors and categories: links authors (evidence: `src/main/java/br/gov/biblioteca_ag_backend/service/LivroService.java`)
- Book records → Relational database: persists entities (evidence: `src/main/java/br/gov/biblioteca_ag_backend/repository/LivroRepository.java`)
- Library staff → Circulation endpoints: submits requests
- Circulation endpoints → Loan operations: routes to (evidence: `src/main/java/br/gov/biblioteca_ag_backend/controller/EmprestimoController.java`)
- Loan operations → Loan records: queries loans (evidence: `src/main/java/br/gov/biblioteca_ag_backend/service/EmprestimoService.java`)
- Loan records → Relational database: persists entities (evidence: `src/main/java/br/gov/biblioteca_ag_backend/repository/EmprestimoRepository.java`)
- Loan lifecycle → Physical copies: releases copy (evidence: `src/main/java/br/gov/biblioteca_ag_backend/model/Emprestimo.java`)
- Library staff → Circulation endpoints: requests reservation
- Reservations → Reservation records: queries reservations (evidence: `src/main/java/br/gov/biblioteca_ag_backend/service/ReservaService.java`)
- Reservation records → Relational database: persists entities (evidence: `src/main/java/br/gov/biblioteca_ag_backend/repository/ReservaRepository.java`)
- Library staff → User endpoints: submits requests
- User endpoints → User management: routes to (evidence: `src/main/java/br/gov/biblioteca_ag_backend/controller/UsuarioController.java`)
- User management → User records: accesses records (evidence: `src/main/java/br/gov/biblioteca_ag_backend/service/UsuarioService.java`)
- User records → Relational database: persists entities
- Request validation → Catalog endpoints: validates input (evidence: `src/main/java/br/gov/biblioteca_ag_backend/controller/LivroController.java`)
