Aplicacao web full-stack para gerenciar produtos, materias-primas e planejar a producao com base no estoque disponivel.
# Clone ou navegue ate o diretorio do projeto
cd "Teste Prático - Autoflex"
# Inicie todos os servicos com Docker (recomendado)
docker compose up --build -d
# Aguarde ~1-2 minutos para build e startup
# Acesse a aplicacao
# Frontend: http://localhost:5173
# Backend API: http://localhost:8080/api/productsApos iniciar os containers, verifique se tudo esta funcionando:
- Containers rodando:
docker compose ps- deve exibir 3 containers (postgres, backend, frontend) com status "Up" - Backend ativo: Abra
http://localhost:8080/api/products- deve retornar[]ou lista de produtos - Frontend ativo: Abra
http://localhost:5173- deve exibir a interface em portugues com tema claro/escuro - Testes:
- Backend:
cd backend && ./mvnw.cmd test - Frontend unitario:
cd frontend && npm run test:ci - Frontend E2E:
cd frontend && npm run dev+npm run cypress:run - Docker (todos):
docker compose --profile test up --build --abort-on-container-exit
- Backend: Quarkus 3.8.1 com API REST e Hibernate ORM Panache
- Frontend: React 18.2 + Redux Toolkit com interface moderna em Portugues
- Banco de dados: PostgreSQL 16
- Funcionalidades:
- Gerenciamento completo de produtos e materias-primas
- Ativacao/desativacao de produtos para planejamento de producao
- Composicao de produtos (associacao com materias-primas)
- Planejamento de producao priorizando produtos de maior lucro
- Tema claro/escuro com persistencia
- Interface responsiva e moderna com animacoes
- Validacao e feedback de erros em tempo real
- Na raiz do projeto, execute:
docker compose up --build
- Acesse:
- Aplicacao:
http://localhost:5173 - API:
http://localhost:8080
- Instale PostgreSQL.
- Crie o banco
inventory_db. - Ajuste as credenciais em
backend/src/main/resources/application.propertiesse necessario.
- Na pasta
backend, execute:
./mvnw.cmd quarkus:dev
- A API ficara em
http://localhost:8080.
- Na pasta
frontend, execute:
npm install
npm run dev
- A aplicacao ficara em
http://localhost:5173.
- Toggle de tema no cabecalho da aplicacao
- Preferencia salva no localStorage
- Esquema de cores moderno com variaveis CSS
- Listagem com status visual (ativo/inativo)
- Criacao, edicao e exclusao com validacao
- Toggle de ativacao/desativacao para controlar quais produtos entram no planejamento
- Alertas de erro quando codigos duplicados sao inseridos
- Filtro por produto especifico para visualizar apenas materiais relevantes
- Associacao de produtos com materias-primas
- Definicao de quantidade necessaria por produto
- Botao "Gerar Plano" calcula producao otimizada
- Priorizacao por lucro unitario (valor do produto - custo das materias-primas)
- Modal com detalhes ao clicar em um produto:
- Quantidade planejada
- Valor unitario do produto
- Custo total (soma do valor das materias-primas usadas)
- Lucro total (receita - custo)
- Breakdown detalhado de cada materia-prima
- Exibe valor total agregado do plano
- CRUD completo com validacao de codigos unicos
- Controle de estoque disponivel
- Alertas de erro em tempo real
- Produto: possui
code(unico),name,valueeactive(define se participa do planejamento) - Materia-prima: possui
code(unico),name,stockQuantityeunitValue - Composicao de produto: define quais materias-primas e em que quantidade (
requiredQuantity) sao necessarias para produzir um produto - Planejamento de producao:
- Calcula quantas unidades de cada produto ativo podem ser produzidas com o estoque atual
- Utiliza algoritmo guloso priorizando produtos de maior lucro unitario (valor - custo)
- O lucro unitario e calculado subtraindo o custo das materias-primas do valor do produto
- Deduz materias-primas a cada produto alocado
- Retorna lista de produtos sugeridos, quantidades, custos, lucros e valor total agregado
- Validacoes:
- Codigos de produtos e materias-primas devem ser unicos
- Sistema exibe alertas quando codigos duplicados sao inseridos
- Composicao de produtos pode ser filtrada por produto especifico
GET /productsGET /products/{id}POST /productsPUT /products/{id}DELETE /products/{id}
GET /raw-materialsGET /raw-materials/{id}POST /raw-materialsPUT /raw-materials/{id}DELETE /raw-materials/{id}
GET /product-materialsGET /product-materials?productId={id}POST /product-materialsPUT /product-materials/{id}DELETE /product-materials/{id}
GET /production/plan
Retorna a lista de produtos sugeridos, a quantidade maxima por produto e o valor total agregado.
id(Long)code(String, unico)name(String)value(BigDecimal)active(Boolean, default true)
id(Long)code(String, unico)name(String)stockQuantity(BigDecimal)unitValue(BigDecimal)
id(Long)product(Product)rawMaterial(RawMaterial)requiredQuantity(BigDecimal)
Arquivo: backend/src/main/resources/application.properties
quarkus.datasource.db-kind=postgresql
quarkus.datasource.username=postgres
quarkus.datasource.password=postgres
quarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/inventory_db
- Para Docker, a aplicacao usa as configuracoes de ambiente do
docker-compose.yml. - O backend expoe CORS para facilitar o uso local do frontend.
O projeto inclui testes automatizados para garantir a qualidade do codigo:
cd backend
./mvnw.cmd test
cd frontend
npm run test:ci
# Em outro terminal
cd frontend
npm run dev
npm run cypress:runSe a porta do Vite nao for 5173:
set CYPRESS_BASE_URL=http://localhost:5174
npm run cypress:rundocker compose --profile test up --build --abort-on-container-exit backend-tests
docker compose --profile test up --build --abort-on-container-exit frontend-tests
docker compose --profile test up --build --abort-on-container-exit e2e-testscd backend
./mvnw.cmd test- Testes de API REST (CRUD) para produtos, materias-primas e composicao
- Teste do algoritmo de plano de producao (lucro e produtos ativos)
cd frontend
npm run test:ci- Testes de componentes (materias-primas, composicao e plano)
- Verifica exibicao de custo/lucro e filtro por produto
cd frontend
npm run dev # Inicia servidor de desenvolvimento
npm run cypress:run # Executa testes headless
# ou
npm run cypress:open # Abre interface do Cypress- Fluxos completos: CRUD, composicao e plano de producao
- Seeds via API e limpeza automatica antes de cada teste
docker compose --profile test up --build --abort-on-container-exitbackend-tests: Maven + JUnit com H2frontend-tests: Vitest em modo CIe2e-tests: Cypress headless usando os servicos Docker
Docker Compose: ✅ Todos os servicos rodando
inventory-postgres: PostgreSQL 16 na porta 5432inventory-backend: Quarkus 3.8.1 na porta 8080inventory-frontend: Nginx com React app na porta 5173
Comandos para validar:
# Verificar status dos containers
docker compose ps
# Testar API backend
curl http://localhost:8080/api/products
# Acessar aplicacao frontend
# Abrir http://localhost:5173 no navegador- Backend: CRUD completo + plano de producao
- Frontend Unit: componentes chave (materias-primas, composicao, plano)
- Frontend E2E: fluxos completos com seeds e validacoes
Para uma explicacao detalhada da arquitetura, decisoes tecnicas, algoritmo de planejamento e possiveis perguntas de entrevista, consulte:
EXPLANATION.md - Documento tecnico completo em portugues
Este documento inclui:
- Requisitos atendidos (todos os 10 requisitos funcionais)
- Arquitetura em camadas (frontend, backend, banco de dados)
- Modelo de dados com relacionamentos
- Algoritmo guloso de planejamento de producao
- Decisoes tecnicas e justificativas
- Possiveis perguntas de entrevista e respostas preparadas
- Melhorias futuras e next steps
- Java 17
- Quarkus 3.8.1 (Supersonic Subatomic Java)
- Hibernate ORM Panache
- PostgreSQL JDBC Driver
- JAX-RS (RESTEasy Reactive)
- Jackson (JSON serialization)
- Maven
- React 18.2.0
- Redux Toolkit 2.0.1
- Vite 5.1.0 (build tool)
- Vitest 1.3.1 (unit testing)
- Cypress 13.6.3 (E2E testing)
- Modern CSS with CSS Variables
- Docker & Docker Compose
- PostgreSQL 16
- Nginx (frontend serving in production)
- Multi-stage builds for optimized images
Para duvidas ou esclarecimentos sobre este projeto, entre em contato através do processo seletivo da Autoflex.