Database: - Actualizar backups de producción (usuarios, perfiles, stats) Orchestration: - Añadir análisis errores producción 2025-12-18 - Actualizar análisis teacher portal - Añadir reportes de migración y producción 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
9.8 KiB
FASE 1: Plan de Análisis Detallado - Errores Producción
Fecha: 2025-12-18 Proyecto: Gamilit Ambiente: Producción (https://74.208.126.102:3006) Analista: Requirement Analyst
1. RESUMEN EJECUTIVO DE ERRORES
| # | Endpoint | Error | Mensaje |
|---|---|---|---|
| 1 | GET /notifications/unread-count | 500 | gamification_system.notifications does not exist |
| 2 | GET /gamification/ranks/current | 404 | Resource not found |
| 3 | GET /gamification/users/{id}/ml-coins | 404 | Resource not found |
| 4 | GET /progress/users/{id}/summary | 500 | progress_tracking.module_progress does not exist |
| 5 | GET /gamification/ranks/users/{id}/rank-progress | 404 | Resource not found |
| 6 | GET /gamification/missions/daily | 400 | Bad Request |
| 7 | GET /gamification/missions/weekly | 400 | Bad Request |
| 8 | GET /progress/users/{id}/recent-activities | 500 | progress_tracking.module_progress does not exist |
| 9 | GET /educational/modules/user/{id} | 500 | educational_content.modules does not exist |
2. DIAGNÓSTICO PRINCIPAL
2.1 Hallazgo Crítico
TODAS LAS TABLAS EXISTEN EN EL DDL DEL REPOSITORIO.
El problema raíz es que las migraciones/DDL NO se ejecutaron correctamente en la base de datos de producción.
2.2 Tablas Faltantes en Producción (Confirmadas)
| Schema | Tabla | Archivo DDL | Estado DDL |
|---|---|---|---|
gamification_system |
notifications |
08-notifications.sql |
✅ EXISTE |
progress_tracking |
module_progress |
01-module_progress.sql |
✅ EXISTE |
educational_content |
modules |
01-modules.sql |
✅ EXISTE |
2.3 Causas Probables de Errores 404/400
| Endpoint | Causa Probable |
|---|---|
/gamification/ranks/current |
Usuario sin user_ranks inicializado |
/gamification/users/{id}/ml-coins |
Usuario sin user_stats inicializado |
/gamification/ranks/users/{id}/rank-progress |
Usuario sin rango/stats inicializado |
/gamification/missions/daily |
Sin mission_templates tipo DAILY en BD |
/gamification/missions/weekly |
Sin mission_templates tipo WEEKLY en BD |
3. INVENTARIO DE SCHEMAS AFECTADOS
3.1 Schema: gamification_system
Ubicación DDL: apps/database/ddl/schemas/gamification_system/
├── tables/ (20 archivos)
├── views/ (4 archivos)
├── functions/ (25 archivos)
├── indexes/ (8 archivos)
├── rls-policies/ (8 archivos)
└── triggers/ (múltiples)
Tablas Críticas:
notifications- Sistema de notificacionesuser_stats- Estadísticas de usuario (XP, nivel, ML-coins)user_ranks- Rangos Maya del usuariomissions- Misiones activasmission_templates- Plantillas de misiones (SEEDS REQUERIDOS)
3.2 Schema: progress_tracking
Ubicación DDL: apps/database/ddl/schemas/progress_tracking/
├── tables/ (18 archivos)
├── views/ (2 archivos)
├── functions/ (11 archivos)
├── indexes/ (3 archivos)
├── rls-policies/ (3 archivos)
└── triggers/ (11 archivos)
Tablas Críticas:
module_progress- Progreso por módulolearning_sessions- Sesiones de aprendizajeexercise_attempts- Intentos de ejerciciosexercise_submissions- Envíos de ejercicios
3.3 Schema: educational_content
Ubicación DDL: apps/database/ddl/schemas/educational_content/
├── tables/ (16 archivos activos + 2 deprecated)
├── views/ (1 archivo)
├── functions/ (27 archivos)
├── indexes/ (4 archivos)
└── rls-policies/ (2 archivos)
Tablas Críticas:
modules- Módulos educativosexercises- Ejercicios con config JSONBclassroom_modules- Módulos asignados a aulas
4. ANÁLISIS DE BACKEND
4.1 Módulo Notifications - PROBLEMA IDENTIFICADO
Conflicto de Entidades:
// Sistema Básico (deprecated)
@Entity({ schema: 'gamification_system', name: 'notifications' })
export class Notification { ... } // → gamification datasource
// Sistema Consolidado (activo)
@Entity({ schema: 'notifications', name: 'notifications' })
export class Notification { ... } // → notifications datasource
Problema: NotificationsService inyecta @InjectRepository(Notification, 'gamification') pero el módulo registra la entidad del sistema consolidado con datasource 'notifications'.
Archivos Afectados:
apps/backend/src/modules/notifications/notifications.module.tsapps/backend/src/modules/notifications/notifications.service.tsapps/backend/src/modules/notifications/entities/notification.entity.ts
4.2 Endpoints Verificados - TODOS EXISTEN
| Endpoint | Controlador | Línea |
|---|---|---|
| GET /gamification/ranks/current | ranks.controller.ts | 100-117 |
| GET /gamification/users/:id/ml-coins | ml-coins.controller.ts | 38-69 |
| GET /gamification/ranks/users/:id/rank-progress | ranks.controller.ts | 153-177 |
| GET /gamification/missions/daily | missions.controller.ts | 98-117 |
| GET /gamification/missions/weekly | missions.controller.ts | 167-186 |
| GET /progress/users/:id/summary | module-progress.controller.ts | 449 |
| GET /progress/users/:id/recent-activities | module-progress.controller.ts | 678 |
| GET /educational/modules/user/:id | modules.controller.ts | 249 |
5. PLAN DE ANÁLISIS FASE 2
5.1 Verificaciones en Base de Datos Producción
-- 1. Verificar schemas existentes
SELECT schema_name FROM information_schema.schemata
WHERE schema_name IN ('gamification_system', 'progress_tracking', 'educational_content', 'notifications');
-- 2. Verificar tablas críticas
SELECT table_schema, table_name
FROM information_schema.tables
WHERE table_schema IN ('gamification_system', 'progress_tracking', 'educational_content')
ORDER BY table_schema, table_name;
-- 3. Verificar seeds de mission_templates
SELECT type, COUNT(*) FROM gamification_system.mission_templates GROUP BY type;
-- 4. Verificar user_stats para usuario de prueba
SELECT * FROM gamification_system.user_stats WHERE user_id = 'd71448b0-67b6-4687-a822-f725c0479c1d';
-- 5. Verificar user_ranks
SELECT * FROM gamification_system.user_ranks WHERE user_id = 'd71448b0-67b6-4687-a822-f725c0479c1d';
5.2 Archivos DDL a Ejecutar (Orden Crítico)
Prioridad 1 - Schemas Base:
apps/database/ddl/schemas/gamification_system/schema.sqlapps/database/ddl/schemas/progress_tracking/schema.sqlapps/database/ddl/schemas/educational_content/schema.sql
Prioridad 2 - ENUMs:
apps/database/ddl/schemas/gamification_system/types/*.sqlapps/database/ddl/schemas/progress_tracking/types/*.sqlapps/database/ddl/schemas/educational_content/types/*.sql
Prioridad 3 - Tablas Críticas:
gamification_system/tables/01-user_stats.sqlgamification_system/tables/02-user_ranks.sqlgamification_system/tables/08-notifications.sqlgamification_system/tables/20-mission_templates.sqlprogress_tracking/tables/01-module_progress.sqleducational_content/tables/01-modules.sql
Prioridad 4 - Seeds:
apps/database/seeds/gamification/mission_templates.sqlapps/database/seeds/gamification/maya_ranks.sql
5.3 Verificación de Datasources
Revisar configuración en:
apps/backend/src/config/database.config.tsapps/backend/src/app.module.ts
Conexiones esperadas:
| Nombre | Schema |
|---|---|
default |
public |
auth |
auth_management |
gamification |
gamification_system |
progress |
progress_tracking |
educational |
educational_content |
notifications |
notifications |
social |
social_features |
6. ESTRUCTURA DE DEPENDENCIAS
Usuario se registra
│
├─► auth.profiles (creado) ✅
│
└─► Falta inicialización automática de:
├─► gamification_system.user_stats
├─► gamification_system.user_ranks
└─► progress_tracking.module_progress (primer módulo)
Flujo esperado post-registro:
- Crear profile en
auth.profiles✅ - Crear
user_statscon valores iniciales (level=1, xp=0, ml_coins=0) - Crear
user_rankscon rango inicial (Semilla) - Al acceder a módulo → crear
module_progress
7. SIGUIENTE FASE
Fase 2: Ejecución del Análisis
- Conectar a BD producción y ejecutar queries de verificación
- Identificar exactamente qué tablas faltan
- Identificar qué seeds faltan
- Verificar configuración de datasources en backend
Fase 3: Planeación de Correcciones
- Listar scripts DDL a ejecutar en orden
- Listar seeds a ejecutar
- Identificar cambios de código necesarios (notifications)
- Definir orden de ejecución
Fase 4: Validación del Plan
- Verificar dependencias entre objetos
- Confirmar que no faltan FK, índices, triggers
- Validar RLS policies
Fase 5: Ejecución
- Ejecutar DDL en producción
- Ejecutar seeds
- Aplicar fix de código si es necesario
- Verificar funcionamiento
8. ARCHIVOS DE REFERENCIA
DDL Críticos
apps/database/ddl/schemas/gamification_system/tables/08-notifications.sqlapps/database/ddl/schemas/progress_tracking/tables/01-module_progress.sqlapps/database/ddl/schemas/educational_content/tables/01-modules.sql
Backend Críticos
apps/backend/src/modules/notifications/notifications.module.tsapps/backend/src/modules/notifications/notifications.service.tsapps/backend/src/modules/gamification/services/missions.service.tsapps/backend/src/modules/progress/services/module-progress.service.ts
Seeds Críticos
apps/database/seeds/gamification/mission_templates.sqlapps/database/seeds/gamification/maya_ranks.sqlapps/database/seeds/educational/modules.sql
Documento generado automáticamente por análisis de Fase 1