# kyledelfin2006/libro-library-system architecture

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

- Interactive diagram: https://gitdiagram.com/kyledelfin2006/libro-library-system
- Repository: https://github.com/kyledelfin2006/libro-library-system

## Overview

Libro is a Spring Boot library-management REST API. Its main workflow is a client request routed through security and a domain controller, processed by a service, mapped between DTOs and entities, and persisted in PostgreSQL. Book operations include CRUD, search, paging, filtering, sorting, and collection analytics; user routes manage accounts and profiles, including password changes. Shared concerns include API error handling, validation, OpenAPI, and Flyway schema setup. Edges reflect the README and shown/indexed source references; unsampled implementation details are not inferred.

Main entry points: [`src/main/java/app/book/controller/BookAPI.java`](https://github.com/kyledelfin2006/libro-library-system/blob/main/src/main/java/app/book/controller/BookAPI.java) (Book routes), [`src/main/java/app/user/controller/UserAPI.java`](https://github.com/kyledelfin2006/libro-library-system/blob/main/src/main/java/app/user/controller/UserAPI.java) (User routes), [`src/main/java/app/user/service/UserService.java`](https://github.com/kyledelfin2006/libro-library-system/blob/main/src/main/java/app/user/service/UserService.java) (Account operations), [`src/main/java/app/book/service/BookService.java`](https://github.com/kyledelfin2006/libro-library-system/blob/main/src/main/java/app/book/service/BookService.java) (Catalog operations)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_book["Book Catalog"]
  node_bookapi["Book routes<br/>[BookAPI.java]"]
  node_bookservice["Catalog operations<br/>[BookService.java]"]
  node_bookdto["Book API DTOs"]
  node_bookmapper["Book mapping<br/>[BookMapper.java]"]
  node_bookentity["Book copy model<br/>[Book.java]"]
end

subgraph group_user["User Accounts"]
  node_userapi["User routes<br/>[UserAPI.java]"]
  node_userservice["Account operations<br/>[UserService.java]"]
  node_userdto["User API DTOs"]
  node_usermapper["User mapping<br/>[UserMapper.java]"]
  node_usermodel["User and enums"]
  node_password["Password policy"]
end

subgraph group_shared["Shared API"]
  node_security["Request security"]
  node_responses["API responses"]
  node_errors["Exception handling"]
  node_openapi["OpenAPI config<br/>[OpenApiConfig.java]"]
end

subgraph group_persistence["Persistence"]
  node_bookrepo["Book repository"]
  node_userrepo["User repository"]
  node_database[("PostgreSQL")]
  node_migrations["Schema migrations"]
end

node_client(("API client"))

node_client -->|"sends HTTP"| node_security
node_security -->|"permits requests"| node_bookapi
node_security -->|"permits requests"| node_userapi
node_bookapi -->|"delegates operations"| node_bookservice
node_bookapi -->|"maps responses"| node_bookmapper
node_bookapi -->|"accepts and returns"| node_bookdto
node_bookservice -->|"queries and saves"| node_bookrepo
node_bookservice -->|"maps entities"| node_bookmapper
node_bookrepo -->|"persists"| node_bookentity
node_userapi -->|"delegates operations"| node_userservice
node_userservice -->|"queries and saves"| node_userrepo
node_userservice -->|"maps profiles"| node_usermapper
node_userservice -->|"validates passwords"| node_password
node_userrepo -->|"persists"| node_usermodel
node_bookapi -->|"wraps results"| node_responses
node_userapi -->|"wraps results"| node_responses
node_errors -->|"formats errors"| node_responses
node_bookrepo -->|"accesses via JPA"| node_database
node_userrepo -->|"accesses via JPA"| node_database
node_migrations -->|"updates schema"| node_database
node_bookapi -.->|"documents routes"| node_openapi
node_userapi -.->|"documents routes"| node_openapi

click node_security "https://github.com/kyledelfin2006/libro-library-system/blob/main/src/main/java/app/auth/SecurityConfig.java"
click node_bookapi "https://github.com/kyledelfin2006/libro-library-system/blob/main/src/main/java/app/book/controller/BookAPI.java"
click node_bookservice "https://github.com/kyledelfin2006/libro-library-system/blob/main/src/main/java/app/book/service/BookService.java"
click node_bookdto "https://github.com/kyledelfin2006/libro-library-system/tree/main/src/main/java/app/book/dto"
click node_bookmapper "https://github.com/kyledelfin2006/libro-library-system/blob/main/src/main/java/app/book/mapper/BookMapper.java"
click node_bookentity "https://github.com/kyledelfin2006/libro-library-system/blob/main/src/main/java/app/book/entity/Book.java"
click node_userapi "https://github.com/kyledelfin2006/libro-library-system/blob/main/src/main/java/app/user/controller/UserAPI.java"
click node_userservice "https://github.com/kyledelfin2006/libro-library-system/blob/main/src/main/java/app/user/service/UserService.java"
click node_userdto "https://github.com/kyledelfin2006/libro-library-system/tree/main/src/main/java/app/user/dto"
click node_usermapper "https://github.com/kyledelfin2006/libro-library-system/blob/main/src/main/java/app/user/mapper/UserMapper.java"
click node_usermodel "https://github.com/kyledelfin2006/libro-library-system/tree/main/src/main/java/app/user/entity"
click node_password "https://github.com/kyledelfin2006/libro-library-system/blob/main/src/main/java/app/user/validation/PasswordPolicy.java"
click node_responses "https://github.com/kyledelfin2006/libro-library-system/tree/main/src/main/java/app/global/responses"
click node_errors "https://github.com/kyledelfin2006/libro-library-system/blob/main/src/main/java/app/global/exceptions/GlobalExceptionHandler.java"
click node_openapi "https://github.com/kyledelfin2006/libro-library-system/blob/main/src/main/java/app/global/config/OpenApiConfig.java"
click node_bookrepo "https://github.com/kyledelfin2006/libro-library-system/blob/main/src/main/java/app/book/repository/BookRepository.java"
click node_userrepo "https://github.com/kyledelfin2006/libro-library-system/blob/main/src/main/java/app/user/repository/UserRepository.java"
click node_migrations "https://github.com/kyledelfin2006/libro-library-system/tree/main/src/main/resources/db/migration"

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_bookapi,node_bookservice,node_bookdto,node_bookmapper,node_bookentity,node_client toneBlue
class node_userapi,node_userservice,node_userdto,node_usermapper,node_usermodel,node_password toneAmber
class node_security,node_responses,node_errors,node_openapi toneMint
class node_bookrepo,node_userrepo,node_database,node_migrations toneRose
```

## Components

### Book Catalog

- [Book routes](https://github.com/kyledelfin2006/libro-library-system/blob/main/src/main/java/app/book/controller/BookAPI.java): `src/main/java/app/book/controller/BookAPI.java`
- [Catalog operations](https://github.com/kyledelfin2006/libro-library-system/blob/main/src/main/java/app/book/service/BookService.java): `src/main/java/app/book/service/BookService.java`
- [Book API DTOs](https://github.com/kyledelfin2006/libro-library-system/tree/main/src/main/java/app/book/dto): `src/main/java/app/book/dto`
- [Book mapping](https://github.com/kyledelfin2006/libro-library-system/blob/main/src/main/java/app/book/mapper/BookMapper.java): `src/main/java/app/book/mapper/BookMapper.java`
- [Book copy model](https://github.com/kyledelfin2006/libro-library-system/blob/main/src/main/java/app/book/entity/Book.java): `src/main/java/app/book/entity/Book.java`

### User Accounts

- [User routes](https://github.com/kyledelfin2006/libro-library-system/blob/main/src/main/java/app/user/controller/UserAPI.java): `src/main/java/app/user/controller/UserAPI.java`
- [Account operations](https://github.com/kyledelfin2006/libro-library-system/blob/main/src/main/java/app/user/service/UserService.java): `src/main/java/app/user/service/UserService.java`
- [User API DTOs](https://github.com/kyledelfin2006/libro-library-system/tree/main/src/main/java/app/user/dto): `src/main/java/app/user/dto`
- [User mapping](https://github.com/kyledelfin2006/libro-library-system/blob/main/src/main/java/app/user/mapper/UserMapper.java): `src/main/java/app/user/mapper/UserMapper.java`
- [User and enums](https://github.com/kyledelfin2006/libro-library-system/tree/main/src/main/java/app/user/entity): `src/main/java/app/user/entity`
- [Password policy](https://github.com/kyledelfin2006/libro-library-system/blob/main/src/main/java/app/user/validation/PasswordPolicy.java): `src/main/java/app/user/validation/PasswordPolicy.java`

### Shared API

- [Request security](https://github.com/kyledelfin2006/libro-library-system/blob/main/src/main/java/app/auth/SecurityConfig.java): `src/main/java/app/auth/SecurityConfig.java`
- [API responses](https://github.com/kyledelfin2006/libro-library-system/tree/main/src/main/java/app/global/responses): `src/main/java/app/global/responses`
- [Exception handling](https://github.com/kyledelfin2006/libro-library-system/blob/main/src/main/java/app/global/exceptions/GlobalExceptionHandler.java): `src/main/java/app/global/exceptions/GlobalExceptionHandler.java`
- [OpenAPI config](https://github.com/kyledelfin2006/libro-library-system/blob/main/src/main/java/app/global/config/OpenApiConfig.java): `src/main/java/app/global/config/OpenApiConfig.java`

### Persistence

- [Book repository](https://github.com/kyledelfin2006/libro-library-system/blob/main/src/main/java/app/book/repository/BookRepository.java): `src/main/java/app/book/repository/BookRepository.java`
- [User repository](https://github.com/kyledelfin2006/libro-library-system/blob/main/src/main/java/app/user/repository/UserRepository.java): `src/main/java/app/user/repository/UserRepository.java`
- **PostgreSQL**
- [Schema migrations](https://github.com/kyledelfin2006/libro-library-system/tree/main/src/main/resources/db/migration): `src/main/resources/db/migration`

### Other components

- **API client**

## Connections

- API client → Request security: sends HTTP (evidence: `README.md`)
- Request security → Book routes: permits requests (evidence: `README.md`)
- Request security → User routes: permits requests (evidence: `README.md`)
- Book routes → Catalog operations: delegates operations (evidence: `README.md`)
- Book routes → Book mapping: maps responses (evidence: `src/main/java/app/book/controller/BookAPI.java`)
- Book routes → Book API DTOs: accepts and returns (evidence: `src/main/java/app/book/controller/BookAPI.java`)
- Catalog operations → Book repository: queries and saves (evidence: `src/main/java/app/book/service/BookService.java`)
- Catalog operations → Book mapping: maps entities (evidence: `src/main/java/app/book/service/BookService.java`)
- Book repository → Book copy model: persists (evidence: `src/main/java/app/book/repository/BookRepository.java`)
- User routes → Account operations: delegates operations (evidence: `src/main/java/app/user/controller/UserAPI.java`)
- Account operations → User repository: queries and saves (evidence: `src/main/java/app/user/service/UserService.java`)
- Account operations → User mapping: maps profiles (evidence: `src/main/java/app/user/service/UserService.java`)
- Account operations → Password policy: validates passwords
- User repository → User and enums: persists (evidence: `src/main/java/app/user/repository/UserRepository.java`)
- Book routes → API responses: wraps results (evidence: `src/main/java/app/book/controller/BookAPI.java`)
- User routes → API responses: wraps results (evidence: `src/main/java/app/user/controller/UserAPI.java`)
- Exception handling → API responses: formats errors (evidence: `src/main/java/app/global/exceptions/GlobalExceptionHandler.java`)
- Book repository → PostgreSQL: accesses via JPA (evidence: `README.md`)
- User repository → PostgreSQL: accesses via JPA (evidence: `README.md`)
- Schema migrations → PostgreSQL: updates schema (evidence: `README.md`)
- Book routes → OpenAPI config: documents routes (evidence: `README.md`)
- User routes → OpenAPI config: documents routes (evidence: `README.md`)
