Admin
Endpoints para tareas administrativas, reportes y configuración del sistema.
Modelos de Datos
Section titled “Modelos de Datos”Los endpoints de administración utilizan modelos de múltiples schemas para generar estadísticas y reportes. Los principales modelos consultados incluyen:
Schemas Utilizados
Section titled “Schemas Utilizados”| Schema | Modelos |
|---|---|
auth | User, Account, UserRole |
users | UserProfile, Membership |
gym | Trainer, Class, ClassSchedule, Reservation, TrainingSession |
fitness | WorkoutLog, Exercise |
gamification | Goal, Streak, Achievement |
social | Post, Comment, Like, Follow |
payments | Payment |
reviews | TrainerReview |
Para ver los modelos completos, consulta la documentación de cada módulo correspondiente.
Endpoints
Section titled “Endpoints”Obtener Estadísticas del Dashboard
Section titled “Obtener Estadísticas del Dashboard”Obtener estadísticas del dashboard con métricas completas sobre el gimnasio.
- URL:
/api/v1/admin/dashboard - Método:
GET - Autenticación Requerida: Sí Admin
Descripción Interna
Section titled “Descripción Interna”Este endpoint calcula y retorna estadísticas completas del dashboard:
-
Cálculo de períodos: Determina el rango de fechas según el parámetro
period(day, week, month, quarter, year) y calcula el período anterior para comparaciones de crecimiento. -
Overview:
totalUsers: Conteo total de perfiles de usuarioactiveMembers: Usuarios con membresía activatotalRevenue: Suma de precios de membresías en el períodorevenueGrowth: Porcentaje de crecimiento respecto al período anterioractiveClasses: Clases conisActive: truetotalReservations: Reservas creadas en el períodoreservationGrowth: Crecimiento de reservas vs período anterioraverageAttendance: Porcentaje de reservas confirmadas sobre el total
-
Memberships:
- Conteo por estado: ACTIVE, EXPIRED, SUSPENDED
expiringThisMonth: Membresías activas que expiran en los próximos 30 díastotalRevenue: Ingresos por membresías en el período
-
Classes:
totalClasses: Clases activastotalSchedules: Horarios de clase activosaverageCapacity: Capacidad promedio de las clasesmostPopularClasses: Top 5 clases por número de reservas confirmadas
-
Trainers:
totalTrainersyactiveTrainerstotalSessions: Sesiones de entrenamiento en el períodoaverageRating: Promedio de valoraciones visiblestopRatedTrainers: Top 5 entrenadores por rating promedio
-
Recent Activity:
recentReservations: Últimas 10 reservas con clase y usuariorecentMembers: Últimos 10 usuarios registrados
Parámetros de Consulta de Solicitud
Section titled “Parámetros de Consulta de Solicitud”period: Período de tiempo (day, week, month, quarter, year)startDate: Fecha de inicio personalizada (opcional)endDate: Fecha de fin personalizada (opcional)
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.admin.dashboard.$get({ query: { period: 'month' }})Obtener Usuarios
Section titled “Obtener Usuarios”Obtener todos los usuarios con filtrado y paginación.
- URL:
/api/v1/admin/users - Método:
GET - Autenticación Requerida: Sí Admin
Descripción Interna
Section titled “Descripción Interna”Este endpoint obtiene usuarios con filtros avanzados:
-
Construye filtros dinámicos:
role: Filtra por rol (MEMBER, TRAINER, ADMIN, STAFF)membershipStatus: Filtra por estado de membresíacreatedFrom/createdTo: Rango de fechas de creaciónsearch: Búsqueda por nombre o email (case-insensitive)
-
Consulta paginada que incluye:
- Información del usuario (id, email, emailVerified)
- Membresía (id, type, status, startDate, endDate)
- Contadores de reservas y sesiones de entrenamiento
-
Retorna lista paginada con datos completos del perfil
Parámetros de Consulta de Solicitud
Section titled “Parámetros de Consulta de Solicitud”role: Filtrar por rol (MEMBER, TRAINER, ADMIN, STAFF)search: Buscar por nombre/emailmembershipStatus: Filtrar por status de membresíapage: Número de página (por defecto: 1)limit: Resultados por página (por defecto: 10)
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.admin.users.$get({ query: { role: 'MEMBER' }})Obtener Usuario por ID
Section titled “Obtener Usuario por ID”Obtener información detallada de un usuario específico.
- URL:
/api/v1/admin/users/:id - Método:
GET - Autenticación Requerida: Sí Admin
Descripción Interna
Section titled “Descripción Interna”Este endpoint obtiene el perfil completo de un usuario específico:
- Busca el UserProfile por ID
- Incluye relaciones extensas:
- Información del User (id, email, emailVerified, timestamps)
- Membresía completa
- Perfil de entrenador con contadores (sesiones, reviews)
- Últimas 10 reservas con información de clase
- Últimas 10 sesiones de entrenamiento con info del trainer
- Contadores totales (reservas, sesiones, posts, comentarios)
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.admin.users[':id'].$get({ param: { id: 'user_profile_id' }})Actualizar Rol de Usuario
Section titled “Actualizar Rol de Usuario”Actualizar el rol de un usuario.
- URL:
/api/v1/admin/users/:id/role - Método:
PATCH - Autenticación Requerida: Sí Admin
Descripción Interna
Section titled “Descripción Interna”Este endpoint actualiza el rol de un usuario:
- Verifica que el usuario existe
- Validación especial para TRAINER:
- Si el nuevo rol es TRAINER, verifica que exista un perfil de entrenador (
Trainer) asociado - Si no existe el perfil de trainer, lanza error 400
- Si el nuevo rol es TRAINER, verifica que exista un perfil de entrenador (
- Actualiza el rol en UserProfile
- Retorna el perfil actualizado con info básica del usuario
Errores Comunes
Section titled “Errores Comunes”400 Bad Request: El usuario debe tener un perfil de entrenador para asignar rol TRAINER
Cuerpo de Solicitud
Section titled “Cuerpo de Solicitud”{ "role": "TRAINER"}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.admin.users[':id'].role.$patch({ param: { id: 'user_id' }, json: { role: 'TRAINER' }})Eliminar Usuario
Section titled “Eliminar Usuario”Eliminar un usuario del sistema.
- URL:
/api/v1/admin/users/:id - Método:
DELETE - Autenticación Requerida: Sí Admin
Descripción Interna
Section titled “Descripción Interna”Este endpoint elimina un usuario del sistema:
- Verifica reservas futuras: Cuenta reservas CONFIRMED con fecha futura
- Bloquea eliminación si tiene reservas confirmadas pendientes
- Obtiene el UserProfile con el User asociado
- Elimina el User (esto elimina en cascada el UserProfile por la relación)
- Retorna confirmación de eliminación
Errores Comunes
Section titled “Errores Comunes”400 Bad Request: No se puede eliminar porque tiene reservas confirmadas futuras
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.admin.users[':id'].$delete({ param: { id: 'user_id' }})Obtener Reporte de Ingresos
Section titled “Obtener Reporte de Ingresos”Obtener reporte de ingresos para un período específico.
- URL:
/api/v1/admin/reports/revenue - Método:
GET - Autenticación Requerida: Sí Admin
Descripción Interna
Section titled “Descripción Interna”Este endpoint genera un reporte de ingresos:
Nota: Este endpoint tiene implementación parcial (TODO en el código)
- Parámetros de período: Acepta startDate, endDate y period
- Retorna estructura base:
period: Período del reportetotal: Total de ingresos (TODO: calcular)growth: Crecimiento (TODO: calcular)bySource: Ingresos por fuente (membresías, sesiones) (TODO)byPeriod: Desglose temporal (TODO)
Parámetros de Consulta de Solicitud
Section titled “Parámetros de Consulta de Solicitud”startDate: Fecha de inicio (YYYY-MM-DD)endDate: Fecha de fin (YYYY-MM-DD)period: Período de agrupación (day, week, month)
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.admin.reports.revenue.$get({ query: { startDate: '2023-01-01', endDate: '2023-12-31' }})Obtener Configuración del Sistema
Section titled “Obtener Configuración del Sistema”Obtener todas las configuraciones del sistema.
- URL:
/api/v1/admin/system/config - Método:
GET - Autenticación Requerida: Sí Admin
Descripción Interna
Section titled “Descripción Interna”Este endpoint obtiene las configuraciones del sistema:
Nota: Este endpoint no está completamente implementado (TODO: modelo SystemConfig)
Actualmente retorna un array vacío. Cuando se implemente el modelo SystemConfig, retornará todas las configuraciones del sistema.
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.admin.system.config.$get()Obtener Estado del Sistema
Section titled “Obtener Estado del Sistema”Obtener métricas de estado del sistema.
- URL:
/api/v1/admin/system/health - Método:
GET - Autenticación Requerida: Sí Admin
Descripción Interna
Section titled “Descripción Interna”Este endpoint verifica el estado de salud del sistema:
-
Database Health (si
includeDatabase: true):- Ejecuta
SELECT 1para probar conexión - Mide tiempo de respuesta
- Cuenta registros totales de usuarios
- Estado: “connected” o “disconnected”
- Ejecuta
-
Memory Usage:
used: Memoria heap usadatotal: Memoria heap totalpercentage: Porcentaje de uso
-
Overall Status:
- “healthy”: DB conectada y memoria < 90%
- “degraded”: DB conectada pero memoria > 90%
- “unhealthy”: DB desconectada
-
Uptime: Tiempo de ejecución del proceso
Parámetros de Consulta de Solicitud
Section titled “Parámetros de Consulta de Solicitud”includeDatabase: Incluir verificación de estado de la base de datos (por defecto: true)
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.admin.system.health.$get({ query: { includeDatabase: 'true' }})