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

353 lines
16 KiB
Markdown

# 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
```sql
-- 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
```sql
-- 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
```sql
-- 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 StudentTeacher
- [ ] ¿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