# peterson-araujo/livraria architecture

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

- Interactive diagram: https://gitdiagram.com/peterson-araujo/livraria
- Repository: https://github.com/peterson-araujo/livraria

## Overview

Livraria API is a Spring REST backend for managing authors, publishers and books. A client sends JSON requests to resource controllers; controllers map request data, invoke services, and map results into responses. Services enforce catalog rules and use Spring Data repositories to read and write JPA entities in the configured H2 database. The README also describes customers and orders, but no corresponding source modules appear in the supplied tree, so those capabilities are not represented as implemented components. Wiring reflects sampled controllers and services; unsampled areas are not inferred.

Main entry points: [`src/main/java/br/petersonaraujo/livraria/service/livro/LivroService.java`](https://github.com/peterson-araujo/livraria/blob/main/src/main/java/br/petersonaraujo/livraria/service/livro/LivroService.java) (Book Service), [`src/main/java/br/petersonaraujo/livraria/model/livro/LivroEntity.java`](https://github.com/peterson-araujo/livraria/blob/main/src/main/java/br/petersonaraujo/livraria/model/livro/LivroEntity.java) (Book Entity), [`src/main/java/br/petersonaraujo/livraria/controller/autor/AutorController.java`](https://github.com/peterson-araujo/livraria/blob/main/src/main/java/br/petersonaraujo/livraria/controller/autor/AutorController.java) (Author Controller), [`src/main/java/br/petersonaraujo/livraria/controller/editora/EditoraController.java`](https://github.com/peterson-araujo/livraria/blob/main/src/main/java/br/petersonaraujo/livraria/controller/editora/EditoraController.java) (Publisher Controller)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["REST API"]
  node_author_controller["Author Controller"]
  node_publisher_controller["Publisher Controller"]
  node_book_controller["Book Controller"]
  node_dto_mapper["DTO Mappers"]
  node_error_handler["Error Handler"]
  node_application["Spring Boot App"]
end

subgraph group_catalog["Catalog Domain"]
  node_author_service["Author Service<br/>[AutorService.java]"]
  node_publisher_service["Publisher Service"]
  node_book_service["Book Service<br/>[LivroService.java]"]
  node_author_entity["Author Entity<br/>[AutorEntity.java]"]
  node_publisher_entity["Publisher Entity<br/>[EditoraEntity.java]"]
  node_book_entity["Book Entity<br/>[LivroEntity.java]"]
  node_category["Book Category<br/>[Categoria.java]"]
end

subgraph group_persistence["Persistence"]
  node_author_repo["Author Repository"]
  node_publisher_repo["Publisher Repository"]
  node_book_repo["Book Repository"]
  node_h2[("H2 Database<br/>[application.yaml]")]
end

node_client(("API Client"))

node_client -->|"sends requests"| node_author_controller
node_client -->|"sends requests"| node_publisher_controller
node_client -->|"sends requests"| node_book_controller
node_author_controller -->|"maps DTOs"| node_dto_mapper
node_publisher_controller -->|"maps DTOs"| node_dto_mapper
node_book_controller -->|"maps DTOs"| node_dto_mapper
node_author_controller -->|"invokes"| node_author_service
node_publisher_controller -->|"invokes"| node_publisher_service
node_book_controller -->|"invokes"| node_book_service
node_author_service -->|"queries and saves"| node_author_repo
node_publisher_service -->|"queries and saves"| node_publisher_repo
node_book_service -->|"queries and saves"| node_book_repo
node_book_service -->|"resolves authors"| node_author_repo
node_book_service -->|"resolves publisher"| node_publisher_repo
node_author_repo -->|"persists"| node_author_entity
node_publisher_repo -->|"persists"| node_publisher_entity
node_book_repo -->|"persists"| node_book_entity
node_book_entity -->|"associates authors"| node_author_entity
node_book_entity -->|"references publisher"| node_publisher_entity
node_book_entity -->|"classifies by"| node_category
node_author_service -->|"raises domain errors"| node_error_handler
node_publisher_service -->|"raises domain errors"| node_error_handler
node_book_service -->|"raises domain errors"| node_error_handler
node_application -->|"hosts routes"| node_author_controller
node_application -->|"hosts routes"| node_publisher_controller
node_application -->|"hosts routes"| node_book_controller

click node_author_controller "https://github.com/peterson-araujo/livraria/blob/main/src/main/java/br/petersonaraujo/livraria/controller/autor/AutorController.java"
click node_publisher_controller "https://github.com/peterson-araujo/livraria/blob/main/src/main/java/br/petersonaraujo/livraria/controller/editora/EditoraController.java"
click node_book_controller "https://github.com/peterson-araujo/livraria/blob/main/src/main/java/br/petersonaraujo/livraria/controller/livro/LivroController.java"
click node_dto_mapper "https://github.com/peterson-araujo/livraria/tree/main/src/main/java/br/petersonaraujo/livraria/controller"
click node_error_handler "https://github.com/peterson-araujo/livraria/blob/main/src/main/java/br/petersonaraujo/livraria/exception/GlobalExceptionHandler.java"
click node_author_service "https://github.com/peterson-araujo/livraria/blob/main/src/main/java/br/petersonaraujo/livraria/service/autor/AutorService.java"
click node_publisher_service "https://github.com/peterson-araujo/livraria/blob/main/src/main/java/br/petersonaraujo/livraria/service/editora/EditoraService.java"
click node_book_service "https://github.com/peterson-araujo/livraria/blob/main/src/main/java/br/petersonaraujo/livraria/service/livro/LivroService.java"
click node_author_entity "https://github.com/peterson-araujo/livraria/blob/main/src/main/java/br/petersonaraujo/livraria/model/autor/AutorEntity.java"
click node_publisher_entity "https://github.com/peterson-araujo/livraria/blob/main/src/main/java/br/petersonaraujo/livraria/model/editora/EditoraEntity.java"
click node_book_entity "https://github.com/peterson-araujo/livraria/blob/main/src/main/java/br/petersonaraujo/livraria/model/livro/LivroEntity.java"
click node_category "https://github.com/peterson-araujo/livraria/blob/main/src/main/java/br/petersonaraujo/livraria/model/enums/Categoria.java"
click node_author_repo "https://github.com/peterson-araujo/livraria/blob/main/src/main/java/br/petersonaraujo/livraria/repository/autor/AutorRepository.java"
click node_publisher_repo "https://github.com/peterson-araujo/livraria/blob/main/src/main/java/br/petersonaraujo/livraria/repository/editora/EditoraRepository.java"
click node_book_repo "https://github.com/peterson-araujo/livraria/blob/main/src/main/java/br/petersonaraujo/livraria/repository/livro/LivroRepository.java"
click node_h2 "https://github.com/peterson-araujo/livraria/blob/main/src/main/resources/application.yaml"
click node_application "https://github.com/peterson-araujo/livraria/blob/main/src/main/java/br/petersonaraujo/livraria/LivrariaApplication.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_author_controller,node_publisher_controller,node_book_controller,node_dto_mapper,node_error_handler,node_application,node_client toneBlue
class node_author_service,node_publisher_service,node_book_service,node_author_entity,node_publisher_entity,node_book_entity,node_category toneAmber
class node_author_repo,node_publisher_repo,node_book_repo,node_h2 toneMint
```

## Components

### REST API

- [Author Controller](https://github.com/peterson-araujo/livraria/blob/main/src/main/java/br/petersonaraujo/livraria/controller/autor/AutorController.java): `src/main/java/br/petersonaraujo/livraria/controller/autor/AutorController.java`
- [Publisher Controller](https://github.com/peterson-araujo/livraria/blob/main/src/main/java/br/petersonaraujo/livraria/controller/editora/EditoraController.java): `src/main/java/br/petersonaraujo/livraria/controller/editora/EditoraController.java`
- [Book Controller](https://github.com/peterson-araujo/livraria/blob/main/src/main/java/br/petersonaraujo/livraria/controller/livro/LivroController.java): `src/main/java/br/petersonaraujo/livraria/controller/livro/LivroController.java`
- [DTO Mappers](https://github.com/peterson-araujo/livraria/tree/main/src/main/java/br/petersonaraujo/livraria/controller): `src/main/java/br/petersonaraujo/livraria/controller`
- [Error Handler](https://github.com/peterson-araujo/livraria/blob/main/src/main/java/br/petersonaraujo/livraria/exception/GlobalExceptionHandler.java): `src/main/java/br/petersonaraujo/livraria/exception/GlobalExceptionHandler.java`
- [Spring Boot App](https://github.com/peterson-araujo/livraria/blob/main/src/main/java/br/petersonaraujo/livraria/LivrariaApplication.java): `src/main/java/br/petersonaraujo/livraria/LivrariaApplication.java`

### Catalog Domain

- [Author Service](https://github.com/peterson-araujo/livraria/blob/main/src/main/java/br/petersonaraujo/livraria/service/autor/AutorService.java): `src/main/java/br/petersonaraujo/livraria/service/autor/AutorService.java`
- [Publisher Service](https://github.com/peterson-araujo/livraria/blob/main/src/main/java/br/petersonaraujo/livraria/service/editora/EditoraService.java): `src/main/java/br/petersonaraujo/livraria/service/editora/EditoraService.java`
- [Book Service](https://github.com/peterson-araujo/livraria/blob/main/src/main/java/br/petersonaraujo/livraria/service/livro/LivroService.java): `src/main/java/br/petersonaraujo/livraria/service/livro/LivroService.java`
- [Author Entity](https://github.com/peterson-araujo/livraria/blob/main/src/main/java/br/petersonaraujo/livraria/model/autor/AutorEntity.java): `src/main/java/br/petersonaraujo/livraria/model/autor/AutorEntity.java`
- [Publisher Entity](https://github.com/peterson-araujo/livraria/blob/main/src/main/java/br/petersonaraujo/livraria/model/editora/EditoraEntity.java): `src/main/java/br/petersonaraujo/livraria/model/editora/EditoraEntity.java`
- [Book Entity](https://github.com/peterson-araujo/livraria/blob/main/src/main/java/br/petersonaraujo/livraria/model/livro/LivroEntity.java): `src/main/java/br/petersonaraujo/livraria/model/livro/LivroEntity.java`
- [Book Category](https://github.com/peterson-araujo/livraria/blob/main/src/main/java/br/petersonaraujo/livraria/model/enums/Categoria.java): `src/main/java/br/petersonaraujo/livraria/model/enums/Categoria.java`

### Persistence

- [Author Repository](https://github.com/peterson-araujo/livraria/blob/main/src/main/java/br/petersonaraujo/livraria/repository/autor/AutorRepository.java): `src/main/java/br/petersonaraujo/livraria/repository/autor/AutorRepository.java`
- [Publisher Repository](https://github.com/peterson-araujo/livraria/blob/main/src/main/java/br/petersonaraujo/livraria/repository/editora/EditoraRepository.java): `src/main/java/br/petersonaraujo/livraria/repository/editora/EditoraRepository.java`
- [Book Repository](https://github.com/peterson-araujo/livraria/blob/main/src/main/java/br/petersonaraujo/livraria/repository/livro/LivroRepository.java): `src/main/java/br/petersonaraujo/livraria/repository/livro/LivroRepository.java`
- [H2 Database](https://github.com/peterson-araujo/livraria/blob/main/src/main/resources/application.yaml): `src/main/resources/application.yaml`

### Other components

- **API Client**

## Connections

- API Client → Author Controller: sends requests
- API Client → Publisher Controller: sends requests
- API Client → Book Controller: sends requests
- Author Controller → DTO Mappers: maps DTOs
- Publisher Controller → DTO Mappers: maps DTOs
- Book Controller → DTO Mappers: maps DTOs
- Author Controller → Author Service: invokes
- Publisher Controller → Publisher Service: invokes
- Book Controller → Book Service: invokes
- Author Service → Author Repository: queries and saves
- Publisher Service → Publisher Repository: queries and saves
- Book Service → Book Repository: queries and saves
- Book Service → Author Repository: resolves authors
- Book Service → Publisher Repository: resolves publisher
- Author Repository → Author Entity: persists
- Publisher Repository → Publisher Entity: persists
- Book Repository → Book Entity: persists
- Book Entity → Author Entity: associates authors
- Book Entity → Publisher Entity: references publisher
- Book Entity → Book Category: classifies by
- Author Service → Error Handler: raises domain errors
- Publisher Service → Error Handler: raises domain errors
- Book Service → Error Handler: raises domain errors
- Spring Boot App → Author Controller: hosts routes
- Spring Boot App → Publisher Controller: hosts routes
- Spring Boot App → Book Controller: hosts routes
