Proyecto de microservicios para gestionar conductores, tipos de licencia y su integración mediante Eureka y gRPC.
- Node.js >= 18
- npm
- Docker (para levantar Eureka fácilmente)
- Postman / curl para probar endpoints
Desde la raíz del repositorio:
- Instala dependencias para todos los workspaces:
npm install- (Opcional) construir individualmente los servicios:
cd services/api-gateway && npm run build
cd services/driver-ms && npm run buildVoy a describir dos opciones: arrancar todo (Eureka + driver-ms + gateway) o ejecutar cada servicio por separado.
A. Levantar Eureka con Docker:
# desde la raíz del repo (usa Docker)
npm run eureka:up
# espera unos segundos a que esté listo (puedes abrir http://localhost:8761)B. Ejecutar driver-ms (en otra terminal):
cd services/driver-ms
# en Windows bash.exe la variable CROSS-ENV se usa desde package.json; simplemente:
npm run start:dev
# o si tienes problemas con cross-env en tu shell:
# npx nest start --watchC. Ejecutar api-gateway (en otra terminal):
cd services/api-gateway
npm run start:devEl flujo recomendado:
- Levantar Eureka (docker)
- Levantar driver-ms
- Levantar api-gateway
Si todo está bien, el gateway descubrirá DRIVER-SERVICE y las peticiones HTTP a la gateway se redirigirán a driver-ms.
npm run eureka:up— levanta el contenedor Eureka (Docker Compose)npm run eureka:down— baja los contenedores
Los siguientes endpoints están disponibles en el API Gateway (por defecto http://localhost:8080):
Drivers
- GET /drivers -> lista de drivers
- POST /drivers -> crear driver
- body: { user_id: number, availability?: number }
- GET /drivers/:id -> obtener driver
- PUT /drivers/:id -> actualizar driver
- DELETE /drivers/:id -> eliminar driver
- GET /drivers/:id/can-drive/:licenseTypeId -> chequea si el driver puede conducir con un tipo de licencia
Driver Licenses (proxy to DriverLicensesService)
- POST /drivers/:driverId/licenses -> crear licencia para driver
- body: { license_type_id: number, number?: string, issued_at?: "YYYY-MM-DD", expires_at?: "YYYY-MM-DD", status?: number }
- GET /drivers/:driverId/licenses -> listar licencias del driver
- POST /drivers/:driverId/licenses/:licenseId/suspend -> suspender licencia
- GET /drivers/:driverId/licenses/active -> listar licencias activas
License Types
- POST /license-types -> crear tipo de licencia
- body: { code: string, description?: string, is_professional?: boolean }
- GET /license-types -> listar tipos
- GET /license-types/by-code?code=XXX -> buscar por código
- GET /license-types/:id -> get by id
- PUT /license-types/:id -> actualizar
- DELETE /license-types/:id -> eliminar
- POST /license-types/:parentId/includes/:childId -> agregar inclusion
- DELETE /license-types/:parentId/includes/:childId -> eliminar inclusion
- GET /license-types/:id/closure -> obtener closure de inclusiones
Nota: El gateway valida entradas con class-validator y devolverá 400 para payloads inválidos.
EUREKA_HOST,EUREKA_PORT— host y puerto de Eureka (por defecto localhost:8761)DRIVER_APP_NAME— nombre con el que se registra driver-ms (por defecto DRIVER-SERVICE)DRIVER_GRPC_PORT,DRIVER_HTTP_PORT— puertos por defecto para driver-msPROTO_ROOT— ruta a folderprotos/si necesitas cambiarla
- Crear driver (a gateway):
curl -X POST http://localhost:8080/drivers -H "Content-Type: application/json" -d '{"user_id":123}'- Crear licencia para driver (a gateway):
curl -X POST http://localhost:8080/drivers/1/licenses -H "Content-Type: application/json" -d '{"license_type_id": 2, "number":"ABC123", "issued_at":"2025-01-01", "expires_at":"2026-01-01"}'- Si el gateway no encuentra
DRIVER-SERVICE, verifica que Eureka esté corriendo como contenedor (http://localhost:8761) y quedriver-msse haya registrado (logs del servicio muestran registro de Eureka). - Si
npm run start:devfalla en Windows porcross-env, pruebanpx nest start --watcho instalacross-envglobalmente.