Skip to content

DouglasLira-Dev/stock-manager-api

Repository files navigation

📦 Stock Manager API

Java Spring Boot JWT Swagger PostgreSQL Flyway GitHub release GitHub last commit License Tests Docker GitHub Actions Build Docker Image


🚀 Sobre o Projeto

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.


✨ Funcionalidades (v2.1.0)

🔐 Autenticação e Segurança

  • ✅ Cadastro e login de usuários com JWT (stateless)
  • ✅ Senhas criptografadas com BCrypt
  • ✅ Perfil do usuário (GET /api/users/me)

📦 Gerenciamento de Estoque

  • ✅ 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 e Estatísticas

  • ✅ 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 e Monitoramento

  • ✅ Documentação interativa com Swagger/OpenAPI
  • ✅ Health Check com Spring Boot Actuator

🧪 Qualidade e Testes

  • ✅ Tratamento global de exceções
  • ✅ 20 testes unitários (AuthService e ProductService)
  • ✅ Código em camadas (Controller → Service → Repository)

🛠️ Tecnologias

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

📂 Estrutura do Projeto

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

⚙️ Como Executar

Pré-requisitos

  • JDK 17 ou 21
  • Maven 3.9+
  • Docker e Docker Compose (para execução dos containers)

Passos

# 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

📮 Endpoints Principais

🔐 Autenticação

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)

📦 Produtos

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)

📊 Estatísticas e Categorias

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)

📜 Histórico de Movimentações

Método Endpoint Descrição Autenticação
GET /api/movimentations Histórico completo de entrada/saída de estoque (com paginação) JWT (Bearer)

📊 Monitoramento

Método Endpoint Descrição Autenticação
GET /actuator/health Health Check da aplicação Público

🔗 Documentação Interativa (Swagger)

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")

🧪 Testes

O projeto conta com 21 testes:

🧪 Testes Unitários (20 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

🐳 Testes de Integração (1 teste)

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 test

📝 Licença

Este projeto está sob a licença MIT. Consulte o arquivo LICENSE para obter mais detalhes.

📧 Contato

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.

About

REST API para controle de estoque com Spring Boot 3.4, Spring Security 6, JWT e SQLite. Inclui autenticação, CRUD, regras de estoque e paginação.

Topics

Resources

Contributing

Security policy

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages