Backend público de referencia para la ciudad de Ceres. Migramos paso a paso el servidor Express legacy a NestJS 11, manteniendo la base de datos PostgreSQL y compatibilidad de endpoints mientras modernizamos arquitectura, seguridad y DX.
- Infra básica lista: ConfigModule global, TypeORM con
synchronize: false, Redis opcional, healthcheckGET /api/v1/health. - Modelo de datos portado a TypeORM (ver
src/entities/). - DTOs alineados con el backend legacy por módulo (ver
src/modules/*/dto). - Documentación de fases en
docs/migracion/.
npm install
cp .env.example .env # completar credenciales reales
npm run start:dev
# healthcheck
curl http://localhost:${PORT:-3000}/api/v1/healthdocker build -t ceres-api:local .
docker run --rm -p 3022:3022 \
-e PORT=3022 \
-e NODE_ENV=production \
-e DB_HOST=... -e DB_PORT=5432 -e DB_USERNAME=... -e DB_PASSWORD=... -e DB_DATABASE=... \
-e REDIS_HOST=... -e REDIS_PORT=6379 -e REDIS_PASSWORD=... \
-e ADMIN_API_KEY=... -e BOT_API_KEY=... \
ceres-api:localVer docs/migracion/21-ci-cd.md para pasos de configuración completos.
Para rollout incremental con legacy + Apache2, ver docs/migracion/22-deploy-gradual-vps.md.
Para estrategia profesional de ramas, ver docs/migracion/23-estrategia-ramas.md.
Mientras no se haga merge a main, usar deploy manual con scripts/deploy-vps.sh.
src/entities: entidades TypeORM mapeadas 1:1 a tablas existentes.src/modules/*/dto: DTOs y contratos de validación (class-validator) por módulo.src/shared/redis: servicio Redis global (opcional).docs/migracion: guÃas por fase (infra, entidades, DTOs, próximos módulos).
- Desarrollo activo:
develop. - Rama de release/produccion:
main. - Cada avance se trabaja en ramas feature cortas desde
developy se mergea con PR/FF.
- Completar health y conexión DB/Redis en entornos reales.
- Migrar módulos en orden: Analytics/Contactos → Reclamos → Encuesta+Redis → Notificaciones → Impuestos → BotConfig/Feedback/Votante → Amelia → Farmacias/Duty.
- Añadir autenticación JWT+roles y API keys para bot/webhooks al iniciar la migración de módulos.
- Pruebas de paridad E2E contra el legacy en cada módulo antes de mover tráfico.
UNLICENSED (se definirá al hacer público el repo).