cd ..

[ project / 07 ] · Full-Stack System

ServEasy.

A complete restaurant operation system, from opening the table to closing the bill.

JavaSpring BootMySQLSpring SecurityDockerThymeleaf

in action

The interface

Login· ServEasy login
1 / 13
ServEasy login
expand

click image to expand fullscreen

about the project

ServEasy is my final project for the Technical Degree in Software Development at SENAC: a full-stack web system for restaurant operations covering the entire cycle from opening a table to closing the bill. Three distinct panels, each scoped to a specific role in the operation: Admin, Cozinheiro and Atendente.

The backend is Java 17 with Spring Boot 3, following a strict Controller → Service → Repository separation with DTOs for all input and output. Authentication is stateless via JWT (HS512) with a custom filter in the Spring Security chain. Three roles (ADMIN, COZINHEIRO, CLIENTE_ATENDENTE) are enforced per-method with @PreAuthorize. Domain exceptions map cleanly to HTTP status codes through a GlobalExceptionHandler, and cross-cutting logging is handled by a Spring AOP aspect rather than scattered log calls across the codebase.

The Admin panel has a real-time dashboard showing daily orders, total revenue, average ticket, average rating and cancellations, plus full menu CRUD across six categories, inventory management with minimum stock alerts and per-item ingredient linkage, and table status control (AVAILABLE / OCCUPIED / RESERVED / MAINTENANCE). The kitchen panel shows the live order queue with a NOVO → EM_ANDAMENTO → PRONTO flow. The server panel handles table assignment, order entry and delivery tracking.

Closing a table generates a Sale record automatically, consolidating all delivered orders for that session. The full ingredient chain is modeled in JPA: Order → OrderItem → MenuItem → MenuItemIngredient → StockItem, so stock movements are tied to what was actually sold. There is also a public feedback system with 1-5 star ratings, no login required. The whole stack runs with Docker Compose using a depends_on health check, so the application only starts after MySQL is confirmed healthy.

project.meta

type
Full-Stack System
stack
Java · Spring Boot · MySQL · Spring Security · Docker · Thymeleaf
source
repo

what it does

Key features

01

Three role-based panels

Admin, Cozinheiro and Atendente panels each built for that role's actual workflow, enforced by method-level @PreAuthorize — no route leakage between roles.

02

Full order lifecycle

NOVO → EM_ANDAMENTO → PRONTO → ENTREGUE, then account close with an automatic Sale record consolidating every delivered order from the session.

03

Real-time admin dashboard

Live visibility on daily orders, revenue, average ticket, customer ratings and cancellations. Inventory alerts fire when any item drops below minimum stock.

04

42 REST endpoints, Swagger-documented

Full API surface organized across Auth, Menu, Orders, Tables, Stock and Feedback groups, browseable at /swagger-ui/index.html.

05

Production-style infrastructure

Multi-stage Dockerfile, Docker Compose with MySQL health check dependency, separate profiles for dev/docker/prod, and @Transactional(readOnly = true) on all reads.