// PROJECT.SPEC
- preview
- not configured
- stars
- 1
- forks
- 0
- last push
- Nov 14, 2025
LANGUAGES
JavaScript100%
README
BDII-TPO-G18
Inicialización rápida
- Configurá las variables de entorno de MongoDB (
MONGO_APP_USERNAME,MONGO_APP_PASSWORD, etc.) y levantá los servicios condocker compose up -d. - Instala dependencias con
npm install. - Ejecutá
npm startonode src/index.jspara iniciar el servidor Express.
Al iniciar, la app se conecta a MongoDB, recorre todos los archivos .csv en public/ y los carga en colecciones con el mismo nombre del archivo (sin la extensión). Cada carga reemplaza los datos previos de la colección para evitar duplicados. Los resultados aparecen en la consola.
Cache con Redis
docker-compose.ymlya levantaredis:7. Sólo hace falta definirREDIS_PASSWORDen.envpara que la app pueda conectarse.- Las 12 consultas del listado de abajo se resuelven primero contra Redis. En caso de acierto, la respuesta indica
X-Cache: HIT; si no existe cache, se consulta Mongo, se responde y se guarda comoMISS. - Cada cache se etiqueta con las colecciones que intervienen (clientes, pólizas, siniestros, etc.). Cuando ocurre un
POST/PATCH/DELETEo se recargan los CSV iniciales, se invalidan automáticamente los tags afectados, garantizando que no queden datos viejos en Redis. - Si Redis no está disponible, la app sigue funcionando normalmente sólo con Mongo y omite el cache hasta que el servicio vuelva a estar accesible.
Consultas y endpoints
Probá cualquier consulta con curl, apuntando al endpoint correspondiente; por ejemplo:
curl -X GET 'http://localhost:3000/api/clientes/polizas'
- Clientes activos con sus pólizas vigentes →
GET /api/clientes/polizas - Siniestros abiertos con tipo, monto y cliente afectado →
GET /api/siniestros/abiertos - Vehículos asegurados con su cliente y póliza →
GET /api/vehiculos/asegurados - Clientes sin pólizas activas →
GET /api/clientes/sin-polizas-activas - Agentes activos con cantidad de pólizas asignadas →
GET /api/agentes/polizas - Pólizas vencidas con el nombre del cliente →
GET /api/polizas/vencidas - Top 10 clientes por cobertura total →
GET /api/clientes/top-cobertura - Siniestros tipo "Accidente" del último año →
GET /api/siniestros/accidentes-recientes - Vista de pólizas activas ordenadas por fecha de inicio →
GET /api/polizas/activas - Pólizas suspendidas con estado del cliente →
GET /api/polizas/suspendidas - Clientes con más de un vehículo asegurado →
GET /api/clientes/mas-de-un-vehiculo - Agentes y cantidad de siniestros asociados →
GET /api/agentes/siniestros - ABM de clientes →
POST /api/clientes(alta),PATCH /api/clientes/:id_cliente(modificación parcial) yDELETE /api/clientes/:id_cliente(baja lógica + suspensión automática de pólizas activas) - Alta de nuevos siniestros →
POST /api/siniestros - Emisión de nuevas pólizas (validando cliente y agente) →
POST /api/polizas
Ejemplos de ABM de clientes
# Alta
curl -X POST http://localhost:3000/api/clientes \
-H "Content-Type: application/json" \
-d '{
"id_cliente": 2001,
"nombre": "Ana",
"apellido": "Gómez",
"dni": 32123456,
"email": "ana@example.com",
"telefono": "+54 11 5555-7777",
"direccion": "Calle Falsa 123",
"ciudad": "CABA",
"provincia": "Buenos Aires"
}'
# Modificación parcial
curl -X PATCH http://localhost:3000/api/clientes/2001 \
-H "Content-Type: application/json" \
-d '{
"email": "ana.gomez@example.com",
"telefono": "+54 11 5555-9999"
}'
# Baja lógica (suspende pólizas activas del cliente)
curl -X DELETE http://localhost:3000/api/clientes/2001
Ejemplo de alta de siniestros
curl -X POST http://localhost:3000/api/siniestros \
-H "Content-Type: application/json" \
-d '{
"id_siniestro": 9100,
"nro_poliza": "POL1001",
"fecha": "2025-05-24",
"tipo": "Accidente",
"monto_estimado": 450000,
"descripcion": "Choque leve en autopista"
}'
Ejemplo de emisión de pólizas
curl -X POST http://localhost:3000/api/polizas \
-H "Content-Type: application/json" \
-d '{
"nro_poliza": "POL2001",
"id_cliente": 1,
"id_agente": 101,
"tipo": "Auto",
"fecha_inicio": "2025-05-01",
"fecha_fin": "2026-05-01",
"prima_mensual": 30000,
"cobertura_total": 2500000
}'