workspace/projects/gamilit/docs/95-guias-desarrollo/DEPENDENCIAS-STUDENT-TEACHER.md
rckrdmrd ea1879f4ad feat: Initial workspace structure with multi-level Git configuration
- Configure workspace Git repository with comprehensive .gitignore
- Add Odoo as submodule for ERP reference code
- Include documentation: SETUP.md, GIT-STRUCTURE.md
- Add gitignore templates for projects (backend, frontend, database)
- Structure supports independent repos per project/subproject level

Workspace includes:
- core/ - Reusable patterns, modules, orchestration system
- projects/ - Active projects (erp-suite, gamilit, trading-platform, etc.)
- knowledge-base/ - Reference code and patterns (includes Odoo submodule)
- devtools/ - Development tools and templates
- customers/ - Client implementations template

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

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

16 KiB

Matriz de Dependencias: Student Portal ↔ Teacher Portal

Fecha de creacion: 2025-11-29 Version: 1.0.0 Estado: VIGENTE Complementa: INTEGRACION-STUDENT-TEACHER.md


1. Proposito

Este documento detalla TODAS las dependencias entre objetos del Student Portal y Teacher Portal para:

  1. Evaluar impacto antes de cualquier cambio
  2. Identificar objetos que requieren sincronizacion
  3. Prevenir errores por cambios no coordinados

2. Dependencias por Capa

2.1 Capa de Base de Datos

Tablas Principales y sus Dependientes

Tabla Origen Dependientes Directos Dependientes Indirectos
auth_management.profiles exercise_submissions.user_id, exercise_attempts.user_id, module_progress.user_id, user_stats.user_id, classroom_members.user_id Todos los queries de Teacher
educational_content.exercises exercise_submissions.exercise_id, exercise_attempts.exercise_id, assignment_exercises.exercise_id module_progress (via triggers)
educational_content.modules module_progress.module_id, exercises.module_id Progreso del estudiante
progress_tracking.exercise_submissions TRIGGER: update_module_progress, TRIGGER: update_user_stats, TRIGGER: check_failures Teacher views, Alertas
progress_tracking.module_progress Dashboard Teacher, Reportes Ninguno
gamification_system.user_stats Leaderboards, Dashboard Teacher Rank progress, Achievements
social_features.classrooms classroom_members, teacher_classrooms, assignments Todos los datos filtrados por aula
social_features.classroom_members Queries de Teacher (filtro por aula) module_progress.classroom_id

Triggers y sus Efectos

Trigger Tabla Monitoreada Tablas Afectadas Condicion de Disparo
trg_update_module_progress exercise_submissions module_progress AFTER INSERT
trg_update_user_stats exercise_submissions user_stats, ml_coins_transactions AFTER INSERT WHEN score IS NOT NULL
trg_check_student_failures exercise_submissions student_intervention_alerts AFTER INSERT WHEN score < 60
trg_update_missions_progress exercise_submissions user_missions AFTER INSERT

2.2 Capa de Backend

Services y sus Dependencias

┌─────────────────────────────────────────────────────────────────────────────┐
│                    EXERCISE-SUBMISSION.SERVICE.TS                           │
│                    (Punto de entrada principal)                             │
└─────────────────────────────────────────────────────────────────────────────┘
                                    │
                    ┌───────────────┼───────────────┐
                    │               │               │
                    ▼               ▼               ▼
           ┌───────────────┐ ┌───────────────┐ ┌───────────────┐
           │ EntityManager │ │ExerciseAnswer │ │ModuleProgress │
           │  (TypeORM)    │ │  Validator    │ │   Service     │
           └───────────────┘ └───────────────┘ └───────────────┘
                    │               │               │
                    │               │               ├──► Actualiza module_progress
                    │               │               │
                    │               ▼               │
                    │      Valida estructura      │
                    │      de respuestas          │
                    │               │               │
                    ▼               │               │
           Guarda en BD ◄──────────┘               │
                    │                               │
                    ├── DISPARA TRIGGERS ──────────┘
                    │
                    ├──────────────────────────────────────────────┐
                    │                                              │
                    ▼                                              ▼
           ┌───────────────┐                              ┌───────────────┐
           │ UserStats     │                              │ MLCoins       │
           │   Service     │                              │   Service     │
           └───────────────┘                              └───────────────┘
                    │                                              │
                    ├──► Actualiza XP                              │
                    ├──► Verifica level up                         ├──► Agrega monedas
                    ├──► Verifica achievements                     ├──► Registra transaccion
                    └──► Verifica rank up                          │
                                                                   │
                                                                   ▼
                                                          ┌───────────────┐
                                                          │ Missions      │
                                                          │   Service     │
                                                          └───────────────┘
                                                                   │
                                                                   └──► Actualiza progreso mision

DTOs y sus Consumidores

DTO Definido en Consumido por Student Consumido por Teacher
CreateSubmissionDto progress/dto ExercisePage.tsx -
SubmissionResponseDto progress/dto ExercisePage.tsx ExerciseResponsesPage.tsx
ModuleProgressDto progress/dto DashboardComplete.tsx TeacherProgressPage.tsx
UserStatsDto gamification/dto ProfilePage.tsx TeacherGamificationPage.tsx
ExerciseResponseDto teacher/dto - ExerciseResponsesPage.tsx

2.3 Capa de Frontend

Hooks y APIs que Comparten Datos

API Service Hooks Student Hooks Teacher Datos Compartidos
progressAPI useDashboardData, useUserModules useStudentProgress module_progress
gamificationAPI useGamificationData useStudentsEconomy, useAchievementsStats user_stats, achievements
submissionsAPI useExerciseState useExerciseResponses exercise_submissions
missionsAPI useMissions - (pendiente) missions, user_missions

3. Matriz de Impacto por Cambio

3.1 Si Modificas la Estructura de Respuestas (answer_data)

Componente Impacto Accion Requerida
CrucigramaExercise.tsx (Student) ORIGEN Modificar estructura de respuestas
exercise-answer.validator.ts (Backend) ALTO Actualizar validador del tipo
validate_and_audit() (DB Function) ALTO Actualizar logica de comparacion
SubmissionResponseDto (Backend) ALTO Actualizar DTO de respuesta
ExerciseResponsesPage.tsx (Teacher) ALTO Actualizar renderizado de respuestas
ResponseDetailModal.tsx (Teacher) ALTO Actualizar visualizacion detallada

3.2 Si Modificas el Schema de exercise_submissions

Componente Impacto Accion Requerida
DDL en apps/database/ddl/ ORIGEN Modificar schema
exercise-submission.entity.ts CRITICO Actualizar entity
ExerciseSubmissionService CRITICO Actualizar queries
Triggers en BD CRITICO Verificar que no se rompan
SubmissionResponseDto ALTO Actualizar DTO
Teacher hooks/pages MEDIO Puede requerir actualizacion

3.3 Si Modificas los Triggers de BD

Trigger Si lo modificas, afecta a...
trg_update_module_progress Dashboard Teacher (stats incorrectas), Reportes de progreso
trg_update_user_stats Gamification en Teacher, Leaderboards, Rankings
trg_check_student_failures Alertas de intervencion (no se generan)
trg_update_missions_progress Progreso de misiones (Teacher no ve misiones activas)

3.4 Si Modificas el Calculo de Score

Componente Impacto Consecuencia
autoGrade() en Service ORIGEN Nuevo calculo
validate_and_audit() en BD POSIBLE Si calculo es en BD
exercise_submissions.score ALMACENADO Scores nuevos diferentes
Teacher Dashboard stats VISUALIZADO Promedios cambian
Triggers de gamificacion DEPENDIENTE XP/Coins cambian
Alertas de bajo rendimiento DEPENDIENTE Umbrales afectados

4. Dependencias Criticas por Funcionalidad

4.1 Flujo: Estudiante Envia Ejercicio

ORDEN DE DEPENDENCIAS (no alterar):

1. Student Frontend
   └── ExercisePage.tsx hace POST /submissions
         │
2. Backend Controller
   └── exercises.controller.ts recibe request
         │
3. Backend Service
   └── ExerciseSubmissionService.submitAndGrade()
         │
         ├── 3a. ExerciseAnswerValidator.validate()
         │       └── DEPENDE DE: estructura correcta de answer_data
         │
         ├── 3b. EntityManager.save(submission)
         │       └── DEPENDE DE: entity correcta, BD disponible
         │
         └── 3c. TRIGGERS SE DISPARAN AUTOMATICAMENTE
                 │
                 ├── trg_update_module_progress
                 │   └── DEPENDE DE: exercise.module_id existe
                 │   └── AFECTA A: module_progress (Teacher ve esto)
                 │
                 ├── trg_update_user_stats
                 │   └── DEPENDE DE: user_stats existe para user
                 │   └── AFECTA A: XP, ML Coins (Teacher ve esto)
                 │
                 └── trg_check_student_failures
                     └── DEPENDE DE: score < 60, classroom_members existe
                     └── AFECTA A: student_intervention_alerts (Teacher ve esto)

4.2 Flujo: Teacher Ve Respuestas

ORDEN DE DEPENDENCIAS:

1. Teacher Frontend
   └── TeacherExerciseResponsesPage.tsx
         │
2. Teacher Hook
   └── useExerciseResponses()
         │
         └── GET /teacher/exercise-responses
               │
3. Backend Controller
   └── teacher.controller.ts
         │
4. Backend Service
   └── ExerciseResponsesService.getResponses()
         │
         └── DEPENDE DE:
             ├── exercise_submissions (que Student genero)
             ├── exercises (para metadata del ejercicio)
             ├── profiles (para nombre del estudiante)
             └── classroom_members (para filtrar por aula del teacher)

5. Objetos que DEBEN Existir Antes de Desarrollo

5.1 Para Desarrollo en Student Portal

Objeto Ubicacion Verificar que existe
Entity ExerciseSubmission backend/progress/entities/ exercise_id, user_id, answer_data, score
Tabla exercise_submissions database/ddl/schemas/progress_tracking/ Schema correcto
Trigger update_module_progress BD SELECT * FROM pg_trigger WHERE tgname = 'trg_update_module_progress'
Trigger update_user_stats BD SELECT * FROM pg_trigger WHERE tgname = 'trg_update_user_stats'
ExerciseAnswerValidator backend/progress/dto/answers/ Validador del tipo de ejercicio

5.2 Para Desarrollo en Teacher Portal

Objeto Ubicacion Verificar que existe
Endpoint GET /teacher/exercise-responses backend/teacher/controllers/ Implementado y funcional
ExerciseResponseDto backend/teacher/dto/ Campos necesarios definidos
exercise_submissions poblada BD Hay datos de prueba
Relacion classroom_members BD Estudiantes asignados a aulas
Relacion teacher_classrooms BD Teacher asignado a aulas

6. Comandos de Verificacion

6.1 Verificar Triggers Activos

-- Listar todos los triggers relacionados con submissions
SELECT
    t.tgname AS trigger_name,
    c.relname AS table_name,
    p.proname AS function_name,
    CASE t.tgenabled
        WHEN 'O' THEN 'ENABLED (origin)'
        WHEN 'D' THEN 'DISABLED'
        WHEN 'R' THEN 'ENABLED (replica)'
        WHEN 'A' THEN 'ENABLED (always)'
    END AS status
FROM pg_trigger t
JOIN pg_class c ON t.tgrelid = c.oid
JOIN pg_proc p ON t.tgfoid = p.oid
WHERE c.relname = 'exercise_submissions';

6.2 Verificar Dependencias de FK

-- Ver todas las foreign keys que apuntan a exercise_submissions
SELECT
    tc.table_schema,
    tc.table_name,
    kcu.column_name,
    ccu.table_name AS foreign_table_name,
    ccu.column_name AS foreign_column_name
FROM information_schema.table_constraints AS tc
JOIN information_schema.key_column_usage AS kcu
    ON tc.constraint_name = kcu.constraint_name
JOIN information_schema.constraint_column_usage AS ccu
    ON ccu.constraint_name = tc.constraint_name
WHERE tc.constraint_type = 'FOREIGN KEY'
  AND (ccu.table_name = 'exercise_submissions'
       OR tc.table_name = 'exercise_submissions');

6.3 Verificar que Teacher Puede Ver Datos

-- Verificar que hay datos para un teacher especifico
SELECT
    p.first_name || ' ' || p.last_name AS student_name,
    e.title AS exercise_title,
    es.score,
    es.submitted_at
FROM progress_tracking.exercise_submissions es
JOIN auth_management.profiles p ON p.id = es.user_id
JOIN educational_content.exercises e ON e.id = es.exercise_id
JOIN social_features.classroom_members cm ON cm.user_id = es.user_id
JOIN social_features.teacher_classrooms tc ON tc.classroom_id = cm.classroom_id
WHERE tc.teacher_id = '<TEACHER_PROFILE_ID>'
ORDER BY es.submitted_at DESC
LIMIT 10;

7. Checklist de Impacto

Antes de cualquier cambio, responde estas preguntas:

7.1 Checklist General

  • ¿Este cambio afecta la estructura de answer_data?
    • Si: Actualizar validator, funcion BD, DTOs, componentes Teacher
  • ¿Este cambio afecta el schema de alguna tabla de progress_tracking?
    • Si: Actualizar entity, DTOs, triggers, queries
  • ¿Este cambio afecta triggers de BD?
    • Si: Probar flujo completo Student→Teacher
  • ¿Este cambio afecta el calculo de score?
    • Si: Actualizar triggers de gamificacion, alertas

7.2 Checklist Especifico Student

  • ¿Las respuestas se guardan con la estructura correcta?
  • ¿El endpoint POST /submissions funciona?
  • ¿Los triggers se disparan correctamente?
  • ¿module_progress se actualiza?
  • ¿user_stats se actualiza?

7.3 Checklist Especifico Teacher

  • ¿El endpoint GET /exercise-responses devuelve datos?
  • ¿Los datos incluyen el formato correcto de respuestas?
  • ¿El filtro por classroom funciona?
  • ¿Se puede calificar una submission?

Documento creado por: Architecture-Analyst Fecha: 2025-11-29 Estado: VIGENTE