workspace/projects/gamilit/orchestration/inventarios/BACKEND_INVENTORY.yml
rckrdmrd f248f65071 docs: Correcciones P1 completas - Communication, Mecanicas, Backend inventory
## Documentacion nueva:
- SCHEMA-COMMUNICATION.md: Tabla messages, indices, RLS, funciones
- MECANICAS-EDUCATIVAS.md: 30 mecanicas documentadas por modulo
  - 3 mecanicas extra identificadas (Emparejamiento, MapaConceptual, LecturaInferencial)
  - 4 mecanicas removidas documentadas (M4)

## Actualizaciones:
- BACKEND_INVENTORY.yml v3.0.0: Metricas corregidas
  - modules: 16, services: 103, controllers: 76
  - Admin module: 22 controllers, 22 services

Progreso auditoria: P0 100%, P1 100%
Pendiente: P2 (6 tareas)

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

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

1618 lines
52 KiB
YAML

# BACKEND INVENTORY - GAMILIT
# Inventario completo de objetos del backend
# Generado: 2025-01-11
# Fuente: Validación VAL-001
metadata:
version: "3.0.0"
generated_date: "2025-11-11"
last_updated: "2025-12-23"
generated_by: "Requirements-Analyst - Auditoria Documentacion vs Desarrollo"
framework: "NestJS 11.1.8 + TypeScript 5.x + TypeORM 0.3.x"
database: "PostgreSQL 16"
package_manager: "npm"
total_modules: 16 # ✅ Auditoria 2025-12-23 (admin, auth, educational, gamification, health, notifications, progress, social, teacher, websocket, etc.)
total_entities: 93 # ✅ Auditoria 2025-12-23
total_dtos: 327 # ✅ Verificado 2025-12-18
total_services: 103 # ✅ Auditoria 2025-12-23 (admin:22, teacher:16, +otros)
total_controllers: 76 # ✅ Auditoria 2025-12-23 (admin:22, teacher:8, +otros)
total_endpoints: "300+" # ✅ Auditoria 2025-12-23 (admin:150+, teacher:50+, +otros)
typescript_errors: 0 # ⚠️ 2025-11-28: Backend tiene errores PREEXISTENTES en tests auth (no en admin)
build_status: "⚠️ PREEXISTING TEST ERRORS" # 2025-11-28: auth-derived-fields.service.spec.ts (no admin)
coherencia_bd: "97%" # ✅ Validado 2025-11-11 (87/117 tablas con entity, resto auxiliares)
discrepancies_found: "ninguna - M4 tiene 5 ejercicios oficiales según DocumentoDeDiseño v6.4"
api_docs:
- "docs/90-transversal/api/API-TEACHER-MODULE.md"
- "docs/90-transversal/api/API-ADMIN-MODULE.md"
# ============================================================================
# MÓDULOS (Modules)
# ============================================================================
modules:
- name: "auth"
description: "Autenticación y autorización"
path: "apps/backend/src/modules/auth"
schema_db: "auth_management"
entities: 12
services: 5
controllers: 2
dtos: 37
main_features:
- "Registro y login"
- "JWT tokens"
- "Recuperación de contraseña"
- "Verificación de email"
- "Gestión de sesiones"
- "Roles y permisos"
- "Multi-tenant support"
status: "✅ Active"
- name: "admin"
description: "Administración del sistema"
path: "apps/backend/src/modules/admin"
schema_db: "system_configuration, admin_dashboard"
entities: 6
services: 22 # ✅ Auditoria 2025-12-23
controllers: 22 # ✅ Auditoria 2025-12-23
api_doc: "docs/90-transversal/api/API-ADMIN-MODULE.md"
dtos: 118
dtos_by_subfolder:
alerts: 7
analytics: 10
bulk_operations: 5
classroom_assignments: 17
content: 10
dashboard: 11
gamification_config: 8
interventions: 5
monitoring: 5
organizations: 9
progress: 12
reports: 1
roles: 2
system: 9
users: 7
main_features:
- "Gestión de usuarios"
- "Gestión de organizaciones"
- "Gestión de contenido"
- "Configuración del sistema"
- "Feature flags"
- "System settings"
- "Alertas e intervenciones"
- "Analytics y reportes"
- "Monitoreo de sistema"
- "Progreso de estudiantes"
status: "✅ Active"
- name: "educational"
description: "Contenido educativo"
path: "apps/backend/src/modules/educational"
schema_db: "educational_content"
entities: 5
services: 4
controllers: 4
dtos: 1
main_features:
- "Módulos educativos"
- "Ejercicios interactivos"
- "Recursos multimedia"
- "Rúbricas de evaluación"
- "Media uploads (M4-M5)"
status: "✅ Active"
- name: "assignments"
description: "Asignaciones y tareas"
path: "apps/backend/src/modules/assignments"
schema_db: "educational_content"
entities: 5
services: 1
controllers: 1
dtos: 4
main_features:
- "Crear asignaciones"
- "Asignar a aulas"
- "Envío de tareas"
- "Calificación automática"
status: "✅ Active"
- name: "gamification"
description: "Sistema de gamificación"
path: "apps/backend/src/modules/gamification"
schema_db: "gamification_system"
entities: 16
services: 8
controllers: 9
dtos: 5
main_features:
- "Estadísticas de usuario"
- "Rangos Maya"
- "ML Coins (economía)"
- "Logros y badges"
- "Leaderboards"
- "Misiones diarias/semanales"
- "Comodines/Power-ups"
- "Shop system (M4-M5)"
status: "✅ Active"
- name: "progress"
description: "Seguimiento de progreso"
path: "apps/backend/src/modules/progress"
schema_db: "progress_tracking"
entities: 13
services: 7
controllers: 5
dtos: 12
main_features:
- "Progreso de módulos"
- "Intentos de ejercicios"
- "Envío de ejercicios"
- "Sesiones de aprendizaje"
- "Misiones programadas"
- "Actividad reciente"
- "Actividades pendientes"
status: "✅ Active"
- name: "social"
description: "Características sociales"
path: "apps/backend/src/modules/social"
schema_db: "social_features"
entities: 10
services: 9
controllers: 9
dtos: 20
main_features:
- "Amistades"
- "Escuelas"
- "Aulas (classrooms)"
- "Equipos (teams)"
- "Desafíos entre pares"
- "Desafíos de equipo"
- "Miembros de aula"
status: "✅ Active"
- name: "content"
description: "Gestión de contenido"
path: "apps/backend/src/modules/content"
schema_db: "content_management"
entities: 5
services: 5
controllers: 5
dtos: 11
main_features:
- "Plantillas de contenido"
- "Contenido Marie Curie"
- "Archivos multimedia"
- "Autores de contenido"
- "Categorías de contenido"
status: "✅ Active"
- name: "notifications"
description: "Sistema de notificaciones"
path: "apps/backend/src/modules/notifications"
schema_db: "gamification_system"
entities: 1
services: 1
controllers: 1
dtos: 4
main_features:
- "Envío de notificaciones"
- "Notificaciones en tiempo real"
- "Historial de notificaciones"
- "Paginación de notificaciones"
status: "✅ Active"
- name: "teacher"
description: "Funcionalidades para profesores"
path: "apps/backend/src/modules/teacher"
schema_db: "multiple"
entities: 1
services: 5
controllers: 2
dtos: 5
main_features:
- "Dashboard del profesor"
- "Calificación de tareas"
- "Análisis de estudiantes"
- "Seguimiento de progreso"
- "Notas de profesor"
- "Manual review (M4-M5)"
status: "✅ Active"
- name: "audit"
description: "Auditoría del sistema"
path: "apps/backend/src/modules/audit"
schema_db: "audit_logging"
entities: 1
services: 1
controllers: 0
dtos: 1
main_features:
- "Logs de auditoría"
- "Tracking de eventos"
- "Seguridad del sistema"
status: "✅ Active"
- name: "tasks"
description: "Tareas programadas (Cron)"
path: "apps/backend/src/modules/tasks"
schema_db: "multiple"
entities: 0
services: 2
controllers: 0
dtos: 0
main_features:
- "Notificaciones periódicas"
- "Misiones diarias/semanales"
- "Limpieza de datos"
status: "✅ Active"
# ============================================================================
# ENTITIES (TypeORM Entities)
# ============================================================================
entities:
count: 69
by_module:
auth: 12
gamification: 16
educational: 5
progress: 14
social: 10
content: 5
assignments: 5
notifications: 1
admin: 3
audit: 1
teacher: 1
auth_management:
- name: "User"
file: "user.entity.ts"
table: "auth_management.users"
description: "Usuario del sistema (autenticación estándar)"
relations:
- "Profile (1:1)"
- "UserRole (1:N)"
- "UserSession (1:N)"
status: "✅ Active"
- name: "Profile"
file: "profile.entity.ts"
table: "auth_management.profiles"
description: "Perfil extendido de usuario"
relations:
- "User (N:1)"
- "School (N:1)"
status: "✅ Active"
- name: "Role"
file: "role.entity.ts"
table: "auth_management.roles"
description: "Roles del sistema"
relations:
- "UserRole (1:N)"
status: "✅ Active"
- name: "UserRole"
file: "user-role.entity.ts"
table: "auth_management.user_roles"
description: "Tabla pivot usuario-rol"
relations:
- "User (N:1)"
- "Role (N:1)"
status: "✅ Active"
- name: "Tenant"
file: "tenant.entity.ts"
table: "auth_management.tenants"
description: "Organizaciones multi-tenant"
relations:
- "Membership (1:N)"
status: "✅ Active"
- name: "Membership"
file: "membership.entity.ts"
table: "auth_management.memberships"
description: "Membresía de usuario en tenant"
relations:
- "User (N:1)"
- "Tenant (N:1)"
status: "✅ Active"
- name: "AuthProvider"
file: "auth-provider.entity.ts"
table: "auth_management.auth_providers"
description: "Proveedores de autenticación"
relations: []
status: "✅ Active"
- name: "AuthAttempt"
file: "auth-attempt.entity.ts"
table: "auth_management.auth_attempts"
description: "Intentos de autenticación"
relations:
- "User (N:1)"
status: "✅ Active"
- name: "UserSession"
file: "user-session.entity.ts"
table: "auth_management.user_sessions"
description: "Sesiones de usuario"
relations:
- "User (N:1)"
status: "✅ Active"
- name: "EmailVerificationToken"
file: "email-verification-token.entity.ts"
table: "auth_management.email_verification_tokens"
description: "Tokens de verificación de email"
relations:
- "User (N:1)"
status: "✅ Active"
- name: "PasswordResetToken"
file: "password-reset-token.entity.ts"
table: "auth_management.password_reset_tokens"
description: "Tokens de reseteo de contraseña"
relations:
- "User (N:1)"
status: "✅ Active"
- name: "SecurityEvent"
file: "security-event.entity.ts"
table: "auth_management.security_events"
description: "Eventos de seguridad"
relations:
- "User (N:1)"
status: "✅ Active"
gamification_system:
- name: "UserStats"
file: "user-stats.entity.ts"
table: "gamification_system.user_stats"
description: "Estadísticas de usuario"
relations:
- "User (N:1)"
status: "✅ Active"
- name: "UserRank"
file: "user-rank.entity.ts"
table: "gamification_system.user_ranks"
description: "Rango Maya del usuario"
relations:
- "User (N:1)"
status: "✅ Active"
- name: "Achievement"
file: "achievement.entity.ts"
table: "gamification_system.achievements"
description: "Logros del sistema"
relations:
- "AchievementCategory (N:1)"
- "UserAchievement (1:N)"
status: "✅ Active"
- name: "AchievementCategory"
file: "achievement-category.entity.ts"
table: "gamification_system.achievement_categories"
description: "Categorías de logros"
relations:
- "Achievement (1:N)"
status: "✅ Active"
- name: "UserAchievement"
file: "user-achievement.entity.ts"
table: "gamification_system.user_achievements"
description: "Logros desbloqueados por usuario"
relations:
- "User (N:1)"
- "Achievement (N:1)"
status: "✅ Active"
- name: "MLCoinsTransaction"
file: "ml-coins-transaction.entity.ts"
table: "gamification_system.ml_coins_transactions"
description: "Transacciones de ML Coins"
relations:
- "User (N:1)"
status: "✅ Active"
- name: "Mission"
file: "mission.entity.ts"
table: "gamification_system.missions"
description: "Misiones del sistema"
relations: []
status: "✅ Active"
- name: "ComodinesInventory"
file: "comodines-inventory.entity.ts"
table: "gamification_system.comodines_inventory"
description: "Inventario de comodines del usuario"
relations:
- "User (N:1)"
status: "✅ Active"
- name: "ActiveBoost"
file: "active-boost.entity.ts"
table: "gamification_system.active_boosts"
description: "Power-ups activos"
relations:
- "User (N:1)"
status: "✅ Active"
- name: "InventoryTransaction"
file: "inventory-transaction.entity.ts"
table: "gamification_system.inventory_transactions"
description: "Transacciones de inventario"
relations:
- "User (N:1)"
status: "✅ Active"
- name: "LeaderboardMetadata"
file: "leaderboard-metadata.entity.ts"
table: "gamification_system.leaderboard_metadata"
description: "Metadata de leaderboards"
relations: []
status: "✅ Active"
- name: "ShopCategory"
file: "shop-category.entity.ts"
table: "gamification_system.shop_categories"
description: "Categorías de la tienda (M4-M5)"
relations:
- "ShopItem (1:N)"
status: "✅ Active"
notes: "Implementado en M4-M5 para sistema de tienda"
- name: "ShopItem"
file: "shop-item.entity.ts"
table: "gamification_system.shop_items"
description: "Items de la tienda (M4-M5)"
relations:
- "ShopCategory (N:1)"
- "UserPurchase (1:N)"
status: "✅ Active"
notes: "Implementado en M4-M5 para sistema de tienda"
- name: "UserPurchase"
file: "user-purchase.entity.ts"
table: "gamification_system.user_purchases"
description: "Compras de usuarios en la tienda (M4-M5)"
relations:
- "User (N:1)"
- "ShopItem (N:1)"
status: "✅ Active"
notes: "Implementado en M4-M5 para sistema de tienda"
- name: "Notification"
file: "notification.entity.ts"
path: "modules/notifications/entities"
table: "gamification_system.notifications"
description: "Notificaciones del sistema"
relations:
- "User (N:1)"
status: "✅ Active"
educational_content:
- name: "Module"
file: "module.entity.ts"
table: "educational_content.modules"
description: "Módulos educativos"
relations:
- "Exercise (1:N)"
- "ModuleProgress (1:N)"
status: "✅ Active"
- name: "Exercise"
file: "exercise.entity.ts"
table: "educational_content.exercises"
description: "Ejercicios interactivos"
relations:
- "Module (N:1)"
- "ExerciseAttempt (1:N)"
status: "✅ Active"
- name: "AssessmentRubric"
file: "assessment-rubric.entity.ts"
table: "educational_content.assessment_rubrics"
description: "Rúbricas de evaluación"
relations:
- "Exercise (N:1)"
status: "✅ Active"
- name: "MediaResource"
file: "media-resource.entity.ts"
table: "educational_content.media_resources"
description: "Recursos multimedia"
relations:
- "Exercise (N:1)"
- "Module (N:1)"
status: "✅ Active"
- name: "MediaAttachment"
file: "media-attachment.entity.ts"
table: "educational_content.media_attachments"
description: "Adjuntos multimedia para ejercicios (M4-M5)"
relations:
- "ExerciseSubmission (N:1)"
- "User (N:1)"
status: "✅ Active"
notes: "Implementado en M4-M5 para soportar audio/video uploads"
- name: "Assignment"
file: "assignment.entity.ts"
path: "modules/assignments/entities"
table: "educational_content.assignments"
description: "Asignaciones de profesor"
relations:
- "AssignmentExercise (1:N)"
- "AssignmentStudent (1:N)"
status: "✅ Active"
- name: "AssignmentExercise"
file: "assignment-exercise.entity.ts"
path: "modules/assignments/entities"
table: "educational_content.assignment_exercises"
description: "Ejercicios de una asignación"
relations:
- "Assignment (N:1)"
- "Exercise (N:1)"
status: "✅ Active"
- name: "AssignmentStudent"
file: "assignment-student.entity.ts"
path: "modules/assignments/entities"
table: "educational_content.assignment_students"
description: "Estudiantes asignados"
relations:
- "Assignment (N:1)"
- "User (N:1)"
status: "✅ Active"
- name: "AssignmentSubmission"
file: "assignment-submission.entity.ts"
path: "modules/assignments/entities"
table: "educational_content.assignment_submissions"
description: "Envíos de asignaciones"
relations:
- "Assignment (N:1)"
- "User (N:1)"
status: "✅ Active"
# REMOVED (2025-11-28): Duplicado eliminado - usar versión de modules/social/entities
# AssignmentClassroom ahora está solo en modules/social/entities (tabla: social_features.assignment_classrooms)
progress_tracking:
- name: "ModuleProgress"
file: "module-progress.entity.ts"
table: "progress_tracking.module_progress"
description: "Progreso de módulos"
relations:
- "User (N:1)"
- "Module (N:1)"
status: "✅ Active"
- name: "ExerciseAttempt"
file: "exercise-attempt.entity.ts"
table: "progress_tracking.exercise_attempts"
description: "Intentos de ejercicios"
relations:
- "User (N:1)"
- "Exercise (N:1)"
status: "✅ Active"
- name: "ExerciseSubmission"
file: "exercise-submission.entity.ts"
table: "progress_tracking.exercise_submissions"
description: "Envíos de ejercicios"
relations:
- "User (N:1)"
- "Exercise (N:1)"
status: "✅ Active"
- name: "LearningSession"
file: "learning-session.entity.ts"
table: "progress_tracking.learning_sessions"
description: "Sesiones de aprendizaje"
relations:
- "User (N:1)"
- "Module (N:1)"
status: "✅ Active"
- name: "ScheduledMission"
file: "scheduled-mission.entity.ts"
table: "progress_tracking.scheduled_missions"
description: "Misiones programadas"
relations:
- "User (N:1)"
- "Mission (N:1)"
status: "✅ Active"
- name: "TeacherNote"
file: "teacher-note.entity.ts"
table: "progress_tracking.teacher_notes"
description: "Notas del profesor"
relations:
- "Teacher (N:1)"
- "Student (N:1)"
status: "✅ Active"
- name: "EngagementMetrics"
file: "engagement-metrics.entity.ts"
table: "progress_tracking.engagement_metrics"
description: "Métricas de engagement"
relations:
- "User (N:1)"
status: "✅ Active"
- name: "LearningPath"
file: "learning-path.entity.ts"
table: "progress_tracking.learning_paths"
description: "Rutas de aprendizaje"
relations: []
status: "✅ Active"
- name: "UserLearningPath"
file: "user-learning-path.entity.ts"
table: "progress_tracking.user_learning_paths"
description: "Rutas de aprendizaje de usuario"
relations:
- "User (N:1)"
- "LearningPath (N:1)"
status: "✅ Active"
- name: "MasteryTracking"
file: "mastery-tracking.entity.ts"
table: "progress_tracking.mastery_tracking"
description: "Seguimiento de maestría"
relations:
- "User (N:1)"
status: "✅ Active"
- name: "ProgressSnapshot"
file: "progress-snapshot.entity.ts"
table: "progress_tracking.progress_snapshots"
description: "Snapshots de progreso"
relations:
- "User (N:1)"
status: "✅ Active"
- name: "SkillAssessment"
file: "skill-assessment.entity.ts"
table: "progress_tracking.skill_assessments"
description: "Evaluaciones de habilidades"
relations:
- "User (N:1)"
status: "✅ Active"
- name: "ManualReview"
file: "manual-review.entity.ts"
table: "progress_tracking.manual_reviews"
description: "Revisiones manuales de ejercicios por profesores (M4-M5)"
relations:
- "ExerciseSubmission (N:1)"
- "Teacher (N:1)"
- "Student (N:1)"
status: "✅ Active"
notes: "Implementado en M4-M5 para evaluación manual de contenido creativo"
social_features:
- name: "Friendship"
file: "friendship.entity.ts"
table: "social_features.friendships"
description: "Amistades entre usuarios"
relations:
- "User (N:1)"
- "Friend (N:1)"
status: "✅ Active"
- name: "School"
file: "school.entity.ts"
table: "social_features.schools"
description: "Escuelas"
relations:
- "Classroom (1:N)"
- "Profile (1:N)"
status: "✅ Active"
- name: "Classroom"
file: "classroom.entity.ts"
table: "social_features.classrooms"
description: "Aulas/Clases"
relations:
- "School (N:1)"
- "ClassroomMember (1:N)"
status: "✅ Active"
- name: "ClassroomMember"
file: "classroom-member.entity.ts"
table: "social_features.classroom_members"
description: "Miembros de aula"
relations:
- "Classroom (N:1)"
- "User (N:1)"
status: "✅ Active"
- name: "Team"
file: "team.entity.ts"
table: "social_features.teams"
description: "Equipos/Gremios"
relations:
- "TeamMember (1:N)"
- "TeamChallenge (1:N)"
status: "✅ Active"
- name: "TeamMember"
file: "team-member.entity.ts"
table: "social_features.team_members"
description: "Miembros de equipo"
relations:
- "Team (N:1)"
- "User (N:1)"
status: "✅ Active"
- name: "TeamChallenge"
file: "team-challenge.entity.ts"
table: "social_features.team_challenges"
description: "Desafíos de equipo"
relations:
- "Team (N:1)"
- "OpponentTeam (N:1)"
status: "✅ Active"
- name: "PeerChallenge"
file: "peer-challenge.entity.ts"
table: "social_features.peer_challenges"
description: "Desafíos entre pares"
relations:
- "Challenger (N:1)"
- "Challenged (N:1)"
status: "✅ Active"
- name: "ChallengeParticipant"
file: "challenge-participant.entity.ts"
table: "social_features.challenge_participants"
description: "Participantes de desafío"
relations:
- "Challenge (N:1)"
- "User (N:1)"
status: "✅ Active"
- name: "AssignmentClassroom"
file: "assignment-classroom.entity.ts"
path: "modules/social/entities"
table: "social_features.assignment_classrooms"
description: "Asignaciones a aulas (M2M entre assignments y classrooms)"
relations:
- "Assignment (N:1)"
- "Classroom (N:1)"
status: "✅ Active"
notes: "ÚNICO - Duplicado en modules/assignments eliminado (2025-11-28)"
content_management:
- name: "ContentTemplate"
file: "content-template.entity.ts"
table: "content_management.content_templates"
description: "Plantillas de contenido"
relations: []
status: "✅ Active"
- name: "MarieCurieContent"
file: "marie-curie-content.entity.ts"
table: "content_management.marie_curie_content"
description: "Contenido Marie Curie"
relations: []
status: "✅ Active"
- name: "MediaFile"
file: "media-file.entity.ts"
table: "content_management.media_files"
description: "Archivos multimedia"
relations: []
status: "✅ Active"
- name: "ContentAuthor"
file: "content-author.entity.ts"
table: "content_management.content_authors"
description: "Autores de contenido"
relations:
- "User (N:1)"
status: "✅ Active"
- name: "ContentCategory"
file: "content-category.entity.ts"
table: "content_management.content_categories"
description: "Categorías de contenido"
relations: []
status: "✅ Active"
system_configuration:
- name: "SystemSetting"
file: "system-setting.entity.ts"
path: "modules/admin/entities"
table: "system_configuration.system_settings"
description: "Configuración del sistema"
relations: []
status: "✅ Active"
- name: "FeatureFlag"
file: "feature-flag.entity.ts"
path: "modules/admin/entities"
table: "system_configuration.feature_flags"
description: "Feature flags"
relations: []
status: "✅ Active"
- name: "NotificationSettings"
file: "notification-settings.entity.ts"
path: "modules/admin/entities"
table: "system_configuration.notification_settings"
description: "Configuración de notificaciones"
relations:
- "User (N:1)"
status: "✅ Active"
audit_logging:
- name: "AuditLog"
file: "audit-log.entity.ts"
table: "audit_logging.audit_logs"
description: "Logs de auditoría"
relations:
- "User (N:1)"
status: "✅ Active"
# ============================================================================
# DTOS (Data Transfer Objects)
# ============================================================================
dtos:
count: 274
by_module:
admin: 118
auth: 37
assignments: 4
audit: 1
content: 11
educational: 1
gamification: 5
notifications: 4
progress: 12
social: 20
teacher: 5
categories:
create:
count: 30
description: "DTOs para crear entidades"
example: "CreateUserDto, CreateModuleDto"
update:
count: 15
description: "DTOs para actualizar entidades"
example: "UpdateUserDto, UpdateProfileDto"
response:
count: 35
description: "DTOs de respuesta de API"
example: "UserResponseDto, ModuleResponseDto"
query:
count: 10
description: "DTOs de consultas y filtros"
example: "GetNotificationsQueryDto, PaginatedDto"
action:
count: 20
description: "DTOs de acciones específicas"
example: "LoginDto, RegisterDto, GradeSubmissionDto"
other:
count: 40
description: "Otros DTOs especializados"
# ============================================================================
# SERVICES (Business Logic)
# ============================================================================
services:
count: 55
by_module:
auth: 5
admin: 4
educational: 4
assignments: 1
gamification: 8
progress: 7
social: 9
content: 5
notifications: 1
teacher: 5
audit: 1
tasks: 2
auth_services:
- name: "AuthService"
description: "Autenticación principal"
main_methods:
- "register()"
- "login()"
- "logout()"
- "refreshToken()"
- name: "PasswordRecoveryService"
description: "Recuperación de contraseña"
main_methods:
- "requestReset()"
- "resetPassword()"
- name: "EmailVerificationService"
description: "Verificación de email"
main_methods:
- "sendVerificationEmail()"
- "verifyEmail()"
- name: "SessionManagementService"
description: "Gestión de sesiones"
main_methods:
- "createSession()"
- "invalidateSession()"
- name: "SecurityService"
description: "Seguridad del sistema"
main_methods:
- "logSecurityEvent()"
- "detectSuspiciousActivity()"
gamification_services:
- name: "UserStatsService"
description: "Estadísticas de usuario"
main_methods:
- "getUserStats()"
- "updateXP()"
- name: "RanksService"
description: "Sistema de rangos Maya"
main_methods:
- "getUserRank()"
- "checkPromotion()"
- "promoteToNextRank()"
- name: "MLCoinsService"
description: "Economía de ML Coins"
main_methods:
- "getBalance()"
- "addCoins()"
- "spendCoins()"
- "getTransactions()"
- name: "AchievementsService"
description: "Sistema de logros"
main_methods:
- "getAchievements()"
- "unlockAchievement()"
- "checkConditions()"
- name: "LeaderboardService"
description: "Tablas de clasificación"
main_methods:
- "getGlobalLeaderboard()"
- "getClassroomLeaderboard()"
- "getUserRank()"
- name: "MissionsService"
description: "Sistema de misiones"
main_methods:
- "getActiveMissions()"
- "claimReward()"
- "updateProgress()"
- name: "ComodinesService"
description: "Power-ups y comodines"
main_methods:
- "getInventory()"
- "useComodin()"
- "purchaseComodin()"
- name: "ShopService"
description: "Sistema de tienda ML Coins (M4-M5)"
main_methods:
- "getCategories()"
- "getItems()"
- "purchaseItem()"
- "getUserPurchases()"
notes: "Implementado en M4-M5 para tienda de recompensas"
educational_services:
- name: "ModulesService"
description: "Gestión de módulos educativos"
- name: "ExercisesService"
description: "Gestión de ejercicios"
- name: "MediaResourcesService"
description: "Gestión de recursos multimedia"
- name: "MediaStorageService"
description: "Almacenamiento de archivos multimedia (M4-M5)"
main_methods:
- "uploadMedia()"
- "deleteMedia()"
- "getMediaUrl()"
notes: "Implementado en M4-M5 para uploads de audio/video"
teacher_services:
- name: "TeacherDashboardService"
description: "Dashboard del profesor"
- name: "GradingService"
description: "Calificación de tareas"
- name: "StudentAnalysisService"
description: "Análisis de estudiantes"
- name: "ProgressTrackingService"
description: "Seguimiento de progreso"
- name: "ManualReviewService"
description: "Revisión manual de ejercicios (M4-M5)"
main_methods:
- "createReview()"
- "updateReview()"
- "getPendingReviews()"
- "getReviewById()"
notes: "Implementado en M4-M5 para evaluación de contenido creativo"
# ============================================================================
# CONTROLLERS (API Endpoints)
# ============================================================================
controllers:
count: 41
by_module:
admin: 4
assignments: 1
auth: 2
content: 5
educational: 4
gamification: 9
notifications: 1
progress: 5
social: 9
teacher: 2
base_path: "/api"
swagger_path: "/api/docs"
main_routes:
auth:
- "POST /api/auth/register"
- "POST /api/auth/login"
- "POST /api/auth/logout"
- "POST /api/auth/refresh"
- "POST /api/auth/password/reset"
- "POST /api/auth/email/verify"
educational:
- "GET /api/educational/modules"
- "GET /api/educational/modules/:id"
- "GET /api/educational/exercises"
- "GET /api/educational/exercises/:id"
- "POST /api/educational/exercises/:id/submit"
- "POST /api/educational/media/upload (M4-M5)"
- "DELETE /api/educational/media/:id (M4-M5)"
gamification:
- "GET /api/gamification/stats"
- "GET /api/gamification/ranks"
- "GET /api/gamification/achievements"
- "GET /api/gamification/leaderboard"
- "GET /api/gamification/ml-coins/balance"
- "GET /api/gamification/missions"
- "POST /api/gamification/missions/:id/claim"
- "GET /api/gamification/shop/categories (M4-M5)"
- "GET /api/gamification/shop/items (M4-M5)"
- "POST /api/gamification/shop/purchase (M4-M5)"
- "GET /api/gamification/shop/purchases (M4-M5)"
progress:
- "GET /api/progress/modules/:id"
- "GET /api/progress/recent"
- "GET /api/progress/pending"
- "POST /api/progress/attempts"
- "POST /api/progress/submissions"
social:
- "GET /api/social/friends"
- "POST /api/social/friends/:id/request"
- "GET /api/social/classrooms"
- "GET /api/social/teams"
- "POST /api/social/challenges"
teacher:
- "GET /api/teacher/dashboard"
- "GET /api/teacher/students/:id/analysis"
- "POST /api/teacher/grading"
- "POST /api/teacher/notes"
- "GET /api/teacher/reviews/pending (M4-M5)"
- "POST /api/teacher/reviews (M4-M5)"
- "PUT /api/teacher/reviews/:id (M4-M5)"
- "GET /api/teacher/reviews/:id (M4-M5)"
# Teacher Assignments Controller
# IMPORTANTE: El orden de rutas es crítico en NestJS - rutas estáticas ANTES de rutas con parámetros
teacher_assignments:
prefix: "/api/v1/teacher/assignments"
controller: "AssignmentsController"
routes_order: # Orden de declaración en el controlador (determina prioridad de matching)
- "POST / # create()"
- "GET / # findAll()"
- "GET /upcoming # getUpcoming() - DEBE ir antes de /:id"
- "GET /:id # findOne()"
- "PUT /:id # update()"
- "DELETE /:id # remove()"
- "POST /:id/assign # assignToClassrooms()"
- "GET /:id/submissions # getSubmissions()"
- "POST /:assignmentId/submissions/:submissionId/grade # gradeSubmission()"
- "PATCH /:id # patch()"
- "POST /:id/distribute # distribute()"
- "POST /:id/duplicate # duplicate()"
- "POST /:id/publish # publish()"
- "POST /:id/close # close()"
- "POST /:id/send-reminder # sendReminder()"
routing_notes: |
En NestJS, las rutas se evalúan en orden de declaración.
Las rutas estáticas (como /upcoming) DEBEN declararse ANTES de rutas
parametrizadas (como /:id) para evitar que el parámetro capture valores literales.
Ejemplo: GET /upcoming debe ir antes de GET /:id, o "upcoming" será interpretado como un UUID.
# ============================================================================
# CONSTANTS (Shared Constants)
# ============================================================================
constants:
- name: "database.constants.ts"
path: "shared/constants"
description: "Nombres de schemas y tablas (SSOT)"
exports:
- "DB_SCHEMAS"
- "DB_TABLES"
- "getFullTableName()"
total_schemas: 14
total_tables: 90
- name: "enums.constants.ts"
path: "shared/constants"
description: "ENUMs sincronizados con Database/Frontend"
total_enums: 25
main_enums:
- "DifficultyLevelEnum"
- "MayaRank"
- "TransactionTypeEnum"
- "NotificationTypeEnum"
- "ProgressStatusEnum"
- name: "routes.constants.ts"
path: "shared/constants"
description: "Rutas API centralizadas"
exports:
- "API_ROUTES"
- "API_VERSIONS"
# ============================================================================
# DATABASE DATASOURCES (TypeORM)
# UPDATED (2025-12-18): Corregido conteo de 6 a 9 datasources reales
# ============================================================================
datasources:
count: 9
path: "app.module.ts (TypeOrmModule.forRootAsync)"
files:
- name: "auth"
schema: "auth_management"
entities_path: "/modules/auth/entities/**/*.entity"
entities: 12
- name: "educational"
schema: "educational_content"
entities_path: "/modules/educational/entities/**/*.entity + /modules/assignments/entities/**/*.entity + /modules/teacher/entities/teacher-content.entity"
entities: 14
note: "CORRECTED 2025-12-18: Agregados paths de assignments y teacher-content"
- name: "gamification"
schema: "gamification_system"
entities_path: "/modules/gamification/entities/**/*.entity + /modules/notifications/notification.entity"
entities: 14
- name: "progress"
schema: "progress_tracking"
entities_path: "/modules/progress/entities/**/*.entity"
entities: 13
- name: "social"
schema: "social_features"
entities_path: "/modules/social/entities/**/*.entity"
entities: 10
- name: "content"
schema: "content_management"
entities_path: "/modules/content/entities/**/*.entity"
entities: 5
- name: "audit"
schema: "audit_logging"
entities_path: "/modules/audit/entities/**/*.entity"
entities: 3
note: "ADDED 2025-12-18"
- name: "notifications"
schema: "notifications"
entities_path: "/modules/notifications/entities/multichannel/**/*.entity"
entities: 4
note: "ADDED 2025-12-18"
- name: "communication"
schema: "communication"
entities_path: "/modules/teacher/entities/message*.entity"
entities: 2
note: "ADDED 2025-12-18"
# ============================================================================
# ESTADÍSTICAS
# ============================================================================
statistics:
total_files: 532
breakdown:
entities: 69
dtos: 274
services: 55
controllers: 41
modules: 14
datasources: 9
guards: 8
interceptors: 5
decorators: 10
pipes: 4
filters: 3
other: 43
code_quality:
typescript_coverage: "100%"
unit_tests: "20%"
integration_tests: "10%"
eslint_compliance: "98%"
largest_modules:
- name: "gamification"
files: 100
percentage: "25%"
- name: "progress"
files: 80
percentage: "20%"
- name: "auth"
files: 70
percentage: "17.5%"
# ============================================================================
# ESTADO DEL PROYECTO
# ============================================================================
project_status:
build_status: "✅ Passing"
typescript_errors: 0
eslint_warnings: 5
swagger_documentation: "✅ Complete"
api_versioning: "v1"
areas_improvement:
- "Aumentar cobertura de tests (20% → 70%)"
- "Agregar validación exhaustiva de DTOs"
- "Implementar más tests de integración"
- "Documentar servicios con JSDoc"
- "Agregar rate limiting"
# ============================================================================
# PRÓXIMAS ACCIONES
# ============================================================================
next_actions:
immediate:
- action: "Completar tests unitarios de services"
priority: "P1"
time_estimate: "2 semanas"
- action: "Agregar rate limiting a endpoints"
priority: "P1"
time_estimate: "1 semana"
short_term:
- action: "Documentar todos los services con JSDoc"
priority: "P2"
time_estimate: "1 semana"
- action: "Agregar tests de integración E2E"
priority: "P2"
time_estimate: "2 semanas"
long_term:
- action: "Implementar GraphQL API"
priority: "P3"
time_estimate: "2 meses"
# ============================================================================
# REFERENCIAS
# ============================================================================
references:
validation_report: "orchestration/integracion/VAL-001/02-REPORTE-VALIDACION-COHERENCIA.md"
analysis_document: "orchestration/integracion/VAL-001/01-ANALISIS.md"
package_json: "apps/backend/package.json"
readme: "apps/backend/README.md"
# ============================================================================
# NOTAS
# ============================================================================
notes:
- "Inventario generado mediante análisis estático de estructura de archivos"
- "Conteos basados en glob patterns y análisis de código"
- "Estado de entities validado mediante compilación TypeScript"
- "Sincronización de ENUMs validada al 100% con Database/Frontend"
- "Total de ~400 archivos TypeScript en el proyecto"
- "Arquitectura NestJS modular bien organizada"
- "Score general del backend: 92/100 (Excelente)"
# ============================================================================
# CHANGELOG / MODIFICACIONES RECIENTES
# ============================================================================
changelog:
- date: "2025-12-18"
tarea_id: "IMPL-M4M5-CORRECCIONES-001"
type: "Feature Implementation - M4-M5 DTOs"
status: "⚠️ REVERTIDO"
reversion_reason: "DTOs eliminados por LIMPIEZA-M4-EJERCICIOS-001 - ejercicios no oficiales según DocumentoDeDiseño v6.4"
reversion_date: "2025-12-18"
modules_affected:
- "educational"
- "progress"
description: "[REVERTIDO] Implementación de 4 DTOs para validación de ejercicios M4 que NO están en DocumentoDeDiseño"
original_changes:
educational:
- "DTO: resena-critica-answer.dto.ts - ELIMINADO"
- "DTO: chat-literario-answer.dto.ts - ELIMINADO"
- "DTO: email-formal-answer.dto.ts - ELIMINADO"
- "DTO: ensayo-argumentativo-answer.dto.ts - ELIMINADO"
progress:
- "Validator: exercise-answer.validator.ts - cases M4 no oficiales removidos"
dtos_added: 0
dtos_removed: 4
reference: "orchestration/reportes/HISTORIAL-CORRECCIONES-2025.md#limpieza-m4-ejercicios-001"
documentation:
- "orchestration/analisis/PLAN-IMPLEMENTACION-M4-M5-2025-12-18.md"
clean_load_policy:
violated: false
reason: "DTOs fueron revertidos para alinear con DocumentoDeDiseño oficial"
- date: "2025-12-15"
tarea_id: "IMPL-ACHIEVEMENTS-001"
type: "Feature Fix - Achievements System"
modules_affected:
- "gamification"
- "progress"
description: "Corrección completa del sistema de achievements para portal Students"
changes:
gamification:
- "Service: achievements.service.ts - Reescrito meetsConditions() para soportar 9 tipos de condición"
- "Nuevos tipos: exercise_completion, streak, module_completion, all_modules_completion, perfect_score, social, special"
- "Agregado DataSource injection para queries complejas"
- "Agregado Logger para debugging"
progress:
- "Service: exercise-attempt.service.ts - Agregado increment modules_completed"
- "Service: exercise-attempt.service.ts - Agregada llamada a update_leaderboard_streaks()"
- "Service: exercise-submission.service.ts - Integrado AchievementsService"
- "Service: exercise-submission.service.ts - Detección achievements post-grading (manual y auto)"
impact:
- "Sistema de achievements ahora 100% funcional"
- "modules_completed se incrementa al completar módulos"
- "current_streak se calcula automáticamente"
- "Achievements se detectan en ejercicios auto-calificables Y con revisión manual"
new_dependencies:
exercise_submission_service:
depends_on:
- "AchievementsService (gamification module)"
database_functions_used:
- "gamification_system.update_leaderboard_streaks(uuid)"
database_tables_affected:
- "gamification_system.user_stats (UPDATE)"
- "gamification_system.user_achievements (INSERT via service)"
- "progress_tracking.module_progress (SELECT)"
- "social_features.classroom_members (SELECT)"
files_modified:
- "apps/backend/src/modules/gamification/services/achievements.service.ts"
- "apps/backend/src/modules/progress/services/exercise-attempt.service.ts"
- "apps/backend/src/modules/progress/services/exercise-submission.service.ts"
documentation:
- "orchestration/reportes/IMPL-ACHIEVEMENTS-2025-12-15.md"
- "orchestration/inventarios/BACKEND_INVENTORY.yml"
clean_load_policy:
violated: false
reason: "Sin cambios DDL, solo código backend usando funciones existentes"
seeds_homologated:
- "gamification_system/04-achievements.sql (dev = prod)"
- "gamification_system/05-user_stats.sql (copiado a dev)"
- "gamification_system/06-user_ranks.sql (copiado a dev)"
- "gamification_system/07-ml_coins_transactions.sql (copiado a dev)"
- "gamification_system/08-user_achievements.sql (copiado a dev)"
- "gamification_system/09-comodines_inventory.sql (copiado a dev)"
- "gamification_system/11-missions-production-users.sql (copiado a dev)"
- date: "2025-11-29"
tarea_id: "M4-M5-IMPLEMENTATION"
type: "Epic Implementation - Modules 4 & 5"
modules_affected:
- "educational"
- "gamification"
- "teacher"
- "progress"
description: "Implementación completa de módulos 4 y 5 con revisión manual y sistema de tienda"
changes:
educational:
- "Entity: MediaAttachment (media-attachment.entity.ts)"
- "Service: MediaStorageService (media-storage.service.ts)"
- "Controller: MediaUploadController (media-upload.controller.ts)"
- "DTO: UploadMediaDto (upload-media.dto.ts)"
gamification:
- "Entity: ShopCategory (shop-category.entity.ts)"
- "Entity: ShopItem (shop-item.entity.ts)"
- "Entity: UserPurchase (user-purchase.entity.ts)"
- "Service: ShopService (shop.service.ts)"
- "Controller: ShopController (shop.controller.ts)"
- "DTOs: shop/ (5 archivos: CreateCategoryDto, CreateItemDto, PurchaseItemDto, CategoryResponseDto, ItemResponseDto)"
teacher:
- "Entity: ManualReview (manual-review.entity.ts en progress/entities)"
- "Service: ManualReviewService (manual-review.service.ts)"
- "Controller: ManualReviewController (manual-review.controller.ts)"
- "DTO: CreateReviewDto (create-review.dto.ts)"
progress:
- "Entity: ManualReview integrada con progress_tracking schema"
objects_added: 14
impact:
- "M4: Ejercicios digitales con soporte multimedia completo"
- "M5: Ejercicios creativos con revisión manual del profesor"
- "Sistema de tienda ML Coins completamente funcional"
- "Upload de audio/video para ejercicios creativos"
- "Workflow de evaluación manual teacher → student"
database_changes:
- "Schema educational_content: tabla media_attachments"
- "Schema gamification_system: tablas shop_categories, shop_items, user_purchases"
- "Schema progress_tracking: tabla manual_reviews"
files_modified:
- "apps/backend/src/modules/educational/educational.module.ts"
- "apps/backend/src/modules/gamification/gamification.module.ts"
- "apps/backend/src/modules/teacher/teacher.module.ts"
- "apps/backend/src/modules/educational/entities/index.ts"
- "apps/backend/src/modules/gamification/entities/index.ts"
- "apps/backend/src/modules/gamification/controllers/index.ts"
- "apps/backend/src/modules/gamification/services/index.ts"
documentation:
- "orchestration/inventarios/BACKEND_INVENTORY.yml"
clean_load_policy:
violated: false
reason: "Cambios en BD planificados y ejecutados mediante migrations DDL"
- date: "2025-11-29"
tarea_id: "BE-136"
type: "Feature Integration - Gamification"
module: "progress"
component: "ExerciseAttemptService"
description: "Integración de detección automática de logros post-ejercicio"
changes:
- "Inyectado AchievementsService en ExerciseAttemptService"
- "Agregada llamada a detectAndGrantEarned() después de awardRewards()"
- "Implementado error handling para no bloquear flujo principal"
- "Agregado logging de logros otorgados"
impact:
- "Sistema de logros ahora funcional en portal Student"
- "Logros se otorgan automáticamente al cumplir condiciones"
- "Gamificación completamente integrada"
new_dependencies:
service: "ExerciseAttemptService"
depends_on:
- "AchievementsService (gamification module)"
- "UserStatsService (gamification module)"
- "RanksService (gamification module)"
files_modified:
- "apps/backend/src/modules/progress/services/exercise-attempt.service.ts"
documentation:
- "orchestration/trazas/TRAZA-TAREAS-BACKEND.md (BE-136)"
clean_load_policy:
violated: false
reason: "Sin cambios en base de datos, solo código backend"
- date: "2025-11-26"
tarea_id: "INVENTORY-UPDATE-001"
type: "Documentation Update"
module: "admin"
component: "BACKEND_INVENTORY.yml"
description: "Actualización de conteo de DTOs del módulo admin"
changes:
- "Corregido conteo de DTOs del módulo admin: 0 → 118"
- "Agregado desglose detallado por subcarpeta (15 subcarpetas)"
- "Actualizado metadata con nueva versión 2.3.2"
- "Actualizado total_dtos global: 195 → 313"
- "Actualizado total_files: 400 → 518"
- "Agregadas nuevas main_features del módulo admin"
impact:
- "Mejora de trazabilidad del inventario backend"
- "Documentación ahora refleja la realidad del código"
- "Facilita auditorías futuras del módulo admin"
dtos_by_subfolder:
alerts: 7
analytics: 10
bulk_operations: 5
classroom_assignments: 17
content: 10
dashboard: 11
gamification_config: 8
interventions: 5
monitoring: 5
organizations: 9
progress: 12
reports: 1
roles: 2
system: 9
users: 7
files_modified:
- "orchestration/inventarios/BACKEND_INVENTORY.yml"
documentation:
- "orchestration/inventarios/BACKEND_INVENTORY.yml"
- date: "2025-12-14"
tarea_id: "AUDIT-DB-001-P0"
type: "Database Audit Corrections - P0 Critical"
module: "shared"
component: "database.constants.ts"
description: "Correcciones P0 de auditoría AUDIT-DB-001: eliminación de referencias Supabase"
changes:
- "Renombrado AUTH_SUPABASE → AUTH_BASE (claridad arquitectónica)"
- "Eliminadas ~75 referencias a Supabase en documentación y código"
- "Corregidas 2 funciones de timestamp: NOW() → gamilit.now_mexico()"
- "Creados 5 seeds P0 críticos (user_roles, mission_templates, module_dependencies, taxonomies, marie_curie_content)"
impact:
- "Documentación técnica sin referencias erróneas a Supabase"
- "Consistencia de timezone en todas las funciones de updated_at"
- "Seeds coverage P0: 100% (35 registros iniciales)"
- "Claridad arquitectónica: auth.users es patrón estándar, no Supabase"
files_modified:
- "apps/backend/src/shared/constants/database.constants.ts"
- "apps/backend/README.md"
- "apps/database/ddl/00-prerequisites.sql"
- "apps/database/ddl/schemas/gamification_system/functions/06-update_missions_updated_at.sql"
- "apps/database/ddl/schemas/gamification_system/functions/07-update_notifications_updated_at.sql"
seeds_created:
- "auth_management/07-user_roles.sql (8 registros)"
- "gamification_system/10-mission_templates.sql (11 registros)"
- "educational_content/11-module_dependencies.sql (6 registros)"
- "educational_content/12-taxonomies.sql (4 registros)"
- "content_management/02-marie_curie_content.sql (6 registros)"
documentation:
- "orchestration/agentes/database-auditor/audit-2025-12-14/07-REPORTE-CORRECCIONES-P0.md"
- "orchestration/inventarios/SEEDS_INVENTORY.yml"
clean_load_policy:
violated: false
reason: "Correcciones de arquitectura y datos iniciales - sin cambios estructurales en tablas"
- date: "2025-11-17"
tarea_id: "BE-091"
type: "Bug Fix - Critical"
module: "educational"
component: "ModulesService.getUserModules()"
description: "Corrección de cálculo de progreso de módulos"
changes:
- "Modificado query SQL para calcular ejercicios completados dinámicamente"
- "Agregados LATERAL joins para contar desde exercise_attempts"
- "Cambio de valores estáticos (module_progress) a dinámicos (exercise_attempts)"
- "Usa COUNT(DISTINCT e.id) para evitar duplicados por múltiples intentos"
impact:
- "Performance: < 100ms por request"
- "Progreso de módulos ahora se actualiza automáticamente"
- "Fix de subtítulo mostrando 0/5 cuando debería ser 2/5"
files_modified:
- "apps/backend/src/modules/educational/services/modules.service.ts (líneas 124-173)"
documentation:
- "orchestration/backend/BE-091/01-ANALISIS.md"
- "orchestration/backend/BE-091/02-PLAN.md"
- "orchestration/backend/BE-091/03-REPORTE-FINAL.md"