workspace-v1/projects/gamilit/docs/03-fase-extensiones/EXT-002-admin-extendido/implementacion/PLAN-IMPLEMENTACION-GAPS-P0-2025-11-29.md
Adrian Flores Cortes 967ab360bb Initial commit: Workspace v1 with 3-layer architecture
Structure:
- control-plane/: Registries, SIMCO directives, CI/CD templates
- projects/: Gamilit, ERP-Suite, Trading-Platform, Betting-Analytics
- shared/: Libs catalog, knowledge-base

Key features:
- Centralized port, domain, database, and service registries
- 23 SIMCO directives + 6 fundamental principles
- NEXUS agent profiles with delegation rules
- Validation scripts for workspace integrity
- Dockerfiles for all services
- Path aliases for quick reference

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 00:35:19 -06:00

12 KiB

Plan de Implementación: Gaps P0 - Portal Students → Admin

Versión: 1.1.0 Fecha: 2025-11-29 Estado: COMPLETADO Autor: Architecture-Analyst


Resumen Ejecutivo

Este documento detalla el plan de implementación para los gaps P0 (críticos) identificados en el análisis del Portal Students → Admin.

Gaps a Implementar (Sprint 1)

ID Gap US SP Agente
GAP-C06 RLS Incompleto en Ejercicios N/A 5 Backend-Agent
GAP-C02 Admin no ve Assignments US-AE-009 13 Backend-Agent + Frontend-Agent

Total Sprint 1: 18 SP


1. GAP-C06: RLS Incompleto en Ejercicios

1.1 Estado Actual

Archivo: apps/backend/src/modules/educational/controllers/exercises.controller.ts

// PROBLEMA: No hay filtrado por classroom/tenant
@Get()
@UseGuards(JwtAuthGuard)
async findAll(@Query() filters: ExerciseFiltersDto) {
  return this.exercisesService.findAll(filters);
}

Riesgo: Cualquier estudiante autenticado puede ver ejercicios de TODAS las organizaciones.

1.2 Solución a Implementar

Cambios requeridos:

  1. exercises.service.ts - Agregar método findAllForStudent(userId, filters)
  2. exercises.controller.ts - Modificar @Get() para usar el método correcto según rol

Especificación técnica: Ver docs/03-fase-extensiones/EXT-002-admin-extendido/especificaciones/ET-GAPS-CRITICOS-STUDENTS-ADMIN-2025-11-29.md (sección GAP-C06)

1.3 Criterios de Aceptación

  • Student solo ve ejercicios de módulos asignados a sus classrooms
  • Teacher ve ejercicios de sus classrooms
  • Admin ve todos los ejercicios
  • Tests pasan
  • Build exitoso

2. GAP-C02: Admin no ve Assignments (US-AE-009)

2.1 Estado Actual

Backend existente:

  • apps/backend/src/modules/assignments/ - Módulo completo para teachers
  • apps/backend/src/modules/admin/controllers/classroom-assignments.controller.ts - Asigna classrooms a teachers (NO tareas)

Gap: No hay controller/service para que admin vea TODAS las tareas del sistema.

2.2 Archivos a Crear/Modificar

Backend (6 archivos)

apps/backend/src/modules/admin/
├── controllers/
│   └── admin-assignments.controller.ts      # CREAR - 6 endpoints
├── services/
│   └── admin-assignments.service.ts         # CREAR - lógica de negocio
├── dto/
│   └── assignments/
│       ├── admin-assignment.dto.ts          # CREAR
│       ├── admin-assignment-filters.dto.ts  # CREAR
│       └── admin-assignment-stats.dto.ts    # CREAR
└── admin.module.ts                          # MODIFICAR - registrar controller

Frontend (6 archivos)

apps/frontend/src/apps/admin/
├── pages/
│   └── AdminAssignmentsPage.tsx             # CREAR
├── hooks/
│   └── useAdminAssignments.ts               # CREAR
├── components/
│   └── assignments/
│       ├── AssignmentsTable.tsx             # CREAR
│       ├── AssignmentDetailModal.tsx        # CREAR
│       └── AssignmentFilters.tsx            # CREAR
└── router/index.tsx                         # MODIFICAR - agregar ruta

2.3 Endpoints a Implementar

1. GET /api/admin/assignments
   Query: classroom_id, teacher_id, student_id, status, date_from, date_to, page, limit
   Response: PaginatedResponse<AdminAssignment>

2. GET /api/admin/assignments/:id
   Response: AdminAssignmentDetail

3. GET /api/admin/assignments/stats
   Response: AssignmentsStats

4. GET /api/admin/assignments/classrooms/:classroomId
   Response: ClassroomAssignmentsOverview

5. GET /api/admin/assignments/students/:studentId
   Response: StudentAssignmentsHistory

6. GET /api/admin/assignments/export
   Response: File (CSV)

2.4 Especificación Técnica Completa

Ver: docs/03-fase-extensiones/EXT-002-admin-extendido/historias-usuario/US-AE-009-admin-assignments-view.md

2.5 Criterios de Aceptación

  • 6 endpoints implementados en backend
  • DTOs con validación class-validator
  • Página AdminAssignmentsPage funcional
  • Hook useAdminAssignments con React Query
  • Tabla con filtros, paginación, ordenamiento
  • Modal de detalle con submissions
  • Ruta /admin/assignments en router
  • Link en sidebar de admin (pendiente - se hace aparte)
  • Tests unitarios
  • npm run build exitoso
  • npm run lint sin errores

3. Orden de Ejecución

┌─────────────────────────────────────────────────────────────────┐
│ FASE 1: Backend (Paralelo)                                       │
├─────────────────────────────────────────────────────────────────┤
│ [Backend-Agent #1] GAP-C06: RLS Ejercicios                      │
│   - Modificar exercises.service.ts                               │
│   - Modificar exercises.controller.ts                            │
│   - Tests                                                        │
│                                                                  │
│ [Backend-Agent #2] US-AE-009: Admin Assignments API              │
│   - Crear admin-assignments.controller.ts                        │
│   - Crear admin-assignments.service.ts                           │
│   - Crear DTOs                                                   │
│   - Registrar en admin.module.ts                                 │
│   - Tests                                                        │
├─────────────────────────────────────────────────────────────────┤
│ FASE 2: Frontend (Secuencial, después de Backend)               │
├─────────────────────────────────────────────────────────────────┤
│ [Frontend-Agent] US-AE-009: Admin Assignments UI                 │
│   - Crear AdminAssignmentsPage.tsx                               │
│   - Crear useAdminAssignments.ts                                 │
│   - Crear componentes                                            │
│   - Agregar ruta y sidebar                                       │
├─────────────────────────────────────────────────────────────────┤
│ FASE 3: Validación                                               │
├─────────────────────────────────────────────────────────────────┤
│ [Architecture-Analyst] Validación Final                          │
│   - npm run build backend                                        │
│   - npm run build frontend                                       │
│   - npm run lint                                                 │
│   - Actualizar inventarios                                       │
│   - Actualizar docs/                                             │
└─────────────────────────────────────────────────────────────────┘

4. Dependencias

Base de Datos (ya existen)

  • assignments.assignments - Tabla principal de tareas
  • assignments.assignment_students - Relación assignment-student
  • assignments.assignment_submissions - Envíos
  • social_network.classrooms - Aulas
  • social_network.classroom_members - Miembros

Servicios Backend (ya existen)

  • AssignmentsService - CRUD de assignments
  • ClassroomsService - Datos de classrooms
  • ClassroomMembersService - Miembros de classroom

Módulos Frontend (ya existen)

  • React Query para data fetching
  • shadcn/ui para componentes
  • Zustand para state management

5. Riesgos y Mitigaciones

Riesgo Probabilidad Impacto Mitigación
Conflictos con classroom-assignments existente Baja Medio Usar prefijo diferente: /admin/assignments vs /admin/classrooms
Performance en queries grandes Media Alto Implementar paginación obligatoria, índices
Breaking changes en módulo assignments Baja Alto Solo lectura desde admin, no modificar lógica existente

6. Estimación

Componente Estimación Agente
GAP-C06 Backend 1-2 horas Backend-Agent
US-AE-009 Backend 3-4 horas Backend-Agent
US-AE-009 Frontend 4-5 horas Frontend-Agent
Validación 1 hora Architecture-Analyst
Total 9-12 horas -

7. Checklist Pre-Implementación

  • Documentación en docs/ completa (US-AE-009, ET-GAPS-CRITICOS)
  • Especificaciones técnicas detalladas
  • Plan de implementación documentado (este archivo)
  • Dependencias identificadas
  • Riesgos evaluados
  • Agentes orquestados

8. Progreso de Implementación

Backend (COMPLETADO)

Tarea Agente Estado Resultado
GAP-C06: RLS Ejercicios Backend-Agent #1 COMPLETADO 265 líneas, build OK
US-AE-009: Admin Assignments API Backend-Agent #2 COMPLETADO 940 líneas, 5 endpoints

Archivos creados/modificados:

  • apps/backend/src/modules/educational/services/exercises.service.ts (RLS)
  • apps/backend/src/modules/educational/controllers/exercises.controller.ts (RLS)
  • apps/backend/src/modules/educational/educational.module.ts (RLS)
  • apps/backend/src/modules/admin/controllers/admin-assignments.controller.ts (NUEVO)
  • apps/backend/src/modules/admin/services/admin-assignments.service.ts (NUEVO)
  • apps/backend/src/modules/admin/dto/assignments/*.ts (4 archivos NUEVOS)
  • apps/backend/src/modules/admin/admin.module.ts (modificado)

Frontend (COMPLETADO)

Tarea Agente Estado Resultado
US-AE-009: Admin Assignments UI Frontend-Agent COMPLETADO 1,258 líneas, 6 archivos

Archivos creados/modificados:

  • apps/frontend/src/apps/admin/hooks/useAdminAssignments.ts (292 líneas - NUEVO)
  • apps/frontend/src/apps/admin/pages/AdminAssignmentsPage.tsx (289 líneas - NUEVO)
  • apps/frontend/src/apps/admin/components/assignments/AssignmentsTable.tsx (247 líneas - NUEVO)
  • apps/frontend/src/apps/admin/components/assignments/AssignmentDetailModal.tsx (260 líneas - NUEVO)
  • apps/frontend/src/apps/admin/components/assignments/AssignmentFilters.tsx (161 líneas - NUEVO)
  • apps/frontend/src/apps/admin/components/assignments/index.ts (9 líneas - NUEVO)
  • apps/frontend/src/App.tsx (modificado - ruta agregada)

Validación Final (COMPLETADO)

Validación Resultado
npm run backend:build ÉXITO
npm run frontend:build ÉXITO
npm run lint 0 errores (143 warnings pre-existentes)

9. Próximos Pasos

  1. Crear plan de implementación (este documento)
  2. Orquestar Backend-Agent #1 (GAP-C06) - COMPLETADO
  3. Orquestar Backend-Agent #2 (US-AE-009 API) - COMPLETADO
  4. Validar backend - BUILD OK, LINT OK
  5. Orquestar Frontend-Agent (US-AE-009 UI) - COMPLETADO
  6. Validación final - BUILDS OK
  7. Actualizar inventarios y docs/

10. Pendiente Menor

  • Agregar link en sidebar de admin para /admin/assignments
  • Tests E2E opcionales

Creado: 2025-11-29 Completado: 2025-11-29 Autor: Architecture-Analyst Estado: COMPLETADO - Backend y Frontend implementados, builds exitosos