O StockMaster é uma solução Full-Stack robusta para gestão de estoque industrial. O sistema permite o cadastro detalhado de matérias-primas, criação de produtos com fichas técnicas (receitas) complexas e possui um Simulador de Produção inteligente, que calcula a capacidade de manufatura baseada no estoque atual e prioriza itens de maior valor agregado para maximizar a receita.
O projeto foi construído utilizando uma arquitetura moderna, focada em performance, escalabilidade e qualidade de código.
- Core: React + Vite + TypeScript
- Estilização: Tailwind CSS v4 (Nova engine de alta performance).
- Gerenciamento de Estado (Híbrido):
- Server State: TanStack Query (React Query) para cache, refetching e sincronização com API.
- Client State: Redux Toolkit para gerenciamento de estados globais complexos.
- UI Components: Shadcn/ui (Radix UI) + Lucide React.
- Quality Assurance:
- Unitários/Integração: Vitest + React Testing Library.
- End-to-End (E2E): Cypress.
- Framework: Quarkus (Java supersônico e subatômico).
- Linguagem: Java 17+.
- Persistência: Hibernate ORM com Panache.
- Banco de Dados: PostgreSQL.
- Testes: JUnit 5 + RestAssured.
- Visão geral de valor monetário em estoque.
- Contagem de produtos e insumos.
- Alertas Inteligentes: Notificação automática para matérias-primas com estoque crítico (abaixo do mínimo).
- CRUD completo (Create, Read, Update, Delete).
- Validação de integridade referencial (impede exclusão de insumos em uso).
- Controle de estoque físico.
- Criação de produtos compostos.
- Ficha Técnica Dinâmica: Vinculação de múltiplos insumos com quantidades específicas (Ex: 1 Bolo = 0.5kg Farinha + 2 Ovos).
- Cálculo automático de dependências.
- Analisa todo o estoque disponível em tempo real.
- Cruza dados com as receitas dos produtos.
- Algoritmo de Prioridade: Sugere a produção priorizando produtos com maior valor de venda, garantindo o melhor uso possível dos recursos escassos.
- Node.js (v20 ou superior)
- Java JDK (17 ou superior)
- Maven (3.8+)
- Docker (Opcional, recomendado para o banco de dados)
O projeto espera um banco PostgreSQL rodando na porta 5432.
Via Docker (Recomendado):
docker run --name stock-postgres \
-e POSTGRES_USER=user \
-e POSTGRES_PASSWORD=password \
-e POSTGRES_DB=inventory_db \
-p 5432:5432 \
-d postgresquarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/inventory_db
quarkus.datasource.username=user
quarkus.datasource.password=passwordNavegue até a pasta do backend (onde está o pom.xml):
# Modo de desenvolvimento (Hot Reload ativado)
mvn quarkus:devA API estará disponível em: http://localhost:8080
Navegue até a pasta web:
# Instalar dependências
npm install
# Rodar servidor de desenvolvimento
npm run devA aplicação estará disponível em: http://localhost:5173
O projeto possui uma suíte de testes robusta cobrindo diversas camadas da aplicação.
Focados na lógica dos componentes, reducers e hooks customizados. Utiliza ambiente jsdom.
cd web
npx vitest run
# Para ver cobertura de código:
npx vitest run --coverageSimulam o usuário real navegando na aplicação, clicando em botões e interagindo com a API real (ou mockada).
Certifique-se de que o Front-end (npm run dev) e o Back-end (mvn quarkus:dev) estejam rodando.
cd web
# Modo Headless (Executa no terminal, ideal para CI/CD)
npx cypress run
# Modo Interativo (Abre a interface visual do Cypress)
npx cypress openinventory-system/
├── backend/ (Quarkus API)
│ ├── src/main/java/br/com/brunoeloi/inventory/
│ │ ├── model/ # Entidades JPA (Product, RawMaterial)
│ │ ├── resource/ # Controllers REST
│ │ └── service/ # Regras de Negócio (Production Logic)
│ └── src/test/ # Testes de Integração Java (RestAssured)
│
└── web/ (React Frontend)
├── cypress/e2e/ # Testes E2E (Fluxos de Usuário)
├── src/
│ ├── components/ # Componentes UI (Shadcn/Reutilizáveis)
│ ├── hooks/ # Custom Hooks (React Query)
│ ├── pages/ # Telas da aplicação
│ ├── store/ # Redux Slices e Store config
│ └── test/ # Configuração do Vitest (setup.ts)
├── vite.config.ts # Config Vite + Vitest + Tailwind Plugin
└── package.json-
Faça um Fork do projeto.
-
Crie uma Branch para sua Feature (git checkout -b feature/NovaFeature).
-
Faça o Commit (git commit -m 'Add some NovaFeature').
-
Faça o Push (git push origin feature/NovaFeature).
-
Abra um Pull Request.
Full Stack Developer | Java & React Specialist