## Backend - fix(ranks): Reordenar rutas en RanksController para evitar conflictos 404 - feat(gamification): Agregar MayaRankEntity al modulo - feat(ml-coins): Expandir funcionalidad del servicio - feat(teacher): Mejoras en dashboard, mensajes y reportes - feat(entities): Nuevas entidades admin, educational, progress, social ## Frontend - feat(gamificationAPI): API completa para ranks con endpoints - feat(RubricEvaluator): Nuevo componente para evaluacion docente - refactor(admin): Mejoras en hooks y paginas - refactor(teacher): Mejoras en paginas del portal ## Database - fix(initialize_user_stats): Agregar is_current y achieved_at a user_ranks - fix(notifications-policies): Corregir RLS con JOIN correcto - feat(friendships): Agregar columna status con estados - sync(seeds): Homologacion completa DEV <-> PROD ## Docs & Orchestration - docs(api): Actualizar API-TEACHER-MODULE.md - docs(frontend): COMPONENTES-INVENTARIO.md - docs(database): VIEWS-INVENTARIO.md, VALIDACION-DDL-SEEDS - Reportes de analisis y validacion 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
12 KiB
FASE 3: Plan de Implementaciones y Correcciones
Fecha: 2025-12-23 Proyecto: Gamilit - Portal Admin Fase: Planeación de Implementaciones
1. PRIORIZACIÓN DE CORRECCIONES
Sprint 1: Correcciones Críticas (P0)
| ID | Problema | Archivo | Línea | Corrección Propuesta |
|---|---|---|---|---|
| CRIT-001 | Mapeo incorrecto de campos de usuario | useUserManagement.ts |
122-135 | Verificar estructura backend y ajustar transformación |
| CRIT-002 | Error handling sin validación de tipo | AdminReportsPage.tsx |
88 | Usar err instanceof Error ? err.message : String(err) |
| CRIT-003 | Diálogo confirm() en inglés | FeatureFlagsPanel.tsx |
85 | Crear ConfirmDialog en español |
| CRIT-004 | ABTestingDashboard vacío | AdminAdvancedPage.tsx |
94 | Mostrar "Under Construction" o implementar |
| CRIT-005 | Funciones mock en useSettings | useSettings.ts |
183,230,262 | Implementar endpoints backend o marcar como deprecated |
Sprint 2: Correcciones Altas (P1)
| ID | Problema | Archivo | Corrección Propuesta |
|---|---|---|---|
| HIGH-001 | Dependencia circular en filtros | useUserManagement.ts |
Refactorizar useCallback sin filters como dependencia |
| HIGH-002 | Mapeo inconsistente de campos | useOrganizations.ts |
Estandarizar nombres (usar solo plan, userCount) |
| HIGH-003 | Sin validación de fechas | ReportGenerationForm.tsx |
Agregar validación con date-fns |
| HIGH-004 | Filtro pierde limit | AdminAssignmentsPage.tsx |
Corregir merge de filtros |
| HIGH-005 | SHOW_CONTENT hardcodeado | AdminAdvancedPage.tsx |
Usar feature flag del backend |
Sprint 3: Correcciones Medias (P2)
Grupo A: Error Handling y Feedback
| ID | Problema | Archivo |
|---|---|---|
| MED-003 | Falta feedback de guardado | AdminRolesPage.tsx |
| MED-007 | fetchMetrics no actualiza error | useMonitoring.ts |
| MED-009 | Errores silenciados en analytics | useAnalytics.ts |
| MED-011 | Error handling silenciado | AdminAssignmentsPage.tsx |
Grupo B: UI/UX Improvements
| ID | Problema | Archivo |
|---|---|---|
| MED-004 | Placeholder vista previa ejercicio | AdminContentPage.tsx |
| MED-005 | PreviewImpactDialog incompleto | AdminGamificationPage.tsx |
| MED-006 | Usuarios hardcodeado (1250) | AdminGamificationPage.tsx |
| MED-013 | Stats cards en inglés | AdminAdvancedPage.tsx |
Grupo C: Data & Performance
| ID | Problema | Archivo |
|---|---|---|
| MED-001 | Campos null en dashboard | AdminDashboardPage.tsx |
| MED-008 | Parámetros hardcodeados | useAnalytics.ts |
| MED-010 | Sin timeout en descargas | AdminReportsPage.tsx |
| MED-014 | Sin caching en FeatureFlags | FeatureFlagsPanel.tsx |
Sprint 4: Correcciones Bajas (P3)
| ID | Problema | Archivo |
|---|---|---|
| LOW-001 | Auto-refresh agresivo | useAdminDashboard.ts |
| LOW-002 | Roles hardcodeados | useRoles.ts |
| LOW-004 | Typos en mensajes | Múltiples archivos |
| LOW-005 | Tipo any en hook |
useSystemMetrics.ts |
| LOW-009 | Inconsistencia duración toast | Múltiples archivos |
2. DETALLE DE IMPLEMENTACIONES
2.1 CRIT-001: Mapeo de Campos de Usuario
Archivo: /apps/frontend/src/apps/admin/hooks/useUserManagement.ts
Líneas: 122-135
Código Actual:
const metadata = (user as any).metadata || (user as any).raw_user_meta_data || {};
const fullName = metadata.full_name || metadata.display_name || user.name || user.email;
Código Propuesto:
interface UserMetadata {
full_name?: string;
display_name?: string;
avatar_url?: string;
}
const getUserMetadata = (user: any): UserMetadata => {
// El backend devuelve raw_user_meta_data
return user.raw_user_meta_data || user.metadata || {};
};
const getDisplayName = (user: any, metadata: UserMetadata): string => {
return metadata.full_name
|| metadata.display_name
|| user.name
|| user.email?.split('@')[0]
|| 'Usuario';
};
Dependencias: Ninguna Impacto: Solo useUserManagement.ts
2.2 CRIT-002: Error Handling en Reports
Archivo: /apps/frontend/src/apps/admin/pages/AdminReportsPage.tsx
Línea: 88
Código Actual:
} catch (err: unknown) {
setToast({
type: 'error',
message: err.message || 'Error al generar reporte',
});
}
Código Propuesto:
} catch (err: unknown) {
const errorMessage = err instanceof Error
? err.message
: typeof err === 'string'
? err
: 'Error al generar reporte';
setToast({
type: 'error',
message: errorMessage,
});
}
Dependencias: Ninguna Impacto: Solo AdminReportsPage.tsx
2.3 CRIT-003: ConfirmDialog en Español
Archivo: /apps/frontend/src/apps/admin/components/advanced/FeatureFlagsPanel.tsx
Línea: 85
Código Actual:
if (confirm('Are you sure you want to delete this feature flag?')) {
Código Propuesto:
// Opción A: Crear componente ConfirmDialog
const [confirmDelete, setConfirmDelete] = useState<string | null>(null);
// En el render:
{confirmDelete && (
<ConfirmDialog
isOpen={!!confirmDelete}
title="Eliminar Feature Flag"
message={`¿Estás seguro de eliminar el feature flag "${confirmDelete}"?`}
confirmText="Eliminar"
cancelText="Cancelar"
onConfirm={() => {
handleDeleteFlag(confirmDelete);
setConfirmDelete(null);
}}
onCancel={() => setConfirmDelete(null)}
variant="danger"
/>
)}
// Opción B: Usar confirm nativo con español
if (window.confirm('¿Estás seguro de eliminar este feature flag? Esta acción no se puede deshacer.')) {
Dependencias: Crear ConfirmDialog si no existe Impacto: FeatureFlagsPanel.tsx, posible nuevo componente
2.4 CRIT-004: ABTestingDashboard
Archivo: /apps/frontend/src/apps/admin/pages/AdminAdvancedPage.tsx
Línea: 94
Opciones:
Opción A: Mostrar Under Construction
{activeTab === 'ab-testing' && (
<UnderConstruction
title="A/B Testing Dashboard"
description="Funcionalidad en desarrollo para Q2 2026"
icon={FlaskConical}
/>
)}
Opción B: Implementar MVP básico
// Ver componente ABTestingDashboard para implementación
Decisión Recomendada: Opción A (mostrar Under Construction) dado que está planificado para Q2 2026.
Dependencias: Ninguna Impacto: AdminAdvancedPage.tsx
2.5 CRIT-005: useSettings Mock Functions
Archivo: /apps/frontend/src/apps/admin/hooks/useSettings.ts
Líneas: 183, 230, 262
Estado Actual:
sendTestEmailusa setTimeout (mock)createBackupusa setTimeout (mock)clearCacheusa setTimeout (mock)
Opciones:
Opción A: Marcar como deprecated y eliminar
/**
* @deprecated Este hook contiene funciones sin implementar.
* Use useSystemConfig para configuración.
* Las funciones de email, backup y cache requieren endpoints backend.
*/
export const useSettings = () => {
console.warn('[useSettings] Este hook está deprecado. Use useSystemConfig.');
// ...
}
Opción B: Implementar endpoints backend Requiere:
POST /admin/system/test-emailPOST /admin/system/backupPOST /admin/system/clear-cache
Decisión Recomendada: Opción A para MVP, implementar backend en futura iteración.
Dependencias: Backend si se implementa Opción B Impacto: useSettings.ts, AdminSettingsPage.tsx si se usa
3. ORDEN DE IMPLEMENTACIÓN RECOMENDADO
Semana 1 (Críticos):
├── CRIT-002: Error handling (1h)
├── CRIT-003: ConfirmDialog español (2h)
├── CRIT-004: ABTestingDashboard placeholder (1h)
├── CRIT-001: Mapeo usuarios (2h)
└── CRIT-005: Deprecar useSettings (1h)
Semana 2 (Altos):
├── HIGH-002: Estandarizar campos (2h)
├── HIGH-004: Fix filtros assignments (1h)
├── HIGH-001: Refactor dependencias (3h)
├── HIGH-003: Validación fechas (2h)
└── HIGH-005: Feature flag dinámico (2h)
Semana 3 (Medios - Grupo A y B):
├── MED-003: Feedback guardado roles (1h)
├── MED-007: Fix error monitoring (1h)
├── MED-004: Vista previa ejercicio (3h)
├── MED-005: PreviewImpactDialog (2h)
└── MED-006: Obtener totalUsers de API (1h)
Semana 4 (Medios - Grupo C y Bajos):
├── MED-008: Parametrizar analytics (2h)
├── MED-010: Timeout descargas (1h)
├── LOW-004: Fix typos (1h)
├── LOW-009: Estandarizar toast (1h)
└── Cleanup y testing
4. ARCHIVOS A MODIFICAR POR SPRINT
Sprint 1 (5 archivos)
apps/frontend/src/apps/admin/hooks/useUserManagement.tsapps/frontend/src/apps/admin/pages/AdminReportsPage.tsxapps/frontend/src/apps/admin/components/advanced/FeatureFlagsPanel.tsxapps/frontend/src/apps/admin/pages/AdminAdvancedPage.tsxapps/frontend/src/apps/admin/hooks/useSettings.ts
Sprint 2 (5 archivos)
apps/frontend/src/apps/admin/hooks/useOrganizations.tsapps/frontend/src/apps/admin/pages/AdminAssignmentsPage.tsxapps/frontend/src/apps/admin/components/reports/ReportGenerationForm.tsxapps/frontend/src/apps/admin/hooks/useUserManagement.tsapps/frontend/src/apps/admin/pages/AdminAdvancedPage.tsx
Sprint 3 (8 archivos)
apps/frontend/src/apps/admin/pages/AdminRolesPage.tsxapps/frontend/src/apps/admin/hooks/useMonitoring.tsapps/frontend/src/apps/admin/hooks/useAnalytics.tsapps/frontend/src/apps/admin/pages/AdminContentPage.tsxapps/frontend/src/apps/admin/pages/AdminGamificationPage.tsxapps/frontend/src/apps/admin/pages/AdminDashboardPage.tsxapps/frontend/src/apps/admin/pages/AdminReportsPage.tsxapps/frontend/src/apps/admin/components/advanced/FeatureFlagsPanel.tsx
Sprint 4 (5+ archivos)
apps/frontend/src/apps/admin/hooks/useAdminDashboard.tsapps/frontend/src/apps/admin/hooks/useRoles.tsapps/frontend/src/apps/admin/hooks/useSystemMetrics.ts- Múltiples archivos para typos y toast
5. COMPONENTES NUEVOS A CREAR
ConfirmDialog (Opcional)
Si no existe, crear componente reutilizable:
// apps/frontend/src/shared/components/ConfirmDialog.tsx
interface ConfirmDialogProps {
isOpen: boolean;
title: string;
message: string;
confirmText?: string;
cancelText?: string;
onConfirm: () => void;
onCancel: () => void;
variant?: 'danger' | 'warning' | 'info';
}
ExercisePreviewComponent
Para vista previa de ejercicios en AdminContentPage:
// apps/frontend/src/apps/admin/components/content/ExercisePreview.tsx
interface ExercisePreviewProps {
exercise: Exercise;
type: ExerciseType;
}
6. TESTS A AGREGAR
Unit Tests Prioritarios
- useUserManagement: Test de transformación de campos
- useRolePermissions: Test de transformPermissionsFromBackend
- useAnalytics: Test de manejo de errores
- ConfirmDialog: Tests de comportamiento
Integration Tests
- AdminUsersPage: Flujo CRUD completo
- AdminReportsPage: Generación y descarga de reportes
- AdminGamificationPage: Cambio de parámetros con preview
7. MÉTRICAS DE ÉXITO
| Métrica | Antes | Después |
|---|---|---|
| Problemas Críticos | 5 | 0 |
| Problemas Altos | 5 | 0 |
| Cobertura de Tests | ~0% | >60% |
| Errores en Consola | Varios | 0 |
| Consistencia UI | ~80% | 100% |
8. RIESGOS Y MITIGACIÓN
| Riesgo | Probabilidad | Impacto | Mitigación |
|---|---|---|---|
| Cambio en estructura backend | Media | Alto | Validar estructura antes de implementar |
| Regresión en funcionalidades | Media | Alto | Tests antes de merge |
| Conflictos de merge | Baja | Medio | PRs pequeños y frecuentes |
| Tiempo insuficiente | Media | Medio | Priorizar críticos y altos |
9. CONCLUSIÓN
El plan de implementación está estructurado en 4 sprints con:
- Sprint 1: 5 correcciones críticas (~7h)
- Sprint 2: 5 correcciones altas (~10h)
- Sprint 3: 8 correcciones medias (~9h)
- Sprint 4: 5+ correcciones bajas + cleanup (~5h)
Tiempo total estimado: ~31 horas de desarrollo
Próximo paso: FASE 4 - Validación de dependencias y objetos impactados