Nota personal:
Este proyecto lo desarrollé hace bastante tiempo, como un ejercicio recreativo y de aprendizaje en torno a Spring Boot y el desarrollo de APIs REST.
No es un proyecto reciente ni fue pensado para uso en producción, pero si a alguien le sirve como referencia o punto de partida, me alegra que así sea.
La Restaurant API es un backend basado en Spring Boot diseñado para gestionar operaciones de un restaurante mediante un servicio web RESTful.
Incluye autenticación de usuarios, control de acceso por roles, gestión de menús y productos, sistema de reservas y panel administrativo.
- Registro y autenticación de usuarios mediante JWT.
- Control de acceso basado en roles (
ADMINyCLIENTE). - Gestión de categorías de menú y productos.
- Sistema de reservas de mesas.
- Panel administrativo con operaciones CRUD.
- Integración con frontend habilitada para CORS.
| Tecnología | Versión | Uso |
|---|---|---|
| Java | 17 | Plataforma de ejecución |
| Spring Boot | 3.3.5 | Framework principal |
| Spring Security | 6.3.4 | Autenticación y autorización |
| Spring Data JPA | - | Capa de persistencia |
| MySQL Connector | - | Conectividad con la base de datos |
| JWT (JJWT) | 0.12.6 | Autenticación basada en tokens |
| Lombok | - | Reducción de código boilerplate |
| Maven | - | Gestión de dependencias y compilación |
| dotenv-java | 3.0.2 | Manejo de variables de entorno |
| commons-lang3 | 3.17.0 | Funciones utilitarias |
| android-json | - | Procesamiento de JSON |
El proyecto sigue una arquitectura por capas con separación de responsabilidades:
- Seguridad:
SecurityConfig,JwtAuthenticationFilter,SimpleCorsFilter. - Controladores:
AuthController,AdminController,CustomerController. - Servicios:
AuthService,AdminService,CustomerService. - Repositorios:
UserRepository,CategoryRepository,ProductRepository,ReservationRepository. - Entidades:
User,Category,Product,Reservation. - DTOs: Objetos para transferencia de datos.
- Configuración: Clase principal
RestaurantApiApplication.
- Autenticación stateless con JWT.
- Control de acceso por roles (
ADMIN,CLIENTE). - Contraseñas cifradas con BCrypt.
- Configuración de CORS para permitir integración con
localhost:4200.
- Mapeo de entidades JPA.
- Repositorios basados en Spring Data JPA.
- Soporte para almacenamiento de imágenes (
longblob). - Operaciones CRUD completas para todas las entidades.
- Diseño RESTful con recursos bien definidos.
- Uso de DTOs para solicitudes y respuestas.
- Manejo consistente de errores y formato de respuesta.
- Preparada para integración con OpenAPI.
Requisitos previos
- Java 17
- Maven
- MySQL
- Creacion y configuración de variables de entorno en
application-secret.properties
# Clonar el repositorio
https://github.com/https-michi/restaurant-backend.git
# Compilar y ejecutar
mvn spring-boot:runSi quieres conversar o necesitas ayuda para adaptarlo a tus necesidades, puedes encontrarme aquí:
- Discord:
mi00001