Este repositorio es la orquestación central del ecosistema de microservicios desarrollado para el reto Power-Up. El sistema gestiona de forma integral el flujo de pedidos de una plazoleta de comidas, desde la gestión de personal y menús hasta la trazabilidad avanzada y métricas de eficiencia.
El sistema sigue los principios de la Arquitectura Hexagonal (Ports & Adapters), garantizando que la lógica de negocio esté aislada de las dependencias tecnológicas y sea fácilmente testeable.
- Microservicio de Usuarios: Gestión de identidad y seguridad. Centraliza la creación de credenciales, asignación de roles y generación de JWT.
- Microservicio de Plazoleta: Motor operativo. Gestiona restaurantes, empleados, categorías, platos y el ciclo de vida completo de los pedidos.
- Microservicio de Trazabilidad: Componente de auditoría y análisis de datos utilizando MongoDB para el seguimiento de estados y cálculo de rendimientos.
- Microservicio de Mensajería: Integración con Twilio API para el envío de notificaciones por SMS a los clientes (avisos de pedidos listos o restricciones de cancelación).
A continuación se presenta el índice maestro de las decisiones técnicas que sustentan la robustez y escalabilidad del sistema:
| ID | Título de la Decisión | Enfoque Principal |
|---|---|---|
| 0001 | Restaurant-Employee Association Table | Estructura de asignación eficiente de personal a sedes. |
| 0002 | Selective Use of Builder Pattern (KISS) | Equilibrio entre legibilidad y simplicidad de código. |
| 0003 | Library-Agnostic Domain Models | Independencia total de frameworks externos en el Dominio. |
| 0004 | Rich Domain Models over Anemic Models | Encapsulamiento de reglas de negocio dentro de las entidades. |
| 0005 | Global Exception Handling & Mapping | Estandarización de respuestas de error en todo el ecosistema. |
| 0006 | Custom Feign ErrorDecoder | Manejo resiliente y semántico de errores inter-servicios. |
| 0007 | Order as an Aggregate with Plate List | Integridad de datos y simplificación de la jerarquía del pedido. |
| 0008 | Empty List Responses (200 OK) | Semántica correcta para consultas exitosas sin resultados. |
| 0009 | Batch Plate Validation Optimization | Mejora de rendimiento mediante la eliminación de consultas N+1. |
| 0010 | 1:N Owner and Restaurant Relationship | Modelado flexible para soportar cadenas de restaurantes. |
| 0011 | Stateless JWT Role Validation | Autorización escalable y descentralizada mediante Claims. |
| 0012 | Multi-role Access to Get-User-by-ID | Habilitación de visibilidad de datos para flujos de Trazabilidad. |
| 0013 | Restaurant-based Security (Traceability) | Garantía de aislamiento y privacidad de datos en NoSQL. |
| 0014 | Employee-centric Efficiency Calculation | Lógica de métricas basada en la gestión real del operario. |
Para poner en marcha el sistema, siga estos pasos en cada microservicio:
- Configuración de Base de Datos: Asegúrese de tener instancias activas de MySQL (para Usuarios y Plazoleta) y MongoDB (para Trazabilidad).
- Propiedades: Configure el archivo
application.ymloapplication.propertiescon las credenciales de conexión y llaves secretas para JWT. - Compilación y Arranque:
./gradlew bootRun
- Lenguaje: Java 11
- Framework: Spring Boot 2.7.3
- Persistencia: Spring Data JPA / Spring Data MongoDB
- Seguridad: Spring Security + Auth0 Java-JWT 4.4.0.
- Comunicación: OpenFeign (Inter-servicios) & Twilio SDK 10.9.2 (Externo) .
- Calidad: Jacoco (Cobertura de tests), MapStruct (Mapeo de objetos).
- Documentación: SpringDoc OpenAPI (Swagger).
El sistema implementa una arquitectura Stateless. La identidad del usuario viaja de forma segura mediante la Propagación de Tokens. Esto permite que el microservicio de Trazabilidad registre de forma nominal qué empleado interactuó con cada pedido, permitiendo auditorías transparentes y cálculos de eficiencia basados en acciones humanas reales.
- Implementación de Docker Compose para orquestación total.
- Ampliación de cobertura de pruebas unitarias y de integración.
- Implementación de recuperación de contraseña