- Configure workspace Git repository with comprehensive .gitignore - Add Odoo as submodule for ERP reference code - Include documentation: SETUP.md, GIT-STRUCTURE.md - Add gitignore templates for projects (backend, frontend, database) - Structure supports independent repos per project/subproject level Workspace includes: - core/ - Reusable patterns, modules, orchestration system - projects/ - Active projects (erp-suite, gamilit, trading-platform, etc.) - knowledge-base/ - Reference code and patterns (includes Odoo submodule) - devtools/ - Development tools and templates - customers/ - Client implementations template 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1446 lines
43 KiB
YAML
1446 lines
43 KiB
YAML
# BACKEND INVENTORY - GAMILIT
|
|
# Inventario completo de objetos del backend
|
|
# Generado: 2025-01-11
|
|
# Fuente: Validación VAL-001
|
|
|
|
metadata:
|
|
version: "2.6.0"
|
|
generated_date: "2025-11-11"
|
|
last_updated: "2025-11-29"
|
|
generated_by: "Architecture-Analyst - Fase 4 Ejecución Clean Load Validation"
|
|
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 # ✅ Actualizado 2025-11-29 M4-M5 (+6 nuevos DTOs)
|
|
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: "2025-11-29: M4-M5 Implementation - entities 87→92, dtos 321→327, services 85→88, controllers 68→71, endpoints 406→417"
|
|
|
|
# ============================================================================
|
|
# 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 (Supabase Auth)"
|
|
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)"
|
|
|
|
# ============================================================================
|
|
# 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)
|
|
# ============================================================================
|
|
datasources:
|
|
count: 6
|
|
path: "shared/database"
|
|
files:
|
|
- name: "auth-management.datasource.ts"
|
|
schema: "auth_management"
|
|
entities: 12
|
|
|
|
- name: "educational-content.datasource.ts"
|
|
schema: "educational_content"
|
|
entities: 9
|
|
|
|
- name: "gamification-system.datasource.ts"
|
|
schema: "gamification_system"
|
|
entities: 13
|
|
|
|
- name: "progress-tracking.datasource.ts"
|
|
schema: "progress_tracking"
|
|
entities: 13
|
|
|
|
- name: "social-features.datasource.ts"
|
|
schema: "social_features"
|
|
entities: 10
|
|
|
|
- name: "content-management.datasource.ts"
|
|
schema: "content_management"
|
|
entities: 5
|
|
|
|
# ============================================================================
|
|
# ESTADÍSTICAS
|
|
# ============================================================================
|
|
statistics:
|
|
total_files: 532
|
|
breakdown:
|
|
entities: 69
|
|
dtos: 274
|
|
services: 55
|
|
controllers: 41
|
|
modules: 14
|
|
datasources: 6
|
|
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-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-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"
|