Some checks are pending
CI Pipeline / changes (push) Waiting to run
CI Pipeline / core (push) Blocked by required conditions
CI Pipeline / trading-backend (push) Blocked by required conditions
CI Pipeline / trading-data-service (push) Blocked by required conditions
CI Pipeline / trading-frontend (push) Blocked by required conditions
CI Pipeline / erp-core (push) Blocked by required conditions
CI Pipeline / erp-mecanicas (push) Blocked by required conditions
CI Pipeline / gamilit-backend (push) Blocked by required conditions
CI Pipeline / gamilit-frontend (push) Blocked by required conditions
Backend: - Fix email verification and password recovery services - Fix exercise submission and student progress services Frontend: - Update missions, password, and profile API services - Fix ExerciseContentRenderer component Docs & Scripts: - Add SSL/Certbot deployment guide - Add quick deployment guide - Database scripts for testing and validations - Migration and homologation reports - Functions inventory documentation 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
5.5 KiB
5.5 KiB
Especificacion: AdminGamificationPage
Version: 1.0.0
Fecha: 2025-12-18
Ubicacion: apps/frontend/src/apps/admin/pages/AdminGamificationPage.tsx
PROPOSITO
Pagina de administracion para gestionar la configuracion del sistema de gamificacion, incluyendo parametros, rangos Maya y estadisticas.
ESTRUCTURA DE PAGINA
┌─────────────────────────────────────────────────────────┐
│ HEADER │
│ [Trophy Icon] Configuracion de Gamificacion │
│ Ultima modificacion: 15 dic 2025, 14:30 │
└─────────────────────────────────────────────────────────┘
│ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ STATS CARDS │ │
│ │ [Total Params] [Activos] [Rangos] [Modificados]│ │
│ └─────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ TABS │ │
│ │ [Rangos] [Logros] [Economia] [Estadisticas] │ │
│ └─────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ TAB CONTENT │ │
│ │ (varies by selected tab) │ │
│ └─────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
TABS
Tab: Rangos Maya
Contenido:
- Lista de 5 rangos Maya con:
- Nombre y descripcion
- Umbrales XP (min/max)
- Multiplicador XP
- Bonus ML Coins
- Perks (lista expandible)
- Color identificador
- Boton "Editar" por rango
Modal: MayaRankEditModal
- Campos: minXp, maxXp
- Validacion: maxXp > minXp
Tab: Logros
Contenido:
- Lista de logros/achievements
- Estado activo/inactivo
- Condiciones de desbloqueo
- Recompensas asociadas
Tab: Economia
Stats Cards (3):
- Total ML Coins en circulacion
- Promedio coins por usuario
- Coins otorgadas hoy
Parametros:
- coins_per_exercise
- coins_per_streak
- coins_per_rank_up
- ml_coins_daily_limit
Tab: Estadisticas
Stats Cards (4):
- Usuarios activos (24h)
- Promedio XP diario
- Promociones de rango (semana)
- Tiempo promedio sesion
Graficos:
- Distribucion de usuarios por rango
- Tendencia de XP semanal
HOOKS UTILIZADOS
| Hook | Proposito |
|---|---|
| useGamificationConfig | Queries y mutations |
| useUserGamification | Stats de usuarios |
MODALES
ParameterEditModal
Props:
{
parameter: Parameter | null;
isOpen: boolean;
onClose: () => void;
onSave: (key: string, value: any, reason?: string) => void;
}
Campos:
- Valor actual (input dinamico segun dataType)
- Razon del cambio (textarea opcional)
MayaRankEditModal
Props:
{
rank: MayaRankConfig | null;
isOpen: boolean;
onClose: () => void;
onSave: (id: string, data: { minXp: number; maxXp: number }) => void;
}
BulkUpdateDialog
Proposito: Actualizar multiples parametros simultaneamente.
Campos:
- Lista de parametros seleccionados
- Nuevos valores
- Razon global del cambio
RestoreDefaultsDialog
Proposito: Restaurar todos los parametros a valores por defecto.
Confirmacion:
- Texto de advertencia
- Input de confirmacion ("RESTAURAR")
- Contador de parametros afectados
PreviewImpactDialog
Proposito: Previsualizar impacto de cambios antes de aplicar.
Muestra:
- Usuarios afectados
- Cambios en rankings
- Proyeccion de economia
VALIDACION DEFENSIVA
// Validacion de datos de rangos
const safeRanks = useMemo(() => {
if (!mayaRanks || !Array.isArray(mayaRanks)) return [];
return mayaRanks.filter(rank =>
rank && typeof rank.name === 'string' && typeof rank.minXp === 'number'
);
}, [mayaRanks]);
ESTADOS
| Estado | Indicador Visual |
|---|---|
| Loading | Skeleton cards + spinner |
| Error | Banner de error con retry |
| Empty | Mensaje informativo |
| Success | Toast de confirmacion |
PERMISOS
Requiere: Rol super_admin o admin
REFERENCIAS
Ultima actualizacion: 2025-12-18