Cambios incluidos: - INDICE-DIRECTIVAS-WORKSPACE.yml actualizado - Perfiles de agentes: PERFIL-ML.md, PERFIL-SECURITY.md - Directivas SIMCO actualizadas: - SIMCO-ASIGNACION-PERFILES.md - SIMCO-CCA-SUBAGENTE.md - SIMCO-CONTEXT-ENGINEERING.md - SIMCO-CONTEXT-RESOLUTION.md - SIMCO-DELEGACION-PARALELA.md - Inventarios actualizados: DEVENV-MASTER, DEVENV-PORTS - Documentos de analisis agregados: - Analisis y planes de fix student portal - Analisis scripts BD - Analisis achievements, duplicados, gamification - Auditoria documentacion gamilit - Backlog discrepancias NEXUS - Planes maestros de resolucion - Reportes de ejecucion agregados - Knowledge base gamilit README actualizado - Referencia submodulo gamilit actualizada (commit beb94f7) Validaciones: - Plan validado contra directivas SIMCO-GIT - Dependencias verificadas - Build gamilit: EXITOSO
407 lines
12 KiB
Markdown
407 lines
12 KiB
Markdown
# PLAN DE EJECUCIÓN: FIX-STUDENT-PORTAL-001 - Corrección Portal Estudiantes
|
|
|
|
**Agente:** Orquestador (Tech Lead)
|
|
**Tipo de tarea:** Corrección | Validación
|
|
**Prioridad:** P1
|
|
**Fecha creación:** 2026-01-10
|
|
**Relacionado con:** [01-ANALISIS-FIX-STUDENT-PORTAL-2026-01-10.md]
|
|
|
|
---
|
|
|
|
## VERIFICACIÓN DE CATÁLOGO
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────────────────┐
|
|
│ OBLIGATORIO: Verificar @CATALOG_INDEX antes de implementar │
|
|
└─────────────────────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
**Funcionalidades a verificar:**
|
|
|
|
| Funcionalidad | ¿Aplica? | Catálogo | Acción |
|
|
|---------------|----------|----------|--------|
|
|
| auth/login | Sí | N/A | Ya implementado |
|
|
| sesiones | Sí | N/A | Ya implementado |
|
|
| gamification | Sí | gamification_system | Usar existente |
|
|
| educational | Sí | educational_content | Usar existente |
|
|
|
|
**Resultado:** ✅ Usar estructuras existentes - No crear nuevos
|
|
|
|
---
|
|
|
|
## OBJETIVO
|
|
|
|
Corregir los 3 problemas del portal de estudiantes:
|
|
1. Leaderboard mostrando usuarios reales
|
|
2. Achievements mostrando logros disponibles
|
|
3. ModuleDetail cargando ejercicios correctamente
|
|
|
|
**Criterios de Aceptación:**
|
|
- [ ] Leaderboard muestra top 10+ usuarios con datos reales de user_stats
|
|
- [ ] Página de Achievements muestra 20 logros disponibles (locked/unlocked)
|
|
- [ ] ModuleDetailPage carga ejercicios sin error
|
|
- [ ] Backend responde correctamente a todos los endpoints
|
|
- [ ] Base de datos tiene datos consistentes
|
|
- [ ] Scripts create-database.sh ejecutan sin errores
|
|
|
|
---
|
|
|
|
## ANÁLISIS PREVIO
|
|
|
|
### Contexto
|
|
El portal de estudiantes tiene 3 páginas con problemas de carga de datos. El análisis previo determinó que el código está correcto y los problemas son de ambiente/datos.
|
|
|
|
### Estado Actual
|
|
- Código frontend: ✅ Correcto
|
|
- Código backend: ✅ Correcto
|
|
- Seeds BD: ✅ Definidos, verificar ejecución
|
|
- Relaciones: ⚠️ Verificar classroom-student
|
|
|
|
### Anti-Duplicación
|
|
```bash
|
|
# Verificación realizada
|
|
grep -rn "leaderboard" apps/frontend/src/features/gamification/
|
|
# Resultado: ✅ Única implementación en social/
|
|
|
|
grep -rn "achievements" apps/frontend/src/features/gamification/
|
|
# Resultado: ✅ Única implementación en social/
|
|
|
|
grep -rn "useModuleDetail" apps/frontend/src/
|
|
# Resultado: ✅ Único hook en shared/hooks/
|
|
```
|
|
|
|
---
|
|
|
|
## DISEÑO DE SOLUCIÓN
|
|
|
|
### Approach Seleccionado
|
|
**Verificación y Recreación de Ambiente** - No modificar código
|
|
|
|
### Alternativas consideradas:
|
|
1. Modificar código → Rechazado (código está correcto)
|
|
2. Crear nuevos seeds → Rechazado (seeds existen)
|
|
|
|
### Componentes a Verificar/Ejecutar
|
|
|
|
**Database:**
|
|
- [ ] Ejecutar: `drop-and-recreate-database.sh`
|
|
- [ ] Verificar: Seeds de gamification_system ejecutados
|
|
- [ ] Verificar: Seeds de educational_content ejecutados
|
|
- [ ] Verificar: Relación classroom_students para student@
|
|
|
|
**Backend:**
|
|
- [ ] Verificar: Backend corriendo en puerto 3006
|
|
- [ ] Verificar: Endpoint `/gamification/leaderboard/global` responde
|
|
- [ ] Verificar: Endpoint `/gamification/achievements` responde
|
|
- [ ] Verificar: Endpoint `/educational/modules/{id}/exercises` responde
|
|
|
|
**Frontend:**
|
|
- [ ] Verificar: Variable VITE_USE_MOCK_DATA no está activa
|
|
- [ ] Verificar: Frontend corriendo en puerto 3005
|
|
- [ ] Verificar: Páginas cargan datos del backend
|
|
|
|
---
|
|
|
|
## CICLOS DE EJECUCIÓN
|
|
|
|
### Ciclo 1: Verificación de Ambiente
|
|
**Duración estimada:** 15 minutos
|
|
**Objetivo:** Confirmar estado actual del ambiente
|
|
|
|
**Tareas:**
|
|
1. Verificar si backend está corriendo
|
|
2. Verificar si frontend está corriendo
|
|
3. Verificar variable VITE_USE_MOCK_DATA
|
|
4. Verificar conexión a base de datos
|
|
|
|
**Validación:**
|
|
```bash
|
|
# Backend
|
|
curl -s http://localhost:3006/api/v1/health
|
|
|
|
# Frontend
|
|
curl -s http://localhost:3005 | head -1
|
|
|
|
# Variable de entorno
|
|
grep "VITE_USE_MOCK_DATA" apps/frontend/.env*
|
|
|
|
# Base de datos
|
|
psql $DATABASE_URL -c "SELECT COUNT(*) FROM gamification_system.user_stats;"
|
|
```
|
|
|
|
**Criterios de éxito:**
|
|
- [ ] Backend respondiendo en 3006
|
|
- [ ] Frontend respondiendo en 3005
|
|
- [ ] VITE_USE_MOCK_DATA no activo
|
|
- [ ] Conexión a BD exitosa
|
|
|
|
---
|
|
|
|
### Ciclo 2: Recreación de Base de Datos
|
|
**Duración estimada:** 20 minutos
|
|
**Objetivo:** Asegurar BD limpia con todos los seeds
|
|
|
|
**Tareas:**
|
|
1. Ejecutar `drop-and-recreate-database.sh`
|
|
2. Verificar ejecución sin errores
|
|
3. Validar conteo de registros en tablas clave
|
|
|
|
**Artefactos generados:**
|
|
- Log: `create-database-YYYYMMDD_HHMMSS.log`
|
|
|
|
**Validación:**
|
|
```bash
|
|
# Ejecutar recreación
|
|
cd /home/isem/workspace-v1/projects/gamilit/apps/database
|
|
./drop-and-recreate-database.sh "$DATABASE_URL"
|
|
|
|
# Verificar seeds ejecutados
|
|
psql $DATABASE_URL -c "
|
|
SELECT 'user_stats' as tabla, COUNT(*) as registros FROM gamification_system.user_stats
|
|
UNION ALL
|
|
SELECT 'achievements', COUNT(*) FROM gamification_system.achievements
|
|
UNION ALL
|
|
SELECT 'user_achievements', COUNT(*) FROM gamification_system.user_achievements
|
|
UNION ALL
|
|
SELECT 'modules', COUNT(*) FROM educational_content.modules
|
|
UNION ALL
|
|
SELECT 'exercises', COUNT(*) FROM educational_content.exercises
|
|
UNION ALL
|
|
SELECT 'classroom_students', COUNT(*) FROM educational_content.classroom_students;
|
|
"
|
|
```
|
|
|
|
**Criterios de éxito:**
|
|
- [ ] Script ejecuta sin errores
|
|
- [ ] user_stats tiene 10+ registros
|
|
- [ ] achievements tiene 20 registros
|
|
- [ ] modules tiene 5 registros
|
|
- [ ] exercises tiene 50+ registros
|
|
|
|
---
|
|
|
|
### Ciclo 3: Verificación de Relaciones
|
|
**Duración estimada:** 15 minutos
|
|
**Objetivo:** Asegurar relaciones correctas para usuario student@
|
|
|
|
**Tareas:**
|
|
1. Verificar que student@ tiene user_stats
|
|
2. Verificar que student@ pertenece a classroom
|
|
3. Verificar que classroom tiene assignments
|
|
|
|
**Validación:**
|
|
```sql
|
|
-- Verificar user_stats para usuario testing
|
|
SELECT us.user_id, us.total_xp, us.level, us.current_rank
|
|
FROM gamification_system.user_stats us
|
|
JOIN auth.users u ON u.id = us.user_id
|
|
WHERE u.email = 'student@gamilit.com';
|
|
|
|
-- Verificar classroom membership
|
|
SELECT u.email, c.name as classroom
|
|
FROM auth.users u
|
|
LEFT JOIN educational_content.classroom_students cs ON cs.student_id = u.id
|
|
LEFT JOIN educational_content.classrooms c ON c.id = cs.classroom_id
|
|
WHERE u.email = 'student@gamilit.com';
|
|
|
|
-- Verificar assignments del classroom
|
|
SELECT c.name, a.title, COUNT(ae.exercise_id) as exercises
|
|
FROM educational_content.classrooms c
|
|
JOIN educational_content.assignments a ON a.classroom_id = c.id
|
|
JOIN educational_content.assignment_exercises ae ON ae.assignment_id = a.id
|
|
GROUP BY c.id, c.name, a.id, a.title;
|
|
```
|
|
|
|
**Criterios de éxito:**
|
|
- [ ] student@ tiene registro en user_stats
|
|
- [ ] student@ pertenece a al menos 1 classroom
|
|
- [ ] El classroom tiene assignments con ejercicios
|
|
|
|
---
|
|
|
|
### Ciclo 4: Verificación de Endpoints Backend
|
|
**Duración estimada:** 15 minutos
|
|
**Objetivo:** Confirmar que backend retorna datos correctos
|
|
|
|
**Tareas:**
|
|
1. Obtener token JWT válido
|
|
2. Probar endpoint de leaderboard
|
|
3. Probar endpoint de achievements
|
|
4. Probar endpoint de modules/exercises
|
|
|
|
**Validación:**
|
|
```bash
|
|
# Obtener token (ajustar credenciales)
|
|
TOKEN=$(curl -s -X POST http://localhost:3006/api/v1/auth/login \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"email":"student@gamilit.com","password":"Student123!@#"}' | jq -r '.data.accessToken')
|
|
|
|
# Leaderboard
|
|
curl -s -H "Authorization: Bearer $TOKEN" \
|
|
http://localhost:3006/api/v1/gamification/leaderboard/global | jq '.entries | length'
|
|
|
|
# Achievements
|
|
curl -s -H "Authorization: Bearer $TOKEN" \
|
|
http://localhost:3006/api/v1/gamification/achievements | jq 'length'
|
|
|
|
# Module exercises (usar ID de módulo 1)
|
|
MODULE_ID="modulo-01-comprension-literal"
|
|
curl -s -H "Authorization: Bearer $TOKEN" \
|
|
"http://localhost:3006/api/v1/educational/modules/$MODULE_ID/exercises" | jq 'length'
|
|
```
|
|
|
|
**Criterios de éxito:**
|
|
- [ ] Leaderboard retorna 10+ entries
|
|
- [ ] Achievements retorna 20 items
|
|
- [ ] Exercises retorna 5+ items para módulo
|
|
|
|
---
|
|
|
|
### Ciclo 5: Verificación de Frontend
|
|
**Duración estimada:** 15 minutos
|
|
**Objetivo:** Confirmar que UI muestra datos correctamente
|
|
|
|
**Tareas:**
|
|
1. Acceder a portal estudiante
|
|
2. Verificar página Leaderboard
|
|
3. Verificar página Gamification/Achievements
|
|
4. Verificar página ModuleDetail
|
|
|
|
**Validación:**
|
|
1. Abrir http://localhost:3005/student/dashboard
|
|
2. Login con student@gamilit.com
|
|
3. Navegar a /student/leaderboard → Ver usuarios reales
|
|
4. Navegar a /student/gamification → Ver achievements
|
|
5. Navegar a /student/modules/{id} → Ver ejercicios
|
|
|
|
**Criterios de éxito:**
|
|
- [ ] Leaderboard muestra tabla con usuarios ordenados por XP
|
|
- [ ] Gamification muestra grid de achievements
|
|
- [ ] ModuleDetail muestra lista de ejercicios
|
|
- [ ] No hay errores en consola del navegador
|
|
|
|
---
|
|
|
|
### Ciclo 6: Validación Final e Integración
|
|
**Duración estimada:** 15 minutos
|
|
**Objetivo:** Validar integración completa
|
|
|
|
**Validaciones:**
|
|
```bash
|
|
# Database - script ejecuta limpio
|
|
cd apps/database
|
|
./validate-create-database.sh
|
|
|
|
# Backend - compila sin errores
|
|
cd apps/backend && npm run build
|
|
|
|
# Frontend - compila sin errores
|
|
cd apps/frontend && npm run build
|
|
```
|
|
|
|
**Checklist de Validación:**
|
|
- [ ] DB ejecuta sin errores
|
|
- [ ] Backend compila sin errores
|
|
- [ ] Frontend compila sin errores
|
|
- [ ] Documentación actualizada
|
|
- [ ] Sin duplicaciones creadas
|
|
- [ ] Cumple estándares de código
|
|
|
|
---
|
|
|
|
## DEPENDENCIAS
|
|
|
|
### Depende de:
|
|
- [DB-DDL]: Estructura de tablas → Estado: ✅ Completa
|
|
- [DB-SEEDS]: Seeds de producción → Estado: ✅ Definidos
|
|
- [BE-MODULES]: Módulos backend → Estado: ✅ Implementados
|
|
- [FE-PAGES]: Páginas frontend → Estado: ✅ Implementadas
|
|
|
|
### Bloquea:
|
|
- Validación integral del sistema
|
|
- Pruebas de usuario final
|
|
|
|
### Requerimientos externos:
|
|
- PostgreSQL corriendo
|
|
- Node.js 18+
|
|
- DATABASE_URL configurado
|
|
|
|
---
|
|
|
|
## RIESGOS IDENTIFICADOS
|
|
|
|
| Riesgo | Probabilidad | Impacto | Mitigación |
|
|
|--------|-------------|---------|------------|
|
|
| Seeds fallan | Baja | Alto | Revisar log de create-database.sh |
|
|
| Backend no inicia | Baja | Alto | Verificar .env y dependencias |
|
|
| Datos inconsistentes | Media | Medio | Ejecutar recreación completa |
|
|
| Token inválido | Baja | Bajo | Regenerar token con login |
|
|
|
|
---
|
|
|
|
## ESTIMACIONES
|
|
|
|
**Tiempo total estimado:** 2 horas
|
|
|
|
**Desglose:**
|
|
- Ciclo 1 (Verificación ambiente): 15 min
|
|
- Ciclo 2 (Recreación BD): 20 min
|
|
- Ciclo 3 (Relaciones): 15 min
|
|
- Ciclo 4 (Endpoints): 15 min
|
|
- Ciclo 5 (Frontend): 15 min
|
|
- Ciclo 6 (Validación): 15 min
|
|
- Buffer (15%): 15 min
|
|
|
|
**Recursos necesarios:**
|
|
- Agentes: Orquestador
|
|
- Herramientas: psql, curl, browser
|
|
|
|
---
|
|
|
|
## DOCUMENTACIÓN A GENERAR
|
|
|
|
**Durante ejecución:**
|
|
- [ ] 03-EJECUCION.md (log de cada ciclo)
|
|
- [ ] Screenshots de UI funcionando (opcional)
|
|
|
|
**Post-ejecución:**
|
|
- [ ] 04-VALIDACION.md (resultados de validación)
|
|
- [ ] Actualización de este plan con resultados
|
|
|
|
---
|
|
|
|
## CRITERIOS DE ÉXITO
|
|
|
|
La tarea se considera **COMPLETADA** cuando:
|
|
|
|
- [ ] Ciclo 1: Ambiente verificado
|
|
- [ ] Ciclo 2: BD recreada con seeds
|
|
- [ ] Ciclo 3: Relaciones verificadas
|
|
- [ ] Ciclo 4: Endpoints respondiendo
|
|
- [ ] Ciclo 5: UI mostrando datos
|
|
- [ ] Ciclo 6: Validación final exitosa
|
|
- [ ] Documentación completa
|
|
- [ ] Sin errores de compilación
|
|
- [ ] Sin duplicaciones creadas
|
|
|
|
---
|
|
|
|
## REFERENCIAS
|
|
|
|
**Documentación del proyecto:**
|
|
- Análisis: 01-ANALISIS-FIX-STUDENT-PORTAL-2026-01-10.md
|
|
- Scripts BD: apps/database/create-database.sh
|
|
- Contributing: CONTRIBUTING.md
|
|
|
|
**Archivos de referencia:**
|
|
- Seeds: apps/database/seeds/prod/gamification_system/
|
|
- Seeds: apps/database/seeds/prod/educational_content/
|
|
- Backend: apps/backend/src/modules/gamification/
|
|
- Frontend: apps/frontend/src/apps/student/pages/
|
|
|
|
---
|
|
|
|
**Versión:** 1.0
|
|
**Última actualización:** 2026-01-10
|
|
**Aprobado para ejecución:** Pendiente validación
|