# caiquedevbr/pdv-loja-roupas-api architecture

> Architecture diagram of the GitHub repository caiquedevbr/pdv-loja-roupas-api, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-11). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/caiquedevbr/pdv-loja-roupas-api
- Repository: https://github.com/caiquedevbr/pdv-loja-roupas-api

## Overview

This is a Spring Boot REST API for a clothing-store point of sale. Clients manage customers, categories, products, inventory, and sales through paginated CRUD and lookup endpoints; sales contain multiple products. Each resource controller delegates operations to a service, which accesses a repository, while HATEOAS assemblers shape resource responses. The README documents endpoint capabilities and entity relationships; sampled source confirms several controller/service and service/repository calls, but not every resource implementation in full.

Main entry points: [`src/main/java/br/com/caiquedev/pdvloja/entity/Produto.java`](https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/entity/Produto.java) (Product Model), [`src/main/java/br/com/caiquedev/pdvloja/entity/Venda.java`](https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/entity/Venda.java) (Sale Model), [`src/main/java/br/com/caiquedev/pdvloja/controller/CategoriaController.java`](https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/controller/CategoriaController.java) (Category Endpoints), [`src/main/java/br/com/caiquedev/pdvloja/controller/ClienteController.java`](https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/controller/ClienteController.java) (Customer Endpoints)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["REST API"]
  node_categories_api["Category Endpoints"]
  node_customers_api["Customer Endpoints"]
  node_inventory_api["Inventory Endpoints"]
  node_products_api["Product Endpoints"]
  node_sales_api["Sales Endpoints"]
end

subgraph group_logic["Application Services"]
  node_category_service["Category Service"]
  node_customer_service["Customer Service"]
  node_inventory_service["Inventory Service"]
  node_product_service["Product Service"]
  node_sale_service["Sales Service<br/>[VendaService.java]"]
end

subgraph group_data["Domain and Persistence"]
  node_category_repo["Category Repository"]
  node_customer_repo["Customer Repository"]
  node_inventory_repo["Inventory Repository"]
  node_product_repo["Product Repository"]
  node_sale_repo["Sales Repository"]
  node_category_model["Category Model<br/>[Categoria.java]"]
  node_customer_model["Customer Model<br/>[Cliente.java]"]
  node_inventory_model["Inventory Model<br/>[Estoque.java]"]
  node_product_model["Product Model<br/>[Produto.java]"]
  node_sale_model["Sale Model<br/>[Venda.java]"]
end

subgraph group_links["HATEOAS Responses"]
  node_category_links["Category Links"]
  node_customer_links["Customer Links"]
  node_inventory_links["Inventory Links"]
  node_product_links["Product Links"]
  node_sale_links["Sales Links"]
end

node_caller(("API Consumer"))

node_caller -->|"calls endpoints"| node_categories_api
node_caller -->|"calls endpoints"| node_customers_api
node_caller -->|"calls endpoints"| node_inventory_api
node_caller -->|"calls endpoints"| node_products_api
node_caller -->|"calls endpoints"| node_sales_api
node_categories_api -->|"delegates operations"| node_category_service
node_customers_api -->|"delegates operations"| node_customer_service
node_inventory_api -->|"delegates operations"| node_inventory_service
node_products_api -->|"delegates operations"| node_product_service
node_sales_api -->|"delegates operations"| node_sale_service
node_category_service -->|"reads and writes"| node_category_repo
node_customer_service -->|"reads and writes"| node_customer_repo
node_inventory_service -->|"reads and writes"| node_inventory_repo
node_product_service -->|"reads and writes"| node_product_repo
node_sale_service -->|"reads and writes"| node_sale_repo
node_category_repo -->|"persists"| node_category_model
node_customer_repo -->|"persists"| node_customer_model
node_inventory_repo -->|"persists"| node_inventory_model
node_product_repo -->|"persists"| node_product_model
node_sale_repo -->|"persists"| node_sale_model
node_categories_api -->|"assembles responses"| node_category_links
node_customers_api -->|"assembles responses"| node_customer_links
node_inventory_api -->|"assembles responses"| node_inventory_links
node_products_api -->|"assembles responses"| node_product_links
node_sales_api -->|"assembles responses"| node_sale_links
node_category_links -->|"creates resource links"| node_category_model
node_customer_links -->|"creates resource links"| node_customer_model
node_inventory_links -->|"creates resource links"| node_inventory_model
node_product_links -->|"creates resource links"| node_product_model
node_sale_links -->|"creates resource links"| node_sale_model
node_product_model -->|"references category"| node_category_model
node_inventory_model -->|"references product"| node_product_model
node_sale_model -->|"references customer"| node_customer_model
node_sale_model -->|"contains products"| node_product_model

click node_categories_api "https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/controller/CategoriaController.java"
click node_customers_api "https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/controller/ClienteController.java"
click node_inventory_api "https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/controller/EstoqueController.java"
click node_products_api "https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/controller/ProdutoController.java"
click node_sales_api "https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/controller/VendaController.java"
click node_category_service "https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/service/CategoriaService.java"
click node_customer_service "https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/service/ClienteService.java"
click node_inventory_service "https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/service/EstoqueService.java"
click node_product_service "https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/service/ProdutoService.java"
click node_sale_service "https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/service/VendaService.java"
click node_category_repo "https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/repository/CategoriaRepository.java"
click node_customer_repo "https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/repository/ClienteRepository.java"
click node_inventory_repo "https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/repository/EstoqueRepository.java"
click node_product_repo "https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/repository/ProdutoRepository.java"
click node_sale_repo "https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/repository/VendaRepository.java"
click node_category_model "https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/entity/Categoria.java"
click node_customer_model "https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/entity/Cliente.java"
click node_inventory_model "https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/entity/Estoque.java"
click node_product_model "https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/entity/Produto.java"
click node_sale_model "https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/entity/Venda.java"
click node_category_links "https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/assembler/CategoriaModelAssembler.java"
click node_customer_links "https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/assembler/ClienteModelAssembler.java"
click node_inventory_links "https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/assembler/EstoqueModelAssembler.java"
click node_product_links "https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/assembler/ProdutoModelAssembler.java"
click node_sale_links "https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/assembler/VendaModelAssembler.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_categories_api,node_customers_api,node_inventory_api,node_products_api,node_sales_api toneBlue
class node_category_service,node_customer_service,node_inventory_service,node_product_service,node_sale_service toneAmber
class node_category_repo,node_customer_repo,node_inventory_repo,node_product_repo,node_sale_repo,node_category_model,node_customer_model,node_inventory_model,node_product_model,node_sale_model,node_caller toneMint
class node_category_links,node_customer_links,node_inventory_links,node_product_links,node_sale_links toneRose
```

## Components

### REST API

- [Category Endpoints](https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/controller/CategoriaController.java): `src/main/java/br/com/caiquedev/pdvloja/controller/CategoriaController.java`
- [Customer Endpoints](https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/controller/ClienteController.java): `src/main/java/br/com/caiquedev/pdvloja/controller/ClienteController.java`
- [Inventory Endpoints](https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/controller/EstoqueController.java): `src/main/java/br/com/caiquedev/pdvloja/controller/EstoqueController.java`
- [Product Endpoints](https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/controller/ProdutoController.java): `src/main/java/br/com/caiquedev/pdvloja/controller/ProdutoController.java`
- [Sales Endpoints](https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/controller/VendaController.java): `src/main/java/br/com/caiquedev/pdvloja/controller/VendaController.java`

### Application Services

- [Category Service](https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/service/CategoriaService.java): `src/main/java/br/com/caiquedev/pdvloja/service/CategoriaService.java`
- [Customer Service](https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/service/ClienteService.java): `src/main/java/br/com/caiquedev/pdvloja/service/ClienteService.java`
- [Inventory Service](https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/service/EstoqueService.java): `src/main/java/br/com/caiquedev/pdvloja/service/EstoqueService.java`
- [Product Service](https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/service/ProdutoService.java): `src/main/java/br/com/caiquedev/pdvloja/service/ProdutoService.java`
- [Sales Service](https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/service/VendaService.java): `src/main/java/br/com/caiquedev/pdvloja/service/VendaService.java`

### Domain and Persistence

- [Category Repository](https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/repository/CategoriaRepository.java): `src/main/java/br/com/caiquedev/pdvloja/repository/CategoriaRepository.java`
- [Customer Repository](https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/repository/ClienteRepository.java): `src/main/java/br/com/caiquedev/pdvloja/repository/ClienteRepository.java`
- [Inventory Repository](https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/repository/EstoqueRepository.java): `src/main/java/br/com/caiquedev/pdvloja/repository/EstoqueRepository.java`
- [Product Repository](https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/repository/ProdutoRepository.java): `src/main/java/br/com/caiquedev/pdvloja/repository/ProdutoRepository.java`
- [Sales Repository](https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/repository/VendaRepository.java): `src/main/java/br/com/caiquedev/pdvloja/repository/VendaRepository.java`
- [Category Model](https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/entity/Categoria.java): `src/main/java/br/com/caiquedev/pdvloja/entity/Categoria.java`
- [Customer Model](https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/entity/Cliente.java): `src/main/java/br/com/caiquedev/pdvloja/entity/Cliente.java`
- [Inventory Model](https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/entity/Estoque.java): `src/main/java/br/com/caiquedev/pdvloja/entity/Estoque.java`
- [Product Model](https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/entity/Produto.java): `src/main/java/br/com/caiquedev/pdvloja/entity/Produto.java`
- [Sale Model](https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/entity/Venda.java): `src/main/java/br/com/caiquedev/pdvloja/entity/Venda.java`

### HATEOAS Responses

- [Category Links](https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/assembler/CategoriaModelAssembler.java): `src/main/java/br/com/caiquedev/pdvloja/assembler/CategoriaModelAssembler.java`
- [Customer Links](https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/assembler/ClienteModelAssembler.java): `src/main/java/br/com/caiquedev/pdvloja/assembler/ClienteModelAssembler.java`
- [Inventory Links](https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/assembler/EstoqueModelAssembler.java): `src/main/java/br/com/caiquedev/pdvloja/assembler/EstoqueModelAssembler.java`
- [Product Links](https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/assembler/ProdutoModelAssembler.java): `src/main/java/br/com/caiquedev/pdvloja/assembler/ProdutoModelAssembler.java`
- [Sales Links](https://github.com/caiquedevbr/pdv-loja-roupas-api/blob/main/src/main/java/br/com/caiquedev/pdvloja/assembler/VendaModelAssembler.java): `src/main/java/br/com/caiquedev/pdvloja/assembler/VendaModelAssembler.java`

### Other components

- **API Consumer**

## Connections

- API Consumer → Category Endpoints: calls endpoints (evidence: `README.md`)
- API Consumer → Customer Endpoints: calls endpoints (evidence: `README.md`)
- API Consumer → Inventory Endpoints: calls endpoints (evidence: `README.md`)
- API Consumer → Product Endpoints: calls endpoints (evidence: `README.md`)
- API Consumer → Sales Endpoints: calls endpoints (evidence: `README.md`)
- Category Endpoints → Category Service: delegates operations (evidence: `src/main/java/br/com/caiquedev/pdvloja/controller/CategoriaController.java`)
- Customer Endpoints → Customer Service: delegates operations (evidence: `src/main/java/br/com/caiquedev/pdvloja/controller/ClienteController.java`)
- Inventory Endpoints → Inventory Service: delegates operations (evidence: `src/main/java/br/com/caiquedev/pdvloja/controller/EstoqueController.java`)
- Product Endpoints → Product Service: delegates operations (evidence: `src/main/java/br/com/caiquedev/pdvloja/controller/ProdutoController.java`)
- Sales Endpoints → Sales Service: delegates operations (evidence: `src/main/java/br/com/caiquedev/pdvloja/controller/VendaController.java`)
- Category Service → Category Repository: reads and writes (evidence: `src/main/java/br/com/caiquedev/pdvloja/service/CategoriaService.java`)
- Customer Service → Customer Repository: reads and writes (evidence: `src/main/java/br/com/caiquedev/pdvloja/service/ClienteService.java`)
- Inventory Service → Inventory Repository: reads and writes (evidence: `src/main/java/br/com/caiquedev/pdvloja/service/EstoqueService.java`)
- Product Service → Product Repository: reads and writes (evidence: `src/main/java/br/com/caiquedev/pdvloja/service/ProdutoService.java`)
- Sales Service → Sales Repository: reads and writes (evidence: `src/main/java/br/com/caiquedev/pdvloja/service/VendaService.java`)
- Category Repository → Category Model: persists (evidence: `src/main/java/br/com/caiquedev/pdvloja/repository/CategoriaRepository.java`)
- Customer Repository → Customer Model: persists (evidence: `src/main/java/br/com/caiquedev/pdvloja/repository/ClienteRepository.java`)
- Inventory Repository → Inventory Model: persists (evidence: `src/main/java/br/com/caiquedev/pdvloja/repository/EstoqueRepository.java`)
- Product Repository → Product Model: persists (evidence: `src/main/java/br/com/caiquedev/pdvloja/repository/ProdutoRepository.java`)
- Sales Repository → Sale Model: persists (evidence: `src/main/java/br/com/caiquedev/pdvloja/repository/VendaRepository.java`)
- Category Endpoints → Category Links: assembles responses (evidence: `src/main/java/br/com/caiquedev/pdvloja/controller/CategoriaController.java`)
- Customer Endpoints → Customer Links: assembles responses (evidence: `src/main/java/br/com/caiquedev/pdvloja/controller/ClienteController.java`)
- Inventory Endpoints → Inventory Links: assembles responses (evidence: `src/main/java/br/com/caiquedev/pdvloja/controller/EstoqueController.java`)
- Product Endpoints → Product Links: assembles responses (evidence: `src/main/java/br/com/caiquedev/pdvloja/controller/ProdutoController.java`)
- Sales Endpoints → Sales Links: assembles responses (evidence: `src/main/java/br/com/caiquedev/pdvloja/controller/VendaController.java`)
- Category Links → Category Model: creates resource links (evidence: `src/main/java/br/com/caiquedev/pdvloja/assembler/CategoriaModelAssembler.java`)
- Customer Links → Customer Model: creates resource links (evidence: `src/main/java/br/com/caiquedev/pdvloja/assembler/ClienteModelAssembler.java`)
- Inventory Links → Inventory Model: creates resource links (evidence: `src/main/java/br/com/caiquedev/pdvloja/assembler/EstoqueModelAssembler.java`)
- Product Links → Product Model: creates resource links (evidence: `src/main/java/br/com/caiquedev/pdvloja/assembler/ProdutoModelAssembler.java`)
- Sales Links → Sale Model: creates resource links (evidence: `src/main/java/br/com/caiquedev/pdvloja/assembler/VendaModelAssembler.java`)
- Product Model → Category Model: references category (evidence: `src/main/java/br/com/caiquedev/pdvloja/entity/Produto.java`)
- Inventory Model → Product Model: references product (evidence: `src/main/java/br/com/caiquedev/pdvloja/entity/Estoque.java`)
- Sale Model → Customer Model: references customer (evidence: `src/main/java/br/com/caiquedev/pdvloja/entity/Venda.java`)
- Sale Model → Product Model: contains products (evidence: `src/main/java/br/com/caiquedev/pdvloja/entity/Venda.java`)
