A full stack application for production management that allows managing products, raw materials and their relationships, and calculating which products can be manufactured based on available stock.
This project demonstrates a production-ready architecture with a fully containerized environment, automated tests, clean backend structure and modern frontend integration.
- Java 17
- Spring Boot
- Spring Data JPA
- Maven
- H2 / MySQL
- JUnit & Mockito
- React
- TypeScript
- Vite
- Axios
- Nginx (production build)
- Docker
- Docker Compose
- Backend unit tests (Service layer)
- Frontend tests (Vitest + Testing Library)
- End-to-end tests (Cypress)
- Product management
- Raw material management
- Product ↔ raw material association
- Production feasibility calculation based on stock
- Global exception handling
- Structured API responses
- Request traceability with Correlation ID
- Environment-based configuration
- Fully containerized application
- A product can be linked to multiple raw materials
- Each raw material has an available stock quantity
- The system calculates which products can be produced based on current stock
- Production is limited by the scarcest required raw material
controller → REST endpoints
service → business rules
repository → data access
entity → database mapping
dto → request/response models
exception → global error handling
config → filters & environment configuration
- Layered architecture
- DTO pattern
- Global exception handler
- Correlation ID filter for logging
- Unit testing with mocks
Build and start the entire application:
docker-compose up --buildFrontend: http://localhost
Backend API: http://localhost:8080
Swagger UI: http://localhost:8080/swagger-ui.html
The frontend is served by Nginx and API requests to /api are automatically proxied to the backend container.
mvn spring-boot:runBackend:
http://localhost:8080
cd frontend
npm install
npm run devFrontend:
http://localhost:5173
mvn testnpm run testnpx cypress open- GET
/products - POST
/products - PUT
/products/{id} - DELETE
/products/{id}
- GET
/raw-materials - POST
/raw-materials
- POST
/product-materials
- GET
/products/producible
Supported profiles:
- dev
- prod
Configured via:
spring.profiles.active
production-control-api/
├── Dockerfile
├── docker-compose.yml
├── .dockerignore
├── frontend/
│ ├── Dockerfile
│ └── nginx.conf
- Clean architecture with Spring Boot
- Real business logic implementation
- Full stack integration
- Production-ready Docker environment
- Reverse proxy with Nginx
- Automated testing strategy
- REST API best practices
Gustavo Batista
Java & Spring Boot Backend Developer
Full Stack Developer
LinkedIn: www.linkedin.com/in/gustavo-batista-11a570291
GitHub: https://github.com/