Skip to content

Guilherme-ASF/Teste-Pratico-Autoflex

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Controle de Estoque e Producao

Aplicacao web full-stack para gerenciar produtos, materias-primas e planejar a producao com base no estoque disponivel.

🚀 Inicio Rapido

# 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/products

✅ Validacao do Sistema

Apos iniciar os containers, verifique se tudo esta funcionando:

  1. Containers rodando: docker compose ps - deve exibir 3 containers (postgres, backend, frontend) com status "Up"
  2. Backend ativo: Abra http://localhost:8080/api/products - deve retornar [] ou lista de produtos
  3. Frontend ativo: Abra http://localhost:5173 - deve exibir a interface em portugues com tema claro/escuro
  4. 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

Visao Geral

  • 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

Executar Tudo com Docker

  1. Na raiz do projeto, execute:
docker compose up --build
  1. Acesse:
  • Aplicacao: http://localhost:5173
  • API: http://localhost:8080

Executar Localmente (Sem Docker)

Banco de Dados

  1. Instale PostgreSQL.
  2. Crie o banco inventory_db.
  3. Ajuste as credenciais em backend/src/main/resources/application.properties se necessario.

Backend (Quarkus)

  1. Na pasta backend, execute:
./mvnw.cmd quarkus:dev
  1. A API ficara em http://localhost:8080.

Frontend (React + Redux)

  1. Na pasta frontend, execute:
npm install
npm run dev
  1. A aplicacao ficara em http://localhost:5173.

Funcionalidades da Interface

Tema Claro/Escuro

  • Toggle de tema no cabecalho da aplicacao
  • Preferencia salva no localStorage
  • Esquema de cores moderno com variaveis CSS

Gerenciamento de Produtos

  • 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

Composicao de Produtos

  • Filtro por produto especifico para visualizar apenas materiais relevantes
  • Associacao de produtos com materias-primas
  • Definicao de quantidade necessaria por produto

Planejamento de Producao

  • 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

Gerenciamento de Materias-Primas

  • CRUD completo com validacao de codigos unicos
  • Controle de estoque disponivel
  • Alertas de erro em tempo real

Regras de Negocio

  • Produto: possui code (unico), name, value e active (define se participa do planejamento)
  • Materia-prima: possui code (unico), name, stockQuantity e unitValue
  • 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

Endpoints da API

Produtos

  • GET /products
  • GET /products/{id}
  • POST /products
  • PUT /products/{id}
  • DELETE /products/{id}

Materias-primas

  • GET /raw-materials
  • GET /raw-materials/{id}
  • POST /raw-materials
  • PUT /raw-materials/{id}
  • DELETE /raw-materials/{id}

Associacoes produto x materia-prima

  • GET /product-materials
  • GET /product-materials?productId={id}
  • POST /product-materials
  • PUT /product-materials/{id}
  • DELETE /product-materials/{id}

Planejamento de Producao

  • GET /production/plan

Retorna a lista de produtos sugeridos, a quantidade maxima por produto e o valor total agregado.

Estrutura de Dados (Resumo)

Product

  • id (Long)
  • code (String, unico)
  • name (String)
  • value (BigDecimal)
  • active (Boolean, default true)

RawMaterial

  • id (Long)
  • code (String, unico)
  • name (String)
  • stockQuantity (BigDecimal)
  • unitValue (BigDecimal)

ProductMaterial

  • id (Long)
  • product (Product)
  • rawMaterial (RawMaterial)
  • requiredQuantity (BigDecimal)

Configuracao do Banco

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

Observacoes de Execucao

  • Para Docker, a aplicacao usa as configuracoes de ambiente do docker-compose.yml.
  • O backend expoe CORS para facilitar o uso local do frontend.

Testes

O projeto inclui testes automatizados para garantir a qualidade do codigo:

Como rodar localmente

cd backend
./mvnw.cmd test

cd frontend
npm run test:ci

# Em outro terminal
cd frontend
npm run dev
npm run cypress:run

Se a porta do Vite nao for 5173:

set CYPRESS_BASE_URL=http://localhost:5174
npm run cypress:run

Como rodar no Docker

docker 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-tests

Backend (JUnit + Quarkus)

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

Frontend - Testes Unitarios (Vitest)

cd frontend
npm run test:ci
  • Testes de componentes (materias-primas, composicao e plano)
  • Verifica exibicao de custo/lucro e filtro por produto

Frontend - Testes E2E (Cypress)

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

Testes via Docker (local ou CI)

docker compose --profile test up --build --abort-on-container-exit
  • backend-tests: Maven + JUnit com H2
  • frontend-tests: Vitest em modo CI
  • e2e-tests: Cypress headless usando os servicos Docker

Validacao do Sistema Completo

Docker Compose: ✅ Todos os servicos rodando

  • inventory-postgres: PostgreSQL 16 na porta 5432
  • inventory-backend: Quarkus 3.8.1 na porta 8080
  • inventory-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

Relatorio de Cobertura

  • Backend: CRUD completo + plano de producao
  • Frontend Unit: componentes chave (materias-primas, composicao, plano)
  • Frontend E2E: fluxos completos com seeds e validacoes

📚 Documentacao Tecnica Completa

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

🛠 Tecnologias Utilizadas

Backend

  • Java 17
  • Quarkus 3.8.1 (Supersonic Subatomic Java)
  • Hibernate ORM Panache
  • PostgreSQL JDBC Driver
  • JAX-RS (RESTEasy Reactive)
  • Jackson (JSON serialization)
  • Maven

Frontend

  • 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

Infrastructure

  • Docker & Docker Compose
  • PostgreSQL 16
  • Nginx (frontend serving in production)
  • Multi-stage builds for optimized images

🤝 Contato

Para duvidas ou esclarecimentos sobre este projeto, entre em contato através do processo seletivo da Autoflex.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors