strap ▸ fardenghiBDII-TPO-G18← back to portfolio
featured case study

fardenghi / BDII-TPO-G18

BDII-TPO-G18

view repository ↗
// PROJECT.SPEC
preview
not configured
stars
1
forks
0
last push
Nov 14, 2025
LANGUAGES
JavaScript100%

README

BDII-TPO-G18

Inicialización rápida

  1. Configurá las variables de entorno de MongoDB (MONGO_APP_USERNAME, MONGO_APP_PASSWORD, etc.) y levantá los servicios con docker compose up -d.
  2. Instala dependencias con npm install.
  3. Ejecutá npm start o node src/index.js para 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.yml ya levanta redis:7. Sólo hace falta definir REDIS_PASSWORD en .env para 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 como MISS.
  • Cada cache se etiqueta con las colecciones que intervienen (clientes, pólizas, siniestros, etc.). Cuando ocurre un POST/PATCH/DELETE o 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'
  1. Clientes activos con sus pólizas vigentes → GET /api/clientes/polizas
  2. Siniestros abiertos con tipo, monto y cliente afectado → GET /api/siniestros/abiertos
  3. Vehículos asegurados con su cliente y póliza → GET /api/vehiculos/asegurados
  4. Clientes sin pólizas activas → GET /api/clientes/sin-polizas-activas
  5. Agentes activos con cantidad de pólizas asignadas → GET /api/agentes/polizas
  6. Pólizas vencidas con el nombre del cliente → GET /api/polizas/vencidas
  7. Top 10 clientes por cobertura total → GET /api/clientes/top-cobertura
  8. Siniestros tipo "Accidente" del último año → GET /api/siniestros/accidentes-recientes
  9. Vista de pólizas activas ordenadas por fecha de inicio → GET /api/polizas/activas
  10. Pólizas suspendidas con estado del cliente → GET /api/polizas/suspendidas
  11. Clientes con más de un vehículo asegurado → GET /api/clientes/mas-de-un-vehiculo
  12. Agentes y cantidad de siniestros asociados → GET /api/agentes/siniestros
  13. ABM de clientes → POST /api/clientes (alta), PATCH /api/clientes/:id_cliente (modificación parcial) y DELETE /api/clientes/:id_cliente (baja lógica + suspensión automática de pólizas activas)
  14. Alta de nuevos siniestros → POST /api/siniestros
  15. 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
  }'