# FASE 3: PLAN DE IMPLEMENTACIÓN DETALLADO
**Fecha:** 2025-12-18
**Perfil:** Requirements-Analyst
**Proyecto:** GAMILIT
---
## VARIABLES DE ENTORNO
```bash
ORIGEN="/home/isem/workspace/projects/gamilit"
DESTINO="/home/isem/workspace-old/wsl-ubuntu/workspace/workspace-gamilit/gamilit/projects/gamilit"
```
---
## SPRINT 0: MITIGACIÓN DE SEGURIDAD (INMEDIATO)
### S0-T1: Eliminar Credenciales Expuestas
**Prioridad:** CRÍTICA
**Duración Estimada:** 5 minutos
```bash
# Eliminar archivo con credenciales expuestas
rm -f "${DESTINO}/apps/database/scripts/README-VALIDATION-SCRIPTS.md"
# Verificar eliminación
ls -la "${DESTINO}/apps/database/scripts/README-VALIDATION-SCRIPTS.md" 2>/dev/null && echo "ERROR: Archivo no eliminado" || echo "OK: Archivo eliminado"
```
**Validación:**
- [ ] Archivo README-VALIDATION-SCRIPTS.md eliminado
- [ ] No aparece en `git status`
### S0-T2: Cambiar Contraseña Comprometida
**Prioridad:** CRÍTICA
**Duración Estimada:** 15 minutos
**Contraseña comprometida:** `C5hq7253pdVyVKUC`
**Acciones:**
1. Acceder a Supabase Dashboard / PostgreSQL Admin
2. Cambiar contraseña del usuario `gamilit_user`
3. Actualizar en secrets/environment variables
4. Verificar conexión con nueva contraseña
**Validación:**
- [ ] Contraseña antigua NO funciona
- [ ] Nueva contraseña funciona
- [ ] Aplicaciones reconectan correctamente
---
## SPRINT 1: SINCRONIZACIÓN BACKEND (P0 - CRÍTICO)
### S1-T1: Sincronizar PasswordRecoveryService
**Prioridad:** CRÍTICA (Seguridad de sesiones)
**Duración Estimada:** 10 minutos
```bash
# Copiar servicio actualizado
cp "${ORIGEN}/apps/backend/src/modules/auth/services/password-recovery.service.ts" \
"${DESTINO}/apps/backend/src/modules/auth/services/password-recovery.service.ts"
```
**Dependencias a verificar:**
```bash
# Verificar que SessionManagementService existe en DESTINO
grep -r "SessionManagementService" "${DESTINO}/apps/backend/src/modules/auth/"
```
**Validación:**
- [ ] Archivo copiado correctamente
- [ ] SessionManagementService importado
- [ ] revokeAllSessions implementado
- [ ] TypeScript compila sin errores
### S1-T2: Sincronizar EmailVerificationService
**Prioridad:** CRÍTICA (Funcionalidad de email)
**Duración Estimada:** 10 minutos
```bash
# Copiar servicio actualizado
cp "${ORIGEN}/apps/backend/src/modules/auth/services/email-verification.service.ts" \
"${DESTINO}/apps/backend/src/modules/auth/services/email-verification.service.ts"
```
**Dependencias a verificar:**
```bash
# Verificar que MailService existe en DESTINO
grep -r "MailService" "${DESTINO}/apps/backend/src/modules/"
```
**Validación:**
- [ ] Archivo copiado correctamente
- [ ] MailService inyectado (no comentado)
- [ ] Logger implementado
- [ ] TypeScript compila sin errores
### S1-T3: Sincronizar ExerciseSubmissionService
**Prioridad:** MEDIA (Logging estructurado)
**Duración Estimada:** 10 minutos
```bash
# Copiar servicio actualizado
cp "${ORIGEN}/apps/backend/src/modules/progress/services/exercise-submission.service.ts" \
"${DESTINO}/apps/backend/src/modules/progress/services/exercise-submission.service.ts"
```
**Validación:**
- [ ] Archivo copiado correctamente
- [ ] Logger declarado en clase
- [ ] Todos los console.* reemplazados por logger.*
- [ ] TypeScript compila sin errores
### S1-T4: Verificar Compilación Backend
**Prioridad:** ALTA
**Duración Estimada:** 5 minutos
```bash
cd "${DESTINO}/apps/backend"
npm run build
```
**Validación:**
- [ ] Build completa sin errores
- [ ] Sin warnings de TypeScript
---
## SPRINT 2: CORRECCIONES FRONTEND (P0 - CRÍTICO)
### S2-T1: Agregar Caso Emparejamiento a ExerciseContentRenderer
**Prioridad:** CRÍTICA (Regresión funcional)
**Duración Estimada:** 15 minutos
**Opción A: Copiar archivo completo de DESTINO**
```bash
# El DESTINO tiene la versión más completa
cp "${DESTINO}/apps/frontend/src/shared/components/mechanics/ExerciseContentRenderer.tsx" \
"${ORIGEN}/apps/frontend/src/shared/components/mechanics/ExerciseContentRenderer.tsx"
```
**Opción B: Merge manual (si hay otros cambios en ORIGEN)**
Agregar en ORIGEN el siguiente caso (aproximadamente línea 67):
```typescript
case 'emparejamiento':
return (
);
```
**Dependencia a verificar:**
```bash
# Verificar que EmparejamientoRenderer existe y se exporta
grep -r "EmparejamientoRenderer" "${ORIGEN}/apps/frontend/src/"
```
**Validación:**
- [ ] Caso 'emparejamiento' existe en switch
- [ ] EmparejamientoRenderer se importa correctamente
- [ ] TypeScript compila sin errores
### S2-T2: Agregar Error Handling a passwordAPI.ts
**Prioridad:** ALTA
**Duración Estimada:** 10 minutos
**Copiar versión con error handling:**
```bash
cp "${DESTINO}/apps/frontend/src/services/api/passwordAPI.ts" \
"${ORIGEN}/apps/frontend/src/services/api/passwordAPI.ts"
```
**O agregar manualmente handleAPIError a cada método:**
```typescript
import { handleAPIError } from '@/shared/utils/errors';
requestPasswordReset: async (email: string): Promise => {
try {
const response = await apiClient.post('/auth/reset-password/request', { email });
return response.data;
} catch (error) {
throw handleAPIError(error);
}
}
```
**Validación:**
- [ ] Todos los métodos tienen try-catch
- [ ] handleAPIError se importa correctamente
- [ ] TypeScript compila sin errores
### S2-T3: Agregar Error Handling a profileAPI.ts
**Prioridad:** ALTA
**Duración Estimada:** 10 minutos
```bash
cp "${DESTINO}/apps/frontend/src/services/api/profileAPI.ts" \
"${ORIGEN}/apps/frontend/src/services/api/profileAPI.ts"
```
**Validación:**
- [ ] Todos los métodos (5) tienen try-catch
- [ ] handleAPIError se importa correctamente
### S2-T4: Agregar Error Handling a missionsAPI.ts
**Prioridad:** ALTA
**Duración Estimada:** 10 minutos
```bash
cp "${DESTINO}/apps/frontend/src/services/api/missionsAPI.ts" \
"${ORIGEN}/apps/frontend/src/services/api/missionsAPI.ts"
```
**Validación:**
- [ ] Todos los métodos (5) tienen try-catch
- [ ] handleAPIError se importa correctamente
### S2-T5: Verificar Compilación Frontend
**Prioridad:** ALTA
**Duración Estimada:** 5 minutos
```bash
cd "${ORIGEN}/apps/frontend"
npm run build
```
**Validación:**
- [ ] Build completa sin errores
- [ ] Sin warnings de TypeScript
---
## SPRINT 3: SINCRONIZACIÓN COMPONENTES TEACHER PORTAL (P1)
### S3-T1: Sincronizar Componentes de Grading
```bash
# Copiar RubricEvaluator.tsx de ORIGEN a DESTINO
cp "${ORIGEN}/apps/frontend/src/apps/teacher/components/grading/RubricEvaluator.tsx" \
"${DESTINO}/apps/frontend/src/apps/teacher/components/grading/RubricEvaluator.tsx"
# Copiar index.ts de ORIGEN a DESTINO
cp "${ORIGEN}/apps/frontend/src/apps/teacher/components/grading/index.ts" \
"${DESTINO}/apps/frontend/src/apps/teacher/components/grading/index.ts"
```
### S3-T2: Sincronizar Hooks de Teacher
```bash
# Hooks con mejor formato en DESTINO - copiar de DESTINO a ORIGEN
cp "${DESTINO}/apps/frontend/src/apps/teacher/hooks/useMasteryTracking.ts" \
"${ORIGEN}/apps/frontend/src/apps/teacher/hooks/useMasteryTracking.ts"
cp "${DESTINO}/apps/frontend/src/apps/teacher/hooks/useMissionStats.ts" \
"${ORIGEN}/apps/frontend/src/apps/teacher/hooks/useMissionStats.ts"
# Hook con formato compacto en ORIGEN - copiar de ORIGEN a DESTINO
cp "${ORIGEN}/apps/frontend/src/apps/teacher/hooks/useClassroomRealtime.ts" \
"${DESTINO}/apps/frontend/src/apps/teacher/hooks/useClassroomRealtime.ts"
```
### S3-T3: Sincronizar ResponseDetailModal
```bash
# Copiar de ORIGEN a DESTINO (versión principal)
cp "${ORIGEN}/apps/frontend/src/apps/teacher/components/responses/ResponseDetailModal.tsx" \
"${DESTINO}/apps/frontend/src/apps/teacher/components/responses/ResponseDetailModal.tsx"
```
---
## SPRINT 4: LIMPIEZA DATABASE SCRIPTS (P2)
### S4-T1: Eliminar Directorio Deprecated
```bash
rm -rf "${DESTINO}/apps/database/scripts/deprecated/"
```
**Validación:**
- [ ] Directorio deprecated/ no existe
- [ ] Scripts v1, v2 eliminados
### S4-T2: Eliminar Directorios Vacíos
```bash
rm -rf "${DESTINO}/apps/database/scripts/backup/"
rm -rf "${DESTINO}/apps/database/scripts/restore/"
rm -rf "${DESTINO}/apps/database/scripts/utilities/"
```
### S4-T3: Crear Estructura validations/ en DESTINO
```bash
# Crear directorio si no existe
mkdir -p "${DESTINO}/apps/database/scripts/validations/"
# Copiar contenido de validations/ de ORIGEN
cp -r "${ORIGEN}/apps/database/scripts/validations/"* \
"${DESTINO}/apps/database/scripts/validations/"
```
### S4-T4: Eliminar Scripts SQL Dispersos de Raíz
```bash
# Eliminar archivos que ahora están en validations/
cd "${DESTINO}/apps/database/scripts/"
rm -f validate-gap-fixes.sql
rm -f validate-generate-alerts-joins.sql
rm -f validate-missions-objectives-structure.sql
rm -f validate-seeds-integrity.sql
rm -f validate-update-user-rank-fix.sql
rm -f validate-user-initialization.sql
rm -f VALIDACIONES-RAPIDAS-POST-RECREACION.sql
rm -f validate_integrity.py
rm -f VALIDACION-RAPIDA-RECREACION-2025-11-24.sql
rm -f apply-maya-ranks-v2.1.sql
rm -f README-SETUP.md
```
### S4-T5: Copiar Scripts y Docs Nuevos
```bash
# Copiar scripts de deployment nuevos
cp "${ORIGEN}/scripts/setup-ssl-certbot.sh" "${DESTINO}/scripts/"
cp "${ORIGEN}/scripts/validate-deployment.sh" "${DESTINO}/scripts/"
# Actualizar README.md de scripts
cp "${ORIGEN}/scripts/README.md" "${DESTINO}/scripts/"
```
---
## SPRINT 5: SINCRONIZACIÓN FINAL Y DOCUMENTACIÓN (P3)
### S5-T1: Sincronizar Archivos de Raíz
```bash
# Mover CODEOWNERS a .github
mkdir -p "${DESTINO}/.github/"
mv "${DESTINO}/CODEOWNERS" "${DESTINO}/.github/CODEOWNERS" 2>/dev/null || true
# Copiar archivos actualizados de raíz
cp "${ORIGEN}/ecosystem.config.js" "${DESTINO}/"
cp "${ORIGEN}/package.json" "${DESTINO}/"
cp "${ORIGEN}/package-lock.json" "${DESTINO}/"
```
### S5-T2: Sincronizar Nueva Documentación
```bash
# Crear directorios de documentación nuevos
mkdir -p "${DESTINO}/docs/90-transversal/arquitectura/especificaciones/"
mkdir -p "${DESTINO}/docs/90-transversal/migraciones/"
mkdir -p "${DESTINO}/docs/database/functions/"
mkdir -p "${DESTINO}/docs/frontend/admin/"
mkdir -p "${DESTINO}/docs/frontend/guides/"
mkdir -p "${DESTINO}/docs/frontend/teacher/"
# Copiar guías de deployment
cp "${ORIGEN}/docs/95-guias-desarrollo/GUIA-DEPLOYMENT-RAPIDO.md" "${DESTINO}/docs/95-guias-desarrollo/" 2>/dev/null || true
cp "${ORIGEN}/docs/95-guias-desarrollo/GUIA-SSL-CERTBOT-DEPLOYMENT.md" "${DESTINO}/docs/95-guias-desarrollo/" 2>/dev/null || true
```
### S5-T3: Limpiar Archivos Obsoletos de Database
```bash
cd "${DESTINO}/apps/database/"
# Eliminar scripts Python temporales
rm -f analyze-image-complete.py
rm -f complete-crossword-design.py
rm -f crossword-final-correct.py
rm -f crossword-from-image-final.py
rm -f exact-coordinates-layout.py
rm -f final-correct-layout.py
rm -f map-exact-from-image.py
rm -f map-image-exact-v2.py
rm -f sync-prod-dev.py
rm -f validate-final-from-db.py
rm -f verify-unification.py
# Eliminar logs de creación
rm -f create-database-*.log
# Eliminar archivos .env de credenciales (SEGURIDAD)
rm -f .env.database
rm -f .env.dev
rm -f database-credentials-dev.txt
# Eliminar documentos históricos
rm -f CHANGELOG-PERFECT-SCORES.md
rm -f DATABASE-RECREATION-SUCCESS-2025-11-24.txt
rm -f INDEX-RECREACION-BD-2025-11-24.md
rm -f README-RECREACION-2025-11-24.md
rm -f RESUMEN-EJECUTIVO-RECREACION-BD.md
rm -f TEACHER-REPORTS-VISUAL-SCHEMA.txt
rm -f VISUAL-DIFF-INITIALIZE-MISSIONS-2025-11-24.md
# Eliminar directorio migrations obsoleto
rm -rf migrations/
```
### S5-T4: Reinstalar Dependencias
```bash
cd "${DESTINO}"
npm install
cd "${DESTINO}/apps/backend"
npm install
cd "${DESTINO}/apps/frontend"
npm install
```
---
## VALIDACIONES FINALES
### V1: Verificar Compilación Completa
```bash
cd "${DESTINO}"
# Backend
cd apps/backend && npm run build && cd ../..
# Frontend
cd apps/frontend && npm run build && cd ../..
echo "✅ Compilación completa exitosa"
```
### V2: Ejecutar Tests
```bash
cd "${DESTINO}"
# Backend tests
cd apps/backend && npm run test && cd ../..
# Frontend tests
cd apps/frontend && npm run test && cd ../..
echo "✅ Tests pasaron exitosamente"
```
### V3: Verificar Archivos Eliminados
```bash
# Verificar que credenciales fueron eliminadas
test ! -f "${DESTINO}/apps/database/scripts/README-VALIDATION-SCRIPTS.md" && echo "✅ README-VALIDATION-SCRIPTS.md eliminado"
test ! -f "${DESTINO}/apps/database/database-credentials-dev.txt" && echo "✅ database-credentials-dev.txt eliminado"
test ! -f "${DESTINO}/apps/database/.env.database" && echo "✅ .env.database eliminado"
test ! -f "${DESTINO}/apps/database/.env.dev" && echo "✅ .env.dev eliminado"
# Verificar deprecated eliminado
test ! -d "${DESTINO}/apps/database/scripts/deprecated" && echo "✅ deprecated/ eliminado"
```
### V4: Verificar Estructura Nueva
```bash
# Verificar validations/ existe y tiene contenido
test -d "${DESTINO}/apps/database/scripts/validations" && echo "✅ validations/ existe"
ls "${DESTINO}/apps/database/scripts/validations/" | wc -l
```
---
## CHECKLIST DE IMPLEMENTACIÓN
### Sprint 0 - Seguridad
- [ ] README-VALIDATION-SCRIPTS.md eliminado
- [ ] Contraseña comprometida cambiada
- [ ] Nuevas credenciales funcionando
### Sprint 1 - Backend
- [ ] PasswordRecoveryService sincronizado
- [ ] EmailVerificationService sincronizado
- [ ] ExerciseSubmissionService sincronizado
- [ ] Backend compila sin errores
### Sprint 2 - Frontend Crítico
- [ ] Caso emparejamiento agregado a ExerciseContentRenderer
- [ ] Error handling en passwordAPI
- [ ] Error handling en profileAPI
- [ ] Error handling en missionsAPI
- [ ] Frontend compila sin errores
### Sprint 3 - Teacher Portal
- [ ] RubricEvaluator sincronizado
- [ ] Hooks teacher sincronizados
- [ ] ResponseDetailModal sincronizado
### Sprint 4 - Database Scripts
- [ ] deprecated/ eliminado
- [ ] Directorios vacíos eliminados
- [ ] validations/ creado y poblado
- [ ] Scripts dispersos eliminados
### Sprint 5 - Limpieza Final
- [ ] CODEOWNERS movido a .github/
- [ ] Scripts Python temporales eliminados
- [ ] Logs y archivos históricos eliminados
- [ ] Archivos .env eliminados
- [ ] Dependencias reinstaladas
### Validaciones
- [ ] Compilación backend OK
- [ ] Compilación frontend OK
- [ ] Tests backend OK
- [ ] Tests frontend OK
- [ ] Sin archivos de credenciales
---
## ROLLBACK PLAN
En caso de problemas, revertir usando git:
```bash
cd "${DESTINO}"
git checkout .
git clean -fd
```
O restaurar desde backup si existe:
```bash
# Si hay backup previo
cp -r "${BACKUP_DIR}/gamilit/"* "${DESTINO}/"
```
---
**Estado:** FASE 3 COMPLETADA
**Siguiente Acción:** Proceder a FASE 4 - Validación de Dependencias