# PLAN DE EJECUCI脫N: BUG-TEACHER-REVIEWS-002 - Datos faltantes en p谩gina teacher/reviews **Agente:** Backend-Agent + Frontend-Agent **Tipo de tarea:** Bug **Prioridad:** P1 **Fecha creaci贸n:** 2026-01-08 **Relacionado con:** [TEACHER-PORTAL], [PROGRESS-TRACKING], [MANUAL-REVIEWS] --- ## 馃攳 VERIFICACI脫N DE CAT脕LOGO **Funcionalidades a verificar:** | Funcionalidad | 驴Aplica? | Cat谩logo | Acci贸n | |---------------|----------|----------|--------| | auth/login | No | N/A | N/A | | multi-tenant | No | N/A | N/A | | notificaciones | No | N/A | N/A | **Resultado:** No aplica cat谩logo --- ## 馃幆 OBJETIVO Corregir la visualizaci贸n de datos en la p谩gina `/teacher/reviews` para que muestre correctamente la informaci贸n del estudiante, ejercicio y fecha de env铆o. **Criterios de Aceptaci贸n:** - [x] El t铆tulo del ejercicio se muestra correctamente - [x] El m贸dulo del ejercicio se muestra correctamente - [x] El nombre del estudiante se muestra correctamente - [x] La fecha de env铆o es la del submission, no del review - [x] El detalle del review muestra los mismos datos correctamente --- ## 馃搵 AN脕LISIS PREVIO ### Contexto La p谩gina de revisiones del docente muestra fallbacks ("Sin t铆tulo", "Desconocido") porque el backend no retorna datos enriquecidos de student y exercise. ### Estado Actual - ManualReviewService retorna reviews con relaci贸n `submission` pero sin datos de `student` ni `exercise` - Frontend espera campos `student.name`, `exercise.title`, `exercise.moduleId` poblados - Arquitectura cross-database impide JOINs TypeORM entre schemas ### Anti-Duplicaci贸n ```bash # Comandos ejecutados para verificar no-duplicaci贸n grep -rn "enrichReview" apps/backend/src/ # Resultado: No existe funci贸n de enriquecimiento previa ``` --- ## 馃搻 DISE脩O DE SOLUCI脫N ### Approach Seleccionado Inyectar repositorios de Profile y Exercise en ManualReviewService, crear m茅todos helper para enriquecimiento batch y individual, y modificar los m茅todos de consulta existentes para usar estos helpers. ### Componentes a Crear/Modificar **Database:** - [x] Trigger: 17-trg_create_manual_review_on_update.sql (nuevo - AFTER UPDATE) - [x] Script: fix-missing-manual-reviews.sql (migraci贸n datos existentes) **Backend:** - [x] Interface: EnrichedManualReview - [x] Method: enrichReview (individual) - [x] Method: enrichReviews (batch) - [x] Modify: findPendingReviews - [x] Modify: findById - [x] Modify: findByTeacher **Frontend:** - [x] Interface: ManualReview.exercise (agregar type) - [x] Interface: ManualReview.submission (agregar submitted_at) - [x] Component: ReviewList (usar fecha correcta) - [x] Component: ReviewDetail (usar fecha correcta, fallback email) --- ## 馃攧 CICLOS DE EJECUCI脫N ### Ciclo 1: Modificaciones Backend **Duraci贸n estimada:** 1.5 horas **Objetivo:** Enriquecer datos de reviews en el servicio **Tareas:** 1. Importar entidades Profile y Exercise 2. Inyectar repositorios profileRepo y exerciseRepo 3. Crear interface EnrichedManualReview 4. Crear m茅todo enrichReview() para enriquecimiento individual 5. Crear m茅todo enrichReviews() para enriquecimiento batch 6. Modificar findPendingReviews() para enriquecer reviews 7. Modificar findById() para enriquecer review 8. Modificar findByTeacher() para enriquecer reviews **Artefactos generados:** - apps/backend/src/modules/teacher/services/manual-review.service.ts (modificado) **Validaci贸n:** ```bash cd apps/backend && npx tsc --noEmit --skipLibCheck # Debe compilar sin errores ``` **Criterios de 茅xito:** - [x] Compilaci贸n exitosa - [x] Interface EnrichedManualReview definida - [x] M茅todos de enriquecimiento implementados --- ### Ciclo 2: Modificaciones Frontend **Duraci贸n estimada:** 45 minutos **Objetivo:** Actualizar interfaces y componentes **Tareas:** 1. Actualizar interface ManualReview en manualReviewApi.ts 2. Agregar campos exercise.type, exercise.exercise_type 3. Agregar campos submission.submittedAt, submission.submitted_at 4. Modificar ReviewList para usar fecha de submission 5. Modificar ReviewDetail para usar fecha de submission 6. Agregar fallback para email del estudiante **Artefactos generados:** - apps/frontend/src/shared/api/manualReviewApi.ts (modificado) - apps/frontend/src/apps/teacher/components/review-panel/ReviewList.tsx (modificado) - apps/frontend/src/apps/teacher/components/review-panel/ReviewDetail.tsx (modificado) **Validaci贸n:** ```bash cd apps/frontend && npx tsc --noEmit --skipLibCheck 2>&1 | grep -E "(ReviewList|ReviewDetail|manualReviewApi)" # No debe haber errores en estos archivos ``` **Criterios de 茅xito:** - [x] Compilaci贸n de archivos modificados sin errores - [x] Interfaces actualizadas con campos necesarios --- ### Ciclo 3: Validaci贸n Final **Duraci贸n estimada:** 30 minutos **Objetivo:** Validar integraci贸n completa **Validaciones:** ```bash # Backend cd apps/backend && npm run build # Debe compilar sin errores # Frontend (archivos modificados) cd apps/frontend && npx tsc --noEmit --skipLibCheck 2>&1 | grep -E "(ReviewList|ReviewDetail|manualReviewApi)" # No debe haber errores ``` **Checklist de Validaci贸n:** - [x] Backend compila sin errores - [x] Frontend (archivos modificados) compila sin errores - [x] Documentaci贸n actualizada - [x] Inventarios actualizados (N/A - no requiere cambios en inventarios de configuraci贸n) - [x] Sin errores de compilaci贸n en archivos modificados - [x] Sin duplicaciones creadas - [x] Cumple est谩ndares de c贸digo --- ## 馃敆 DEPENDENCIAS ### Depende de: - Ninguna ### Bloquea: - Ninguna ### Requerimientos externos: - Ninguno --- ## 鈿狅笍 RIESGOS IDENTIFICADOS | Riesgo | Probabilidad | Impacto | Mitigaci贸n | |--------|-------------|---------|------------| | Performance con queries adicionales | Media | Bajo | Usar batch queries con IN clause | | Incompatibilidad de nombres de campos (snake_case vs camelCase) | Media | Medio | Soportar ambos formatos en interface | --- ## 馃搳 ESTIMACIONES **Tiempo total estimado:** 4 horas **Desglose:** - An谩lisis: 1h - Desarrollo Backend: 1.5h - Desarrollo Frontend: 0.5h - Testing: 0.5h - Documentaci贸n: 0.5h **Recursos necesarios:** - Agentes: Backend-Agent, Frontend-Agent - Herramientas: TypeScript, TypeORM, React --- ## 馃摑 DOCUMENTACI脫N A GENERAR **Durante ejecuci贸n:** - [x] Comentarios inline con tag FIX BUG-TEACHER-REVIEWS-002 **Post-ejecuci贸n:** - [x] ANALISIS-BUG-TEACHER-REVIEWS-002-2026-01-08.md - [x] PLAN-BUG-TEACHER-REVIEWS-002-2026-01-08.md - [x] Actualizaci贸n de MASTER_INVENTORY.yml (N/A - cambios de c贸digo, no de configuraci贸n) --- ## 馃幆 CRITERIOS DE 脡XITO La tarea se considera **COMPLETADA** cuando: - [x] Backend compila sin errores - [x] Frontend (archivos modificados) compila sin errores - [x] Datos de student poblados correctamente - [x] Datos de exercise poblados correctamente - [x] Fecha de env铆o usa submitted_at del submission - [x] Sin duplicaciones creadas - [x] Cumple est谩ndares de c贸digo - [x] Documentaci贸n completa --- ## 馃搧 ARCHIVOS MODIFICADOS ### Database | Archivo | Cambio | Ubicaci贸n | |---------|--------|-----------| | `17-trg_create_manual_review_on_update.sql` | Nuevo trigger AFTER UPDATE | ddl/schemas/progress_tracking/triggers/ | | `fix-missing-manual-reviews.sql` | Script migraci贸n datos | scripts/ | ### Backend | Archivo | Cambio | L铆neas | |---------|--------|--------| | `manual-review.service.ts` | Import Profile, Exercise | 13-15 | | `manual-review.service.ts` | Interface EnrichedManualReview | 61-77 | | `manual-review.service.ts` | Inyecci贸n repositorios | 105-109 | | `manual-review.service.ts` | M茅todo enrichReview() | 117-168 | | `manual-review.service.ts` | M茅todo enrichReviews() | 170-239 | | `manual-review.service.ts` | findPendingReviews() enriquece | 284-288, 319-323 | | `manual-review.service.ts` | findById() retorna enriched | 660-681 | | `manual-review.service.ts` | findByTeacher() retorna enriched | 683-711 | ### Frontend | Archivo | Cambio | L铆neas | |---------|--------|--------| | `manualReviewApi.ts` | exercise.type, exercise_type | 84-85 | | `manualReviewApi.ts` | submission.submitted_at | 89 | | `ReviewList.tsx` | Fecha usa submitted_at | 170-174 | | `ReviewDetail.tsx` | Email con fallback | 164-170 | | `ReviewDetail.tsx` | Fecha usa submitted_at | 173-180 | --- ## 馃摎 REFERENCIAS **Documentaci贸n del proyecto:** - Vista SQL: apps/database/ddl/schemas/progress_tracking/views/02-teacher_pending_reviews.sql **Archivos de referencia:** - Entity Profile: apps/backend/src/modules/auth/entities/profile.entity.ts - Entity Exercise: apps/backend/src/modules/educational/entities/exercise.entity.ts --- **Versi贸n:** 1.0 **脷ltima actualizaci贸n:** 2026-01-08 **Estado:** COMPLETADO