Nivel & XP
Endpoints para gestionar puntos de experiencia y niveles de usuario.
Modelos de Datos
Section titled “Modelos de Datos”La información de nivel y XP se almacena en el modelo UserProfile del schema users:
Campos de Gamificación en UserProfile
Section titled “Campos de Gamificación en UserProfile”model UserProfile { // ... otros campos
// Sistema de gamificación totalXp Int @default(0) @map("total_xp") level Int @default(1) currentLevelXp Int @default(0) @map("current_level_xp")
// ... relaciones @@map("user_profiles") @@schema("users")}Sistema de XP y Niveles
Section titled “Sistema de XP y Niveles”La gamificación utiliza un sistema de experiencia (XP) exponencial donde cada nivel requiere más XP que el anterior. La tabla de XP va del nivel 1 al 30, con niveles superiores requiriendo 2500 XP fijos por nivel.
Endpoints
Section titled “Endpoints”Obtener Nivel de Usuario
Section titled “Obtener Nivel de Usuario”Obtener información del nivel del usuario actual.
- URL:
/api/v1/gamification/level/me - Método:
GET - Autenticación Requerida: Sí
Descripción Interna
Section titled “Descripción Interna”Este endpoint obtiene información del nivel del usuario:
-
Obtiene datos del perfil:
- totalXp, level, currentLevelXp, avatar_url, name
-
Calcula información adicional:
xpForNextLevel: XP necesario para el siguiente nivelprogressPercentage: Porcentaje de progreso al siguiente nivel
-
Sistema de niveles:
- Niveles 1-30 tienen XP predefinidos (exponencial)
- Niveles 30+ requieren 2500 XP cada uno
Respuesta
Section titled “Respuesta”{ "data": { "id": "...", "name": "John Doe", "totalXp": 1500, "level": 5, "currentLevelXp": 350, "xpForNextLevel": 500, "progressPercentage": 70, "avatar_url": "..." }}Ejemplo de Cliente Hono
Section titled “Ejemplo de Cliente Hono”import { hcWithType } from '@vitality-gym/api/client'
const client = hcWithType('http://localhost:3000')
const res = await client.api.v1.gamification.level.me.$get()Añadir XP a Usuario
Section titled “Añadir XP a Usuario”Añadir puntos de experiencia a un usuario (interno/admin).
- URL:
/api/v1/gamification/xp - Método:
POST - Autenticación Requerida: Sí (Admin)
Descripción Interna
Section titled “Descripción Interna”Este endpoint añade XP a un usuario:
- Obtiene perfil actual con totalXp y level
- Calcula nuevo totalXp y determina nivel resultante
- Verifica subida de nivel (leveledUp)
- Actualiza perfil con nuevo totalXp, level y currentLevelXp
- Si subió de nivel, verifica y desbloquea achievements de tipo ‘level’
- Retorna perfil actualizado con xpAdded y leveledUp
Cuerpo de Solicitud
Section titled “Cuerpo de Solicitud”{ "userProfileId": "user_profile_id", "xpAmount": 100, "reason": "Completed workout"}Respuesta
Section titled “Respuesta”{ "data": { "id": "...", "totalXp": 1600, "level": 5, "currentLevelXp": 450, "xpAdded": 100, "leveledUp": false }}Obtener Estadísticas de Gamificación
Section titled “Obtener Estadísticas de Gamificación”Obtener estadísticas completas de gamificación para el usuario.
- URL:
/api/v1/gamification/stats - Método:
GET - Autenticación Requerida: Sí
Descripción Interna
Section titled “Descripción Interna”Este endpoint obtiene estadísticas completas:
-
Calcula período según parámetro (week, month, year, all)
-
Ejecuta consultas en paralelo:
- Información de nivel
- Objetivos activos
- Actividades completadas en el período
- Total de achievements desbloqueados
- Top 5 rachas activas
-
Retorna:
levelInfo: Nivel, XP, progresostats: activeGoals, completedActivities, totalAchievementstopStreaks: Mejores rachas actuales
Parámetros de Consulta de Solicitud
Section titled “Parámetros de Consulta de Solicitud”period: Período de tiempo (week, month, year, all)
Respuesta
Section titled “Respuesta”{ "data": { "levelInfo": { "level": 5, "totalXp": 1500, "progressPercentage": 70 }, "stats": { "activeGoals": 3, "completedActivities": 25, "totalAchievements": 8 }, "topStreaks": [ { "type": "WORKOUT_STREAK", "currentStreak": 15 } ] }}