📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados na Matriz de 20 Capítulos de Aplicações Full Stack. Recomendado revisar antes de iniciar a execução.
v1.0 — Arquitetura em camadas (Layered Architecture) para controle de inventário físico com Spring Data JPA, H2 e PostgreSQL.
Trilha de Especialização Pedagógica — Série Gestão de Estoque (Projeto 1 de 2)
- Gestão de Estoque 01 (este): Backend Spring Boot 3, CRUD de Produtos, Categorias e Persistência
- Gestão de Estoque 02: Segurança JWT, RBAC & Relatórios
🎓 Nível Profissional Simulado: Desenvolvedor Back-end Java Júnior / Pleno. Em operações logísticas e varejistas, a consistência dos dados de estoque é crítica para o negócio. Dominar a arquitetura em camadas do ecossistema Spring (Controllers REST, Services transacionais, Repositórios JPA e DTOs imutáveis) prepara para desafios de alta concorrência e integridade relacional.
O projeto adota a convenção padronizada de subpastas por camada e tecnologia <camada>-<tecnologia>:
catalogo_projetos/fullstack_estoque_01_spring_spa/
├── api-spring/ # Backend robusto em Java 21 e Spring Boot 3
│ ├── src/
│ │ ├── main/java/br/com/estoque/
│ │ │ ├── config/ # Configurações de CORS e documentação OpenAPI
│ │ │ ├── controller/ # Controladores REST com endpoints mapeados
│ │ │ ├── dto/ # Data Transfer Objects para requests e responses
│ │ │ ├── model/ # Entidades JPA mapeadas (Produto, Categoria, Estoque)
│ │ │ ├── repository/ # Interfaces Spring Data JPA
│ │ │ └── service/ # Regras de negócio e transações (@Transactional)
│ │ └── main/resources/
│ │ ├── application.yml # Perfis de ambiente (dev: H2 / prod: Postgres)
│ │ └── data.sql # Carga inicial e seed de produtos de demonstração
│ ├── Dockerfile # Empacotamento em imagem conteinerizada
│ ├── docker-compose.yml # Subida de banco PostgreSQL de suporte
│ └── pom.xml # Gerenciamento de dependências Maven
├── assets/ # Diagramas vetoriais SVG autorais
├── modulo00a.md # Planejamento didático e levantamento de requisitos
└── modulo00.md a modulo09.md # Cadernos conceituais de implementação passo a passo
GET, POST, PUT, DELETE) para a entidade Produto sob o prefixo /api/produtos.Produto deve manter obrigatoriamente os atributos id, sku (único), nome, preco, quantidadeEstoque e estoqueMinimo.@Transactional garantindo isolamento ACID durante acessos simultâneos.@Valid, @NotNull, @PositiveOrZero), retornando 400 Bad Request com detalhamento das violações.dev) e PostgreSQL (perfil prod) via variáveis de ambiente.@Entity nunca devem ser retornadas diretamente aos clientes; todas as respostas devem trafegar via Java Records (ResponseDTO)./swagger-ui.html..jar através do wrapper ./mvnw sem exigir instalação prévia do Maven no host.flowchart LR
subgraph Atores
Estoquista["👤 Estoquista"]
Gerente["💼 Gerente de Compras"]
end
subgraph "Sistema de Gestão de Estoque v1"
UC01["UC01: Cadastrar Produto com SKU"]
UC02["UC02: Registrar Entrada de Mercadoria"]
UC03["UC03: Registrar Baixa de Estoque"]
UC04["UC04: Consultar Produtos em Alerta Mínimo"]
UC05["UC05: Auditar Documentação OpenAPI"]
end
Estoquista --> UC01
Estoquista --> UC02
Estoquista --> UC03
Gerente --> UC04
Gerente --> UC05
| ID Requisito | História de Usuário | Caso de Uso | Controlador REST (api-spring) |
Camada de Serviço & JPA | Status |
|---|---|---|---|---|---|
| RF-GE01 | US-GE01 | UC01 | ProdutoController.java |
ProdutoService.java |
✅ Coberto |
| RF-GE02 | US-GE01 | UC01 | ProdutoRequestDTO.java |
Produto.java (@Entity) |
✅ Coberto |
| RF-GE03 | US-GE02 / US-GE03 | UC02 / UC03 | EstoqueController.java |
MovimentacaoService.java |
✅ Coberto |
| RF-GE04 | US-GE01 | UC01 | GlobalExceptionHandler.java |
jakarta.validation |
✅ Coberto |
| RF-GE05 | US-GE05 | UC05 | application.yml |
H2Dialect / PostgreSQLDialect |
✅ Coberto |
api-spring)cd catalogo_projetos/fullstack_estoque_01_spring_spa/api-spring
# Execução em modo desenvolvimento com banco H2 embutido
./mvnw spring-boot:run -Dspring-boot.run.profiles=dev
http://localhost:8080/h2-console (JDBC URL: jdbc:h2:mem:estoquedb).http://localhost:8080/swagger-ui.html.cd catalogo_projetos/fullstack_estoque_01_spring_spa/api-spring
# Subida do contêiner do banco relacional
docker compose up -d
# Execução da aplicação no perfil de produção
./mvnw spring-boot:run -Dspring-boot.run.profiles=prod
| Checkpoint | Procedimento de Verificação | Critério de Aceite | Status |
|---|---|---|---|
| CP-01 | Disparar GET /api/produtos com o servidor ativo. |
Retorno HTTP 200 com array JSON populado pelo seeder inicial. | PASS ✅ |
| CP-02 | Enviar POST /api/produtos com SKU repetido ou quantidade negativa. |
Retorno HTTP 400 Bad Request com mensagem descritiva de validação. | PASS ✅ |
| CP-03 | Registrar saída superior ao saldo disponível no estoque. | Lançamento de EstoqueInsuficienteException e rollback da transação. |
PASS ✅ |
| CP-04 | Acessar http://localhost:8080/swagger-ui.html no navegador. |
Interface Swagger interativa exibindo esquemas DTO e verbos HTTP. | PASS ✅ |
| CP-05 | Executar suíte de testes ./mvnw test. |
Todos os testes unitários e de integração executados com BUILD SUCCESS. |
PASS ✅ |