# SA-BACKEND-002: Análisis de Dependencias - Migración Backend **Fecha:** 2025-11-02 **Analista:** SA-BACKEND-002 **Estado:** Completado --- ## 1. RESUMEN EJECUTIVO ### Cambio de Stack Tecnológico Detectado **CRÍTICO:** Se detectó una migración de arquitectura: - **ORIGEN:** Express.js (arquitectura tradicional) - **DESTINO:** NestJS (framework estructurado sobre Express) ### Estadísticas Generales - **Dependencies ORIGEN:** 15 paquetes - **Dependencies DESTINO:** 15 paquetes - **DevDependencies ORIGEN:** 24 paquetes - **DevDependencies DESTINO:** 16 paquetes --- ## 2. TABLA COMPARATIVA DE DEPENDENCIES | Dependencia | Versión ORIGEN | Versión DESTINO | Estado | Observaciones | |-------------|----------------|-----------------|--------|---------------| | **@nestjs/config** | - | ^4.0.2 | NUEVA | NestJS: Gestión de configuración | | **@nestjs/jwt** | - | ^11.0.1 | NUEVA | NestJS: Autenticación JWT | | **@nestjs/passport** | - | ^11.0.5 | NUEVA | NestJS: Integración Passport | | **@nestjs/swagger** | - | ^11.2.1 | NUEVA | NestJS: Documentación API (reemplaza swagger-jsdoc) | | **@nestjs/typeorm** | - | ^11.0.0 | NUEVA | NestJS: ORM integration | | **@types/node-cron** | ^3.0.11 | - | FALTANTE | Tipado para node-cron | | **@types/socket.io** | ^3.0.1 | - | FALTANTE | Tipado para socket.io | | **bcryptjs** | ^2.4.3 | - | FALTANTE | Hash de contraseñas (reemplazado por bcrypt) | | **bcrypt** | - | ^5.1.1 | NUEVA | Hash de contraseñas (reemplazo de bcryptjs) | | **class-transformer** | - | ^0.5.1 | NUEVA | NestJS: Transformación de objetos | | **class-validator** | - | ^0.14.0 | NUEVA | NestJS: Validación de DTOs | | **compression** | - | ^1.7.4 | NUEVA | Compresión HTTP | | **cors** | ^2.8.5 | ^2.8.5 | ✓ IGUAL | Middleware CORS | | **dotenv** | ^16.3.1 | ^16.3.1 | ✓ IGUAL | Variables de entorno | | **express** | ^4.18.2 | ^4.18.2 | ✓ IGUAL | Framework HTTP (base de NestJS) | | **express-rate-limit** | - | ^7.1.5 | NUEVA | Rate limiting | | **helmet** | ^7.1.0 | ^7.1.0 | ✓ IGUAL | Seguridad HTTP headers | | **joi** | ^17.11.0 | ^18.0.1 | ACTUALIZADO | Validación de esquemas | | **jsonwebtoken** | ^9.0.2 | ^9.0.2 | ✓ IGUAL | Tokens JWT | | **node-cron** | ^4.2.1 | - | FALTANTE | Tareas programadas | | **passport** | - | ^0.7.0 | NUEVA | Estrategias de autenticación | | **pg** | ^8.11.3 | ^8.11.3 | ✓ IGUAL | Driver PostgreSQL | | **socket.io** | ^4.8.1 | - | FALTANTE | WebSockets en tiempo real | | **swagger-jsdoc** | ^6.2.8 | - | FALTANTE | Documentación Swagger (reemplazado por @nestjs/swagger) | | **swagger-ui-express** | ^5.0.1 | - | FALTANTE | UI Swagger (integrado en @nestjs/swagger) | | **winston** | ^3.11.0 | ^3.18.3 | ACTUALIZADO | Sistema de logging | | **zod** | ^3.22.4 | - | FALTANTE | Validación y tipado | --- ## 3. TABLA COMPARATIVA DE DEVDEPENDENCIES | Dependencia | Versión ORIGEN | Versión DESTINO | Estado | Observaciones | |-------------|----------------|-----------------|--------|---------------| | **@types/bcryptjs** | ^2.4.6 | - | FALTANTE | Reemplazado por @types/bcrypt | | **@types/bcrypt** | - | ^5.0.2 | NUEVA | Tipado para bcrypt | | **@types/compression** | - | ^1.7.5 | NUEVA | Tipado para compression | | **@types/cors** | ^2.8.17 | ^2.8.17 | ✓ IGUAL | Tipado para cors | | **@types/express** | ^4.17.21 | ^4.17.21 | ✓ IGUAL | Tipado para Express | | **@types/jest** | ^30.0.0 | ^29.5.11 | DESACTUALIZADO | ORIGEN más reciente | | **@types/jsonwebtoken** | ^9.0.5 | ^9.0.5 | ✓ IGUAL | Tipado para JWT | | **@types/node** | ^20.10.6 | ^20.10.0 | SIMILAR | Versión de Node.js | | **@types/pg** | ^8.10.9 | ^8.10.9 | ✓ IGUAL | Tipado para PostgreSQL | | **@types/supertest** | ^6.0.3 | - | FALTANTE | Testing HTTP | | **@types/swagger-jsdoc** | ^6.0.4 | - | FALTANTE | No necesario en NestJS | | **@types/swagger-ui-express** | ^4.1.8 | - | FALTANTE | No necesario en NestJS | | **@typescript-eslint/eslint-plugin** | ^8.46.2 | ^6.15.0 | DESACTUALIZADO | ORIGEN más reciente | | **@typescript-eslint/parser** | ^8.46.2 | ^6.15.0 | DESACTUALIZADO | ORIGEN más reciente | | **cross-env** | ^10.1.0 | - | FALTANTE | Variables de entorno cross-platform | | **dotenv-cli** | ^11.0.0 | - | FALTANTE | CLI para dotenv | | **eslint** | ^8.56.0 | ^8.56.0 | ✓ IGUAL | Linting | | **eslint-config-airbnb-typescript** | - | ^17.1.0 | NUEVA | Configuración ESLint | | **eslint-plugin-import** | ^2.32.0 | - | FALTANTE | Plugin ESLint para imports | | **eslint-plugin-security** | ^3.0.1 | - | FALTANTE | Plugin ESLint seguridad | | **jest** | ^30.2.0 | ^29.7.0 | DESACTUALIZADO | ORIGEN más reciente | | **nodemon** | ^3.0.2 | - | FALTANTE | Reemplazado por ts-node-dev | | **prettier** | ^3.1.1 | ^3.1.1 | ✓ IGUAL | Formateo de código | | **supertest** | ^7.1.4 | - | FALTANTE | Testing HTTP | | **ts-jest** | ^29.4.5 | ^29.1.1 | ACTUALIZADO | ORIGEN más reciente | | **ts-node** | ^10.9.2 | ^10.9.2 | ✓ IGUAL | Ejecución TypeScript | | **ts-node-dev** | - | ^2.0.0 | NUEVA | Hot reload para desarrollo | | **typescript** | ^5.3.3 | ^5.3.3 | ✓ IGUAL | Compilador TypeScript | --- ## 4. DEPENDENCIAS FALTANTES CRÍTICAS ### 4.1 ALTA PRIORIDAD - Funcionalidad Crítica #### **socket.io** (^4.8.1) - **Impacto:** CRÍTICO - **Uso en ORIGEN:** Comunicación en tiempo real, eventos WebSocket - **Estado en DESTINO:** NO IMPLEMENTADO - **Análisis:** - Si el sistema ORIGEN usa WebSockets para notificaciones, chat, o actualizaciones en tiempo real - **DECISIÓN REQUERIDA:** ¿Se necesita funcionalidad en tiempo real en el nuevo sistema? - **Alternativas NestJS:** - `@nestjs/websockets` - `@nestjs/platform-socket.io` #### **node-cron** (^4.2.1) - **Impacto:** ALTO - **Uso en ORIGEN:** Tareas programadas (backups, limpieza, reportes) - **Estado en DESTINO:** NO IMPLEMENTADO - **Análisis:** - Tareas cron para mantenimiento automático - **DECISIÓN REQUERIDA:** ¿Se requieren tareas programadas? - **Alternativas NestJS:** - `@nestjs/schedule` (recomendado para NestJS) #### **zod** (^3.22.4) - **Impacto:** MEDIO-ALTO - **Uso en ORIGEN:** Validación de schemas y runtime type checking - **Estado en DESTINO:** Reemplazado por `class-validator` - **Análisis:** - NestJS usa `class-validator` + `class-transformer` (arquitectura decoradores) - **ACCIÓN:** NO REQUERIDO - Funcionalidad cubierta por stack NestJS ### 4.2 PRIORIDAD MEDIA - Documentación y Testing #### **swagger-jsdoc** (^6.2.8) + **swagger-ui-express** (^5.0.1) - **Impacto:** MEDIO - **Uso en ORIGEN:** Documentación API OpenAPI/Swagger - **Estado en DESTINO:** Reemplazado por `@nestjs/swagger` - **Análisis:** - `@nestjs/swagger` proporciona generación automática de docs - **ACCIÓN:** NO REQUERIDO - Funcionalidad cubierta #### **supertest** (^7.1.4) + **@types/supertest** (^6.0.3) - **Impacto:** MEDIO - **Uso en ORIGEN:** Testing de endpoints HTTP - **Estado en DESTINO:** NO PRESENTE - **Análisis:** - Necesario para tests e2e completos - **ACCIÓN:** INSTALAR SI SE IMPLEMENTAN TESTS E2E ### 4.3 PRIORIDAD BAJA - Herramientas de Desarrollo #### **cross-env** (^10.1.0) - **Impacto:** BAJO - **Uso en ORIGEN:** Variables de entorno cross-platform - **Estado en DESTINO:** NO PRESENTE - **Análisis:** - Útil para compatibilidad Windows/Linux/Mac - NestJS puede usar directamente `dotenv` - **ACCIÓN:** OPCIONAL - Útil para equipos multiplataforma #### **dotenv-cli** (^11.0.0) - **Impacto:** BAJO - **Uso en ORIGEN:** CLI para cargar archivos .env - **Estado en DESTINO:** NO PRESENTE - **Análisis:** - DESTINO usa `ts-node-dev` que puede cargar .env - **ACCIÓN:** OPCIONAL #### **eslint-plugin-security** (^3.0.1) - **Impacto:** BAJO-MEDIO - **Uso en ORIGEN:** Análisis de seguridad estático - **Estado en DESTINO:** NO PRESENTE - **Análisis:** - Detecta patrones de código inseguros - **ACCIÓN:** RECOMENDADO INSTALAR --- ## 5. DEPENDENCIAS REEMPLAZADAS (Cambio de Stack) ### bcryptjs → bcrypt - **Razón:** `bcrypt` es más performante (implementación nativa) - **Impacto:** Cambio de API menor - **Acción:** Migración de código requerida ### joi (^17.11.0 → ^18.0.1) - **Razón:** Actualización de versión - **Impacto:** Bajo (cambios menores) - **Nota:** NestJS prefiere `class-validator` pero joi puede coexistir ### winston (^3.11.0 → ^3.18.3) - **Razón:** Actualización de versión - **Impacto:** Ninguno (compatible) --- ## 6. NUEVAS DEPENDENCIAS NESTJS ### Dependencias Core NestJS ```json "@nestjs/config": "^4.0.2", // Gestión de configuración "@nestjs/jwt": "^11.0.1", // JWT authentication "@nestjs/passport": "^11.0.5", // Passport strategies "@nestjs/swagger": "^11.2.1", // API documentation "@nestjs/typeorm": "^11.0.0" // ORM integration ``` ### Dependencias de Validación y Transformación ```json "class-transformer": "^0.5.1", // Transformación de objetos "class-validator": "^0.14.0" // Validación mediante decoradores ``` ### Dependencias de Seguridad y Performance ```json "compression": "^1.7.4", // Compresión HTTP "express-rate-limit": "^7.1.5", // Rate limiting "passport": "^0.7.0" // Base para estrategias auth ``` --- ## 7. ANÁLISIS DE IMPACTO Y RIESGOS ### 7.1 Riesgos CRÍTICOS #### ⚠️ Funcionalidad WebSocket No Migrada - **Dependencia:** socket.io - **Riesgo:** Si el sistema ORIGEN tiene comunicación en tiempo real, esta funcionalidad está perdida - **Mitigación:** Implementar `@nestjs/websockets` o `@nestjs/platform-socket.io` #### ⚠️ Tareas Programadas No Implementadas - **Dependencia:** node-cron - **Riesgo:** Tareas automáticas (backups, limpieza) no se ejecutarán - **Mitigación:** Implementar `@nestjs/schedule` ### 7.2 Riesgos MEDIOS #### ⚠️ Testing HTTP Incompleto - **Dependencia:** supertest - **Riesgo:** No hay tests e2e completos - **Mitigación:** Instalar supertest para tests e2e #### ⚠️ Análisis de Seguridad Estático - **Dependencia:** eslint-plugin-security - **Riesgo:** No se detectan patrones inseguros - **Mitigación:** Instalar plugin de seguridad ### 7.3 Diferencias de Versiones #### Herramientas de Testing Desactualizadas en DESTINO ``` ORIGEN: jest@^30.2.0, @types/jest@^30.0.0 DESTINO: jest@^29.7.0, @types/jest@^29.5.11 ``` **Recomendación:** Actualizar a versiones más recientes #### ESLint Tools Desactualizados en DESTINO ``` ORIGEN: @typescript-eslint/*@^8.46.2 DESTINO: @typescript-eslint/*@^6.15.0 ``` **Recomendación:** Actualizar a v8+ para mejor análisis --- ## 8. RECOMENDACIONES DE INSTALACIÓN ### 8.1 INSTALACIÓN INMEDIATA (Funcionalidad Crítica) ```bash # Si se requiere WebSockets npm install @nestjs/websockets @nestjs/platform-socket.io socket.io # Si se requieren tareas programadas npm install @nestjs/schedule npm install -D @types/cron # Testing HTTP completo npm install -D supertest @types/supertest ``` ### 8.2 INSTALACIÓN RECOMENDADA (Seguridad y Calidad) ```bash # Análisis de seguridad npm install -D eslint-plugin-security # Actualizar herramientas de testing npm install -D jest@^30.2.0 @types/jest@^30.0.0 ts-jest@^29.4.5 # Actualizar ESLint tools npm install -D @typescript-eslint/eslint-plugin@^8.46.2 @typescript-eslint/parser@^8.46.2 # Herramientas cross-platform npm install -D cross-env ``` ### 8.3 INSTALACIÓN OPCIONAL (Comodidad) ```bash # Imports plugin para ESLint npm install -D eslint-plugin-import # CLI dotenv para scripts npm install -D dotenv-cli ``` --- ## 9. MATRIZ DE DECISIÓN | Funcionalidad | Dependencia ORIGEN | Estado DESTINO | Decisión Requerida | Prioridad | |---------------|-------------------|----------------|-------------------|-----------| | **WebSockets** | socket.io | ❌ NO | ¿Se necesita comunicación en tiempo real? | 🔴 CRÍTICA | | **Tareas Cron** | node-cron | ❌ NO | ¿Se necesitan tareas programadas? | 🔴 CRÍTICA | | **Validación** | zod | ✅ class-validator | Funcionalidad cubierta | ✅ OK | | **Documentación API** | swagger-jsdoc/ui | ✅ @nestjs/swagger | Funcionalidad cubierta | ✅ OK | | **Hashing** | bcryptjs | ✅ bcrypt | Migración de código requerida | 🟡 MEDIA | | **Testing E2E** | supertest | ❌ NO | Recomendado para tests completos | 🟡 MEDIA | | **Seguridad Estática** | eslint-plugin-security | ❌ NO | Recomendado | 🟢 BAJA | --- ## 10. PASOS SIGUIENTES ### Fase 1: Validación de Requisitos - [ ] Validar si el sistema ORIGEN usa WebSockets (socket.io) - Buscar archivos que importan socket.io - Identificar eventos y handlers - [ ] Validar si el sistema ORIGEN usa tareas programadas (node-cron) - Buscar archivos que importan node-cron - Identificar tareas y horarios - [ ] Revisar uso de zod vs class-validator en código actual ### Fase 2: Instalación de Dependencias Críticas - [ ] Instalar dependencias según matriz de decisión - [ ] Actualizar package.json de DESTINO - [ ] Actualizar lockfile (package-lock.json) ### Fase 3: Migración de Código - [ ] Migrar bcryptjs → bcrypt - [ ] Migrar socket.io → @nestjs/websockets (si aplica) - [ ] Migrar node-cron → @nestjs/schedule (si aplica) - [ ] Migrar validaciones zod → class-validator ### Fase 4: Testing y Validación - [ ] Configurar supertest para tests e2e - [ ] Validar funcionamiento de todas las dependencias - [ ] Ejecutar suite de tests completa --- ## 11. COMANDOS DE INSTALACIÓN CONSOLIDADOS ### Opción A: Instalación Completa (Todas las funcionalidades) ```bash cd /home/isem/workspace/workspace-gamilit/gamilit/projects/gamilit/apps/backend # Dependencies npm install @nestjs/websockets @nestjs/platform-socket.io @nestjs/schedule socket.io # DevDependencies npm install -D supertest @types/supertest \ eslint-plugin-security eslint-plugin-import \ cross-env dotenv-cli \ jest@^30.2.0 @types/jest@^30.0.0 ts-jest@^29.4.5 \ @typescript-eslint/eslint-plugin@^8.46.2 @typescript-eslint/parser@^8.46.2 ``` ### Opción B: Instalación Mínima (Solo crítico) ```bash cd /home/isem/workspace/workspace-gamilit/gamilit/projects/gamilit/apps/backend # Si WebSockets es requerido npm install @nestjs/websockets @nestjs/platform-socket.io socket.io # Si tareas programadas son requeridas npm install @nestjs/schedule # Testing básico npm install -D supertest @types/supertest ``` --- ## 12. CONCLUSIONES ### ✅ Aspectos Positivos 1. **Migración Limpia a NestJS:** Stack moderno y estructurado 2. **Dependencias Core Mantenidas:** pg, express, cors, helmet, winston 3. **Mejoras de Seguridad:** express-rate-limit, compression 4. **Validación Mejorada:** class-validator + class-transformer ### ⚠️ Puntos de Atención 1. **WebSockets:** Requiere validación de uso y posible instalación 2. **Tareas Programadas:** Requiere validación de uso y posible instalación 3. **Testing:** Falta supertest para tests e2e completos 4. **Versiones:** Algunas herramientas de desarrollo están desactualizadas ### 📋 Tareas Pendientes 1. Validar uso de socket.io en código ORIGEN 2. Validar uso de node-cron en código ORIGEN 3. Decidir sobre instalación de dependencias opcionales 4. Actualizar herramientas de desarrollo a versiones recientes 5. Implementar tests e2e con supertest --- **Análisis completado por:** SA-BACKEND-002 **Próximo paso:** SA-BACKEND-003 (Análisis de estructura de código)