Some checks are pending
CI Pipeline / changes (push) Waiting to run
CI Pipeline / core (push) Blocked by required conditions
CI Pipeline / trading-backend (push) Blocked by required conditions
CI Pipeline / trading-data-service (push) Blocked by required conditions
CI Pipeline / trading-frontend (push) Blocked by required conditions
CI Pipeline / erp-core (push) Blocked by required conditions
CI Pipeline / erp-mecanicas (push) Blocked by required conditions
CI Pipeline / gamilit-backend (push) Blocked by required conditions
CI Pipeline / gamilit-frontend (push) Blocked by required conditions
Gamilit: - Backend: Teacher services, assignments, gamification, exercise submissions - Frontend: Admin/Teacher/Student portals, module 4-5 mechanics, monitoring - Database: DDL functions, seeds for dev/prod, auth/gamification schemas - Docs: Architecture, features, guides cleanup and reorganization Core/Orchestration: - New workspace directives index - Documentation directive Trading-platform: - Database seeds and inventory updates - Tech leader validation report 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1614 lines
52 KiB
YAML
1614 lines
52 KiB
YAML
# BACKEND INVENTORY - GAMILIT
|
|
# Inventario completo de objetos del backend
|
|
# Generado: 2025-01-11
|
|
# Fuente: Validación VAL-001
|
|
|
|
metadata:
|
|
version: "2.9.0"
|
|
generated_date: "2025-11-11"
|
|
last_updated: "2025-12-18"
|
|
generated_by: "Architecture-Analyst - Corrección Routing Teacher Assignments + Documentación Orden Rutas"
|
|
framework: "NestJS 11.1.8 + TypeScript 5.x + TypeORM 0.3.x"
|
|
database: "PostgreSQL 16"
|
|
package_manager: "npm"
|
|
total_modules: 13 # ✅ Verificado 2025-11-15
|
|
total_entities: 92 # ✅ Actualizado 2025-11-29 M4-M5 (+5 nuevas entities)
|
|
total_dtos: 327 # ✅ Verificado 2025-12-18 (sin 4 DTOs M4 no oficiales)
|
|
total_services: 88 # ✅ Actualizado 2025-11-29 M4-M5 (+3 servicios)
|
|
total_controllers: 71 # ✅ Actualizado 2025-11-29 M4-M5 (+3 controladores)
|
|
total_endpoints: 417 # ✅ Actualizado 2025-11-29 M4-M5 (+11 endpoints)
|
|
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"
|
|
|
|
# ============================================================================
|
|
# 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" # 2025-11-28: admin_reports usa admin_dashboard
|
|
entities: 6 # 2025-11-28: +3 (admin-report.entity.ts, bulk-operation, feature-flag, notification-settings, system-alert, system-setting)
|
|
services: 15 # 2025-11-28: Reconteo real (15 servicios)
|
|
controllers: 17 # 2025-11-28: Reconteo real (17 controllers)
|
|
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"
|