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