API REST para controle de inventário/estoque, desenvolvida como projeto de portfólio para demonstrar proficiência em Spring Boot, Spring Security, JWT, testes unitários e boas práticas de engenharia de software.
- ✅ Cadastro e login de usuários com JWT (stateless)
- ✅ Senhas criptografadas com BCrypt
- ✅ Perfil do usuário (
GET /api/users/me)
- ✅ CRUD completo de produtos
- ✅ Regras de negócio: Entrada e Saída de Estoque (com validação de quantidade negativa)
- ✅ Listagem de produtos com estoque baixo (< 5 unidades)
- ✅ Paginação e filtros por categoria e nome
- ✅ Listagem de categorias únicas (
GET /api/categories) - ✅ Controle de estoque mínimo por produto
- ✅ Listagem de produtos abaixo do mínimo definido (
GET /api/products/below-minimum)
- ✅ Histórico completo de movimentações (ENTRY/EXIT) com paginação (
GET /api/movimentations) - ✅ Estatísticas do estoque: total de produtos, valor total, estoque baixo e zerado (
GET /api/products/stats)
- ✅ Documentação interativa com Swagger/OpenAPI
- ✅ Health Check com Spring Boot Actuator
- ✅ Tratamento global de exceções
- ✅ 20 testes unitários (AuthService e ProductService)
- ✅ Código em camadas (Controller → Service → Repository)
| Categoria | Tecnologias |
|---|---|
| Back-end | Java 17, Spring Boot 3.4.4, Spring Security 6 |
| Banco de Dados | PostgreSQL, Flyway, Hibernate (JPA), Spring Data JPA |
| Autenticação | JWT (jjwt 0.12.6) |
| Documentação | SpringDoc OpenAPI (Swagger UI) |
| Monitoramento | Spring Boot Actuator |
| Testes | JUnit 5, Mockito |
| Build | Maven |
src/
├── main/
│ ├── java/com/estoque/api/
│ │ ├── controller/ # Endpoints REST
│ │ ├── service/ # Regras de negócio
│ │ ├── repository/ # Acesso a dados (JPA)
│ │ ├── model/ # Entidades JPA
│ │ ├── dto/ # Objetos de transferência
│ │ ├── security/ # Configurações de segurança e JWT
│ │ ├── config/ # Configurações (Swagger, etc.)
│ │ └── exception/ # Tratamento global de erros
│ └── resources/
│ └── application.properties
└── test/
└── java/com/estoque/api/service/
├── AuthServiceTest.java # 5 testes
└── ProductServiceTest.java # 15 testes
- JDK 17 ou 21
- Maven 3.9+
- Docker e Docker Compose (para execução dos containers)
# Clone o repositório
git clone https://github.com/DouglasLira-Dev/stock-manager-api.git
# Navegue até a pasta
cd stock-manager-api
# Compile e execute
mvn clean spring-boot:run
# A aplicação estará disponível em http://localhost:8080
---
### 🐳 Executar com Docker
```bash
# Clone o repositório
git clone https://github.com/DouglasLira-Dev/stock-manager-api.git
cd stock-manager-api
# Subir os containers
docker-compose up -d
#A aplicação estará disponível em http://localhost:8080.
A imagem Docker também é construída automaticamente pelo GitHub Actions a cada push na branch main.
---
## Executar os Testes
```bash
mvn test| Método | Endpoint | Descrição | Autenticação |
|---|---|---|---|
| POST | /auth/register |
Cadastrar um novo usuário | Público |
| POST | /auth/login |
Autenticar e obter token JWT | Público |
| GET | /api/users/me |
Obter dados do usuário autenticado | JWT (Bearer) |
| Método | Endpoint | Descrição | Autenticação |
|---|---|---|---|
| POST | /api/products |
Criar um novo produto | JWT (Bearer) |
| GET | /api/products |
Listar produtos (paginação e filtros) | JWT (Bearer) |
| GET | /api/products/{id} |
Buscar produto por ID | JWT (Bearer) |
| PUT | /api/products/{id} |
Atualizar produto | JWT (Bearer) |
| DELETE | /api/products/{id} |
Deletar produto | JWT (Bearer) |
| PATCH | /api/products/{id}/stock/add |
Entrada de estoque (adicionar quantidade) | JWT (Bearer) |
| PATCH | /api/products/{id}/stock/remove |
Saída de estoque (remover com validação) | JWT (Bearer) |
| GET | /api/products/low-stock |
Listar produtos com estoque baixo (< 5) | JWT (Bearer) |
| Método | Endpoint | Descrição | Autenticação |
|---|---|---|---|
| GET | /api/products/stats |
Estatísticas do estoque (total, valor, baixo, zerado) | JWT (Bearer) |
| GET | /api/categories |
Listar categorias únicas do usuário | JWT (Bearer) |
| GET | /api/products/below-minimum |
Listar produtos com estoque abaixo do mínimo | JWT (Bearer) |
| Método | Endpoint | Descrição | Autenticação |
|---|---|---|---|
| GET | /api/movimentations |
Histórico completo de entrada/saída de estoque (com paginação) | JWT (Bearer) |
| Método | Endpoint | Descrição | Autenticação |
|---|---|---|---|
| GET | /actuator/health |
Health Check da aplicação | Público |
A documentação completa está disponível automaticamente em:
http://localhost:8080/swagger-ui.html
A interface permite:
- Visualizar todos os endpoints e modelos (DTOs)
- Testar as requisições diretamente pelo navegador
- Autenticar com JWT (botão "Authorize")
O projeto conta com 21 testes:
| Classe de Teste | Quantidade | Cenários |
|---|---|---|
AuthServiceTest |
5 testes | Registro, login, validações |
ProductServiceTest |
15 testes | CRUD, regras de estoque, filtros, estatísticas, históricos |
| Classe de Teste | Tecnologia | Cenários |
|---|---|---|
AuthIntegrationTest |
Testcontainers + PostgreSQL | Registro e login com banco real em container |
Diferencial: O teste de integração usa Testcontainers para rodar um banco PostgreSQL real em container, garantindo que a API funciona com o banco de produção.
# Executar todos os testes (unitários + integração)
mvn testEste projeto está sob a licença MIT. Consulte o arquivo LICENSE para obter mais detalhes.
Desenvolvedor: Douglas Lira
GitHub: DouglasLira-Dev
⭐ Se este projeto te ajudou de alguma forma, considere deixar uma estrela no repositório! Isso ajuda muito na visibilidade do projeto.