Sistema de Controle de Estoque FullStack
Uma aplicação completa para gerenciamento de estoque com controle de entradas, saídas e relatórios gerenciais
- Sobre o Projeto
- Arquitetura do Sistema
- Tecnologias Utilizadas
- Funcionalidades
- Modelo de Dados
- API REST
- Como Executar
- Script de Inicialização
- Estrutura do Projeto
- Testes
- Documentação da API
- Screenshots
O VORTEX Sistema de Estoque é um sistema completo de controle de estoque desenvolvido como parte de um desafio FullStack. A aplicação permite o gerenciamento completo de produtos, tipos de produtos, movimentações de estoque (entradas e saídas) e geração de relatórios gerenciais com análise de lucro.
- Interface Moderna: UI responsiva e intuitiva construída com Vue.js 3 e Vuetify
- API RESTful: Backend robusto com Spring Boot seguindo as melhores práticas REST
- Controle de Estoque Automático: Atualização automática do estoque em movimentações
- Cálculo de Lucro: Sistema automático de precificação com margem de 35%
- Relatórios Gerenciais: Visualização de dados com gráficos interativos
- Documentação Completa: API documentada com OpenAPI/Swagger
graph TB
subgraph "Frontend Layer"
AF[Auth Frontend<br/>React + TypeScript<br/>Port 3001]
MF[Main Frontend<br/>Vue.js 3 + TypeScript<br/>Port 5173]
AF --> |Login/Register| AB
MF --> |Business Operations| MB
MF --> |Auth Check| AF
end
subgraph "Backend Layer"
AB[Auth Backend<br/>Quarkus + Java 17<br/>Port 8081]
MB[Main Backend<br/>Spring Boot + Java 24<br/>Port 8080]
AB --> |JWT Validation| MB
MB --> |User Info| AB
end
subgraph "Database Layer"
PG[(PostgreSQL<br/>Auth Data<br/>Port 5433)]
OR[(Oracle<br/>Business Data<br/>Port 1521)]
H2[(H2<br/>Dev Database<br/>In-Memory)]
AB --> PG
MB --> OR
MB -.-> H2
end
subgraph "Messaging Layer"
KF[Kafka<br/>Port 9092]
KUI[Kafka UI<br/>Port 8090]
RMQ[RabbitMQ<br/>Port 5672/15672]
MB --> KF
MB --> RMQ
KF --> KUI
end
subgraph "Infrastructure"
NG[Nginx<br/>Reverse Proxy]
DC[Docker Compose<br/>Orchestration]
AF -.-> NG
MF -.-> NG
AB -.-> DC
MB -.-> DC
end
style AF fill:#61dafb
style MF fill:#42b883
style AB fill:#4695eb
style MB fill:#6db33f
style PG fill:#336791
style OR fill:#f80000
style KF fill:#231f20
style RMQ fill:#ff6600
sequenceDiagram
participant U as User
participant MF as Main Frontend<br/>(Vue.js)
participant AF as Auth Frontend<br/>(React)
participant AB as Auth Backend<br/>(Quarkus)
participant MB as Main Backend<br/>(Spring Boot)
participant PG as PostgreSQL
participant OR as Oracle
U->>MF: Access application
MF->>MF: Check JWT token
alt No valid token
MF->>AF: Redirect to login
U->>AF: Enter credentials
AF->>AB: POST /api/auth/login
AB->>PG: Validate credentials
PG-->>AB: User data
AB->>AB: Generate JWT + Refresh Token
AB-->>AF: Return tokens
AF->>MF: Redirect with tokens
MF->>MF: Store tokens
end
MF->>MB: API call with JWT
MB->>AB: Validate JWT
AB-->>MB: Token valid
MB->>OR: Business query
OR-->>MB: Data
MB-->>MF: Response
MF-->>U: Display data
Note over AB,MB: JWT validation happens<br/>for every API call
- Java 24 - Linguagem de programação principal
- Spring Boot 3.5.3 - Framework para construção da API REST
- Spring Data JPA - Abstração para acesso a dados
- Hibernate - ORM para mapeamento objeto-relacional
- Spring Security - Segurança e autenticação JWT
- Oracle Database - Banco de dados principal
- H2 Database - Banco de dados em memória para testes
- Lombok - Redução de código boilerplate
- SpringDoc OpenAPI - Documentação automática da API
- Maven - Gerenciamento de dependências
- Java 17 - Linguagem de programação
- Quarkus 3.8.5 - Framework supersônico e subatômico
- Hibernate ORM with Panache - ORM simplificado
- SmallRye JWT - Implementação JWT
- PostgreSQL - Banco de dados de autenticação
- BCrypt - Hash de senhas
- Flyway - Migração de banco de dados
- SmallRye Health - Health checks
- Maven - Gerenciamento de dependências
- Vue.js 3 - Framework JavaScript progressivo
- TypeScript - Superset tipado do JavaScript
- Vuetify 3 - Biblioteca de componentes Material Design
- Vue Router - Roteamento SPA com guards de autenticação
- Pinia - Gerenciamento de estado
- Axios - Cliente HTTP
- Chart.js - Visualização de dados em gráficos
- VeeValidate + Yup - Validação de formulários
- Vite - Build tool e dev server
- Playwright - Testes E2E
- Vitest - Testes unitários
- React 18 - Biblioteca JavaScript para interfaces
- TypeScript - Tipagem estática
- React Router DOM - Roteamento
- React Hook Form - Gerenciamento de formulários
- Yup - Validação de esquemas
- TailwindCSS - Framework CSS utilitário
- Axios - Cliente HTTP
- React Hot Toast - Notificações
- Vite - Build tool e dev server
- Vitest - Testes unitários
- Docker - Containerização da aplicação
- Docker Compose - Orquestração de containers
- Nginx - Servidor web e reverse proxy
- Apache Kafka - Mensageria distribuída
- RabbitMQ - Message broker alternativo
- Kafka UI - Interface web para Kafka
- Cadastro, edição e exclusão de produtos
- Definição de valor de fornecedor
- Controle automático de quantidade em estoque
- Associação com tipos de produtos
- Criação de categorias para organização
- Gerenciamento completo de tipos
- Proteção contra exclusão com produtos vinculados
- Entradas: Aumentam o estoque disponível
- Saídas: Diminuem o estoque com validação de disponibilidade
- Cálculo automático do valor de venda (margem de 35%)
- Histórico completo de todas as movimentações
- Edição e exclusão com ajuste automático do estoque
- Produtos por Tipo: Lista produtos agrupados por categoria com totais
- Lucro por Produto: Análise de rentabilidade com gráficos
- Total de unidades vendidas
- Lucro total por produto
- Visualização em gráficos interativos
erDiagram
TIPO_PRODUTO {
bigint id PK
varchar nome UK
}
PRODUTO {
bigint id PK
varchar descricao
decimal valor_fornecedor
integer quantidade_em_estoque
bigint tipo_produto_id FK
}
MOVIMENTO_ESTOQUE {
bigint id PK
timestamp data_movimento
varchar tipo_movimentacao
integer quantidade_movimentada
decimal valor_venda
bigint produto_id FK
}
TIPO_PRODUTO ||--o{ PRODUTO : possui
PRODUTO ||--o{ MOVIMENTO_ESTOQUE : tem
- Categorização dos produtos (ex: Eletrônicos, Vestuário, Alimentos)
- Nome único para evitar duplicações
- Informações básicas do produto
- Valor de fornecedor para cálculo de lucro
- Quantidade em estoque atualizada automaticamente
- Registro de todas as entradas e saídas
- Valor de venda calculado automaticamente para saídas
- Data/hora do movimento para rastreabilidade
GET /api/tipos-produto- Lista todos os tiposPOST /api/tipos-produto- Cria novo tipoGET /api/tipos-produto/{id}- Busca tipo por IDPUT /api/tipos-produto/{id}- Atualiza tipoDELETE /api/tipos-produto/{id}- Remove tipo
GET /api/produtos- Lista todos os produtosPOST /api/produtos- Cria novo produtoGET /api/produtos/{id}- Busca produto por IDPUT /api/produtos/{id}- Atualiza produtoDELETE /api/produtos/{id}- Remove produto
GET /api/movimentos- Lista todas as movimentaçõesPOST /api/movimentos- Cria nova movimentaçãoGET /api/movimentos/{id}- Busca movimentação por IDPUT /api/movimentos/{id}- Atualiza movimentaçãoDELETE /api/movimentos/{id}- Remove movimentação
GET /api/relatorios/produtos-por-tipo?tipoProdutoId={id}- Produtos por tipoGET /api/relatorios/lucro-por-produto- Análise de lucro
- Obrigatórios: Docker e Docker Compose
- Opcionais para desenvolvimento:
- Java 17+ e Maven 3.8+ (para desenvolvimento local)
- Node.js 18+ e npm (para desenvolvimento local)
- Clone o repositório:
git clone https://github.com/caiocv18/vortex.git
cd vortex- Execute todos os serviços com o launcher:
# Inicia todos os serviços automaticamente
./start-vortex.sh
# Ou especifique o ambiente
./start-vortex.sh -e dev -m kafkaIsso iniciará:
- Auth Backend: Quarkus na porta 8081
- Main Backend: Spring Boot na porta 8080
- Auth Frontend: React na porta 3001
- Main Frontend: Vue.js na porta 5173
- Infraestrutura: Bancos de dados e mensageria
- Acesse a aplicação:
- Aplicação Principal: http://localhost:5173
- Serviço de Autenticação: http://localhost:3001
- API Principal: http://localhost:8080/swagger-ui.html
- API de Autenticação: http://localhost:8081/q/swagger-ui
# Ambiente de produção completo
./start-vortex.sh -e prd -m kafka
# Ou manualmente
cd infra/docker
docker-compose -f docker-compose.full-kafka.yml up -d# Backend de autenticação
cd backend/vortex-authorization-service
mvn quarkus:dev
# Frontend de autenticação (nova janela de terminal)
cd frontend/vortex-authorization-service
npm install && npm run dev# Backend principal
cd backend/vortex-application-service
./mvnw spring-boot:run
# Frontend principal (nova janela de terminal)
cd frontend/vortex-application-service
npm install && npm run dev# Para todos os serviços
./start-vortex.sh --stop
# Ou manualmente
docker-compose down
pkill -f "spring-boot\|quarkus\|vite"Para uma experiência mais simples e automatizada, use o Vortex Launcher - um script inteligente que gerencia automaticamente todo o ambiente:
# Modo interativo (recomendado)
./start-vortex.sh
# Ambiente de desenvolvimento (H2 + Hot Reload)
./start-vortex.sh -e dev
# Ambiente de produção (Oracle + Docker)
./start-vortex.sh -e prd
# Apenas backend
./start-vortex.sh -e dev --backend-only
# Parar todos os serviços
./start-vortex.sh --stop- 🔍 Detecção Automática: Verifica pré-requisitos e adapta a execução
- 🌍 Múltiplos Ambientes: Desenvolvimento (H2) ou Produção (Oracle)
- 🎨 Frontend Integrado: Gerencia Vue.js automaticamente
- 🐳 Docker Inteligente: Fallback para Docker quando ferramentas locais não estão disponíveis
- 📊 Monitoramento: Status em tempo real dos serviços
- 🛑 Gerenciamento Completo: Start, stop e limpeza de ambiente
- Backend: Spring Boot local ou Docker
- Database: H2 em memória
- Frontend: Vite dev server (hot reload)
- URLs: API (8080), Frontend (5173), H2 Console
- Backend: Docker + Spring Boot
- Database: Oracle Enterprise (Docker)
- Frontend: Build otimizado + Nginx
- URLs: API (8080), Frontend (3000), Oracle (1521)
Para documentação completa do script, consulte: README-LAUNCHER.md
vortex/
├── backend/ # Serviços Backend
│ ├── vortex-application-service/ # Serviço Principal (Spring Boot)
│ │ ├── src/main/java/br/com/vortex/application/
│ │ │ ├── controller/ # REST Controllers
│ │ │ ├── service/ # Lógica de negócio
│ │ │ ├── repository/ # Repositórios JPA
│ │ │ ├── model/ # Entidades JPA
│ │ │ ├── dto/ # Data Transfer Objects
│ │ │ ├── config/ # Configurações (CORS, Security, Messaging)
│ │ │ ├── factory/ # Message Broker Factory
│ │ │ └── exception/ # Exceções customizadas
│ │ ├── src/test/ # Testes unitários e integração
│ │ ├── Dockerfile # Container Spring Boot
│ │ └── pom.xml # Dependências Maven
│ │
│ └── vortex-authorization-service/ # Serviço de Autenticação (Quarkus)
│ ├── src/main/java/br/com/vortex/authorization/
│ │ ├── resource/ # JAX-RS Resources
│ │ ├── service/ # Lógica de autenticação
│ │ ├── entity/ # Entidades de usuário/auth
│ │ ├── dto/ # DTOs de auth
│ │ ├── security/ # JWT e criptografia
│ │ ├── event/ # Eventos de autenticação
│ │ └── config/ # Configurações Quarkus
│ ├── src/main/resources/db/migration/ # Migrações Flyway
│ ├── src/main/docker/ # Dockerfiles nativos
│ └── pom.xml # Dependências Maven
│
├── frontend/ # Aplicações Frontend
│ ├── vortex-application-service/ # Frontend Principal (Vue.js)
│ │ ├── src/
│ │ │ ├── api/ # Serviços de API
│ │ │ │ └── generated/ # Cliente gerado do OpenAPI
│ │ │ ├── views/ # Páginas da aplicação
│ │ │ ├── components/ # Componentes Vue reutilizáveis
│ │ │ ├── stores/ # Estado global (Pinia)
│ │ │ ├── router/ # Configuração de rotas + guards
│ │ │ └── utils/ # Utilitários (auth callback)
│ │ ├── e2e/ # Testes E2E (Playwright)
│ │ ├── Dockerfile # Container Vue.js
│ │ └── package.json # Dependências npm
│ │
│ └── vortex-authorization-service/ # Frontend de Auth (React)
│ ├── src/
│ │ ├── pages/ # Páginas de autenticação
│ │ ├── components/ # Componentes React
│ │ ├── contexts/ # Context API (auth state)
│ │ ├── services/ # Integração com API auth
│ │ └── types/ # Tipos TypeScript
│ ├── Dockerfile # Container React
│ └── package.json # Dependências npm
│
├── infra/ # Infraestrutura
│ ├── docker/ # Configurações Docker Compose
│ │ ├── docker-compose.yml # Stack básica
│ │ ├── docker-compose.full.yml # Stack completa
│ │ ├── docker-compose.auth.yml # Apenas auth services
│ │ └── docker-compose.full-kafka.yml # Com Kafka integrado
│ ├── kafka/ # Configurações Kafka
│ ├── rabbitmq/ # Configurações RabbitMQ
│ ├── oracle/ # Scripts Oracle
│ └── docs/ # Documentação de infraestrutura
│
├── docs/ # Documentação Geral
│ ├── application/openapi-backend.json # Especificação OpenAPI
│ ├── authentication/README.md # Documentação de auth
│ ├── PORTS.md # Mapeamento de portas
│ └── prompts/ # Prompts de desenvolvimento
│
├── scripts/ # Scripts utilitários
│ ├── check-ports.sh # Verificação de portas
│ └── test-queue-endpoint.sh # Testes de messaging
│
├── start-vortex.sh # Launcher principal
├── CLAUDE.md # Instruções para Claude
├── README.md # Documentação principal
├── README-LAUNCHER.md # Documentação do launcher
└── KUBERNETES_GUIDE.md # Guia de deploy Kubernetes
- Testes Unitários: Controllers e Services
- Testes de Integração: API completa com banco H2
- Execução:
cd backend/vortex-application-service ./mvnw test ./mvnw test -Dtest=*ControllerTest # Apenas controllers
- Testes Especializados: 98 testes focados em fluxos específicos
- Registro de Usuário: 42 testes (validação, criptografia, DTOs)
- Recuperação de Senha: 56 testes (service, security, validation)
- Execução via Scripts:
# Testes de registro (42 testes) ./scripts/run-auth-registration-tests.sh --all ./scripts/run-auth-registration-tests.sh --coverage # Testes de recuperação de senha (56 testes) ./scripts/run-auth-password-recovery-tests.sh --all ./scripts/run-auth-password-recovery-tests.sh --security
- Execução Maven:
cd backend/vortex-authorization-service mvn test mvn test -Dtest="*PasswordRecovery*" # Apenas password recovery mvn test -Dtest=AuthResourceTest # Teste específico
- Testes Unitários: Componentes Vue com Vitest
- Testes E2E: Fluxos completos com Playwright
- Execução:
cd frontend/vortex-application-service npm run test:unit # Testes unitários npm run test:e2e # Testes E2E npm run test:coverage # Coverage report
- Testes Unitários: Componentes React com Vitest
- Testes de Integração: Context e hooks
- Execução:
cd frontend/vortex-authorization-service npm run test # Testes unitários npm run test:coverage # Coverage report
# Script para executar todos os testes
find . -name "pom.xml" -execdir mvn test \;
find . -name "package.json" -path "*/frontend/*" -execdir npm test \;A documentação completa da API principal está disponível através do Swagger UI:
- Interface Swagger: http://localhost:8080/swagger-ui.html
- Especificação OpenAPI: http://localhost:8080/v3/api-docs
- Health Check: http://localhost:8080/health
A documentação da API de autenticação está disponível através do Swagger UI do Quarkus:
- Interface Swagger: http://localhost:8081/q/swagger-ui
- Especificação OpenAPI: http://localhost:8081/q/openapi
- Health Check: http://localhost:8081/q/health
- Métricas: http://localhost:8081/q/metrics
O arquivo de especificação OpenAPI da aplicação principal está disponível em:
- Localização:
docs/application/openapi-backend.json - Uso: Para geração de clientes API no frontend
O Vortex inclui um sistema completo de autenticação e autorização baseado em microsserviços:
- ✅ JWT Tokens: Autenticação stateless com tokens de acesso e refresh
- ✅ Múltiplos Roles: Sistema de papéis (ADMIN, USER, MANAGER, VIEWER)
- ✅ Rate Limiting: Proteção contra ataques de força bruta
- ✅ Password Policy: Política de senhas robusta
- ✅ Audit Logs: Registro completo de ações de autenticação
- ✅ Token Refresh: Renovação automática de tokens
- ✅ CORS Configuration: Configuração segura para comunicação entre services
O sistema inclui usuários pré-configurados para desenvolvimento:
| Username | Password | Roles | Status | |
|---|---|---|---|---|
| admin@vortex.com | admin | Test@123 | ADMIN, USER | Ativo |
| user@vortex.com | user | Test@123 | USER | Ativo |
| manager@vortex.com | manager | Test@123 | MANAGER, USER | Ativo |
| viewer@vortex.com | viewer | Test@123 | VIEWER | Ativo |
- Acesso Inicial: Usuário tenta acessar a aplicação principal
- Verificação de Token: Router guard verifica presença e validade do JWT
- Redirecionamento: Se não autenticado, redireciona para página de login
- Autenticação: Usuário insere credenciais no frontend React
- Validação: Backend Quarkus valida contra banco PostgreSQL
- Geração de Tokens: Sistema gera JWT (15min) + Refresh Token (7 dias)
- Armazenamento: Frontend armazena tokens de forma segura
- Autorização: Cada requisição inclui JWT para validação
- Renovação: Tokens são renovados automaticamente quando necessário
POST /api/auth/login- Login de usuárioPOST /api/auth/register- Registro de novo usuárioPOST /api/auth/logout- Logout e invalidação de tokensPOST /api/auth/refresh- Renovação de tokensPOST /api/auth/forgot-password- Solicitação de reset de senhaPOST /api/auth/reset-password- Reset de senha com token
Interface moderna com Material Design mostrando visão geral do sistema com estatísticas, produtos com baixo estoque e movimentos recentes.
Tela completa para gerenciamento de produtos com filtros, ações de CRUD e controle de estoque em tempo real.
Controle detalhado de entradas e saídas com validações automáticas, cálculo de valores e histórico completo.
Visualização de dados em gráficos interativos para tomada de decisão com análise de lucro e distribuição por categorias.
Este projeto foi desenvolvido como parte de um desafio técnico. Para contribuições:
- Faça um Fork do projeto
- Crie uma branch para sua feature (
git checkout -b feature/AmazingFeature) - Commit suas mudanças (
git commit -m 'Add some AmazingFeature') - Push para a branch (
git push origin feature/AmazingFeature) - Abra um Pull Request
Caio Vinícius - Desenvolvedor FullStack - Desafio Técnico Vortex
Desenvolvido com ❤️ para o desafio Vortex



