FleetControl
Plataforma de gestión de flotas
- Java 17
- Spring Boot
- Microservicios
- Spring Cloud Gateway
- Spring Security
- JWT
- PostgreSQL
- Flyway
- OpenFeign
- Resilience4j
- JUnit 5
- Testcontainers
- OpenAPI
- Checkstyle
- PMD
- Spotless
- Docker
Proyecto en equipo desarrollado en un sprint Scrum de 2 semanas: backend de gestión de flotas con 9 microservicios (gateway, autenticación, vehículos, conductores, rutas, mantenimiento, combustible, alertas y un panel ejecutivo). Se levanta con un solo docker compose up y genera sus propios datos de demostración.
Mi rol: coordinación del equipo, estándares de ingeniería y servicios principales
- Flujo de Git: dev para integración y main para versiones estables, una rama por tarea con el nombre tipo/número-issue-descripción, sin commits directos y con al menos una aprobación de alguien distinto al autor
- Convenciones: Conventional Commits, un formato común de descripción de PR (trabajo realizado, archivos cambiados, notas para probarlo) y reglas de Javadoc y de migraciones Flyway, todo recogido en un CONTRIBUTING.md
- Control de calidad: Spotless, Checkstyle (estilo Google) y PMD, con workflows de GitHub Actions de calidad de código, commit lint y builds de Docker en las PR a dev y main
- Organización: cada miembro es responsable de un microservicio completo (código, tests y documentación); definí la arquitectura en capas y la estructura del proyecto, revisé el código del equipo y añadí un AGENTS.md para que los asistentes de IA sigan las mismas reglas
- Microservicios propios: construí ms-auth, ms-gateway, ms-maintenance, ms-dashboard y ms-alerts, terminé ms-drivers y ms-vehicles, y mejoré ms-routes y ms-fuel (seeders de datos de demostración, seguridad y resiliencia)
- Autenticación centralizada: ms-auth emite el JWT y cada servicio de dominio lo valida; las llamadas entre servicios (OpenFeign) se autentican con una clave interna que el gateway elimina de las peticiones externas
- Gateway único con enrutamiento, rate limiting por IP (Caffeine), trazado con request ID y health check en paralelo de los servicios
- Resiliencia con Resilience4j (circuit breakers) en las llamadas entre servicios
- Contrato de errores común: todos los servicios traducen sus excepciones al mismo formato de respuesta
- Esquema versionado en PostgreSQL con migraciones Flyway y JPA en modo validate
- Funciona sin APIs externas: un seeder genera datos de demostración reproducibles (semilla e histórico configurables) al arrancar
- Tests unitarios con JUnit 5 y Mockito, tests de integración con Testcontainers (PostgreSQL) y Swagger UI en cada servicio