Registros de Entrenamiento
Endpoints para registrar y seguir sesiones de entrenamiento.
Modelos de Datos
Section titled “Modelos de Datos”Los siguientes modelos de Prisma pertenecen al schema fitness:
WorkoutLog
Section titled “WorkoutLog”model WorkoutLog { id String @id @default(cuid()) name String @map("name") userProfileId String @map("user_profile_id") routineId String? @map("routine_id") duration Int? @map("duration") caloriesBurned Int? @map("calories_burned") notes String?
userProfile UserProfile @relation(fields: [userProfileId], references: [id], onDelete: Cascade) routine WorkoutRoutine? @relation(fields: [routineId], references: [id], onDelete: SetNull) exercises WorkoutExercise[]
createdAt DateTime @default(now()) @map("created_at") updatedAt DateTime @updatedAt @map("updated_at")
@@map("workout_logs") @@schema("fitness")}WorkoutExercise
Section titled “WorkoutExercise”model WorkoutExercise { id String @id @default(cuid()) workoutLogId String @map("workout_log_id") exerciseId String @map("exercise_id") sets Int? reps Int? weight Float? duration Int? distance Float? notes String? restTime Int? @map("rest_time")
workoutLog WorkoutLog @relation(fields: [workoutLogId], references: [id], onDelete: Cascade) exercise Exercise @relation(fields: [exerciseId], references: [id], onDelete: Cascade)
@@map("workout_exercises") @@schema("fitness")}Endpoints
Section titled “Endpoints”Obtener Registros de Entrenamiento
Section titled “Obtener Registros de Entrenamiento”Obtener una lista de registros de entrenamiento (Admin/Staff o propios).
- URL:
/api/v1/workouts/logs - Método:
GET - Autenticación Requerida: Sí (Admin/Staff para todos, usuarios ven propios)
Descripción Interna
Section titled “Descripción Interna”Este endpoint obtiene logs de entrenamiento:
-
Filtros disponibles:
userId: Filtrar por usuarioroutineId: Filtrar por rutinastartDate/endDate: Rango de fechasminDuration/maxDuration: Filtrar por duraciónminCalories/maxCalories: Filtrar por calorías
-
Incluye:
- userProfile con email
- routine (id, name, difficulty)
- exercises con detalles del ejercicio (name, targetMuscles)
-
Ordenado por createdAt descendente
Parámetros de Consulta de Solicitud
Section titled “Parámetros de Consulta de Solicitud”dateFrom: Fecha de iniciodateTo: Fecha de finuserId: Filtrar por usuarioroutineId: Filtrar por rutinaminDuration/maxDuration: Rango de duraciónminCalories/maxCalories: Rango de caloríaspage: Número de páginalimit: Resultados por página
Respuesta
Section titled “Respuesta”{ "data": [ { "id": "...", "duration": 60, "caloriesBurned": 350, "notes": "Good session", "userProfile": {...}, "routine": { "id": "...", "name": "Full Body", "difficulty": "INTERMEDIATE" }, "exercises": [...] } ], "pagination": {...}}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.workouts.logs.$get({ query: { dateFrom: '2023-10-01' }})Obtener Mis Registros de Entrenamiento
Section titled “Obtener Mis Registros de Entrenamiento”Obtener registros de entrenamiento del usuario actual.
- URL:
/api/v1/workouts/logs/me - Método:
GET - Autenticación Requerida: Sí
Descripción Interna
Section titled “Descripción Interna”Este endpoint es un wrapper que llama a getAllWorkoutLogs con el userId del token autenticado. Aplica los mismos filtros pero solo para el usuario actual.
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.workouts.logs.me.$get({ query: { limit: '10' }})Obtener Último Registro de Entrenamiento
Section titled “Obtener Último Registro de Entrenamiento”Obtener el registro de entrenamiento más reciente del usuario actual.
- URL:
/api/v1/workouts/logs/last - Método:
GET - Autenticación Requerida: Sí
Descripción Interna
Section titled “Descripción Interna”Este endpoint obtiene el último entrenamiento:
- Busca el log más reciente del usuario (findFirstOrThrow)
- Ordena por createdAt descendente
- Incluye exercises del log
- Lanza 404 si no tiene logs
Respuesta
Section titled “Respuesta”{ "data": { "id": "...", "duration": 60, "caloriesBurned": 350, "createdAt": "2023-10-27T10:00:00Z", "exercises": [...] }}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.workouts.logs.last.$get()Obtener Registro de Entrenamiento por ID
Section titled “Obtener Registro de Entrenamiento por ID”Obtener un registro de entrenamiento específico.
- URL:
/api/v1/workouts/logs/:id - Método:
GET - Autenticación Requerida: Sí
Descripción Interna
Section titled “Descripción Interna”Este endpoint obtiene un log específico:
- Busca por ID con findUniqueOrThrow
- Incluye:
- userProfile con email
- routine con targetMuscles, equipment
- exercises con información detallada del ejercicio (instructions, gifUrl)
Crear Registro de Entrenamiento
Section titled “Crear Registro de Entrenamiento”Registrar un nuevo entrenamiento.
- URL:
/api/v1/workouts/logs - Método:
POST - Autenticación Requerida: Sí
Descripción Interna
Section titled “Descripción Interna”Este endpoint crea un nuevo log de entrenamiento:
- Obtiene userProfileId del token
- Crea el log con:
- duration, caloriesBurned, notes
- routineId (opcional, si se basó en una rutina)
- Incluye exercises y routine en respuesta
Cuerpo de Solicitud
Section titled “Cuerpo de Solicitud”{ "duration": 60, "caloriesBurned": 350, "notes": "Good session", "routineId": "routine_id"}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.workouts.logs.$post({ json: { duration: 60, caloriesBurned: 350, notes: 'Good session' }})Actualizar Registro de Entrenamiento
Section titled “Actualizar Registro de Entrenamiento”Actualizar un registro de entrenamiento existente.
- URL:
/api/v1/workouts/logs/:id - Método:
PUT - Autenticación Requerida: Sí
Descripción Interna
Section titled “Descripción Interna”Este endpoint actualiza un log:
- Actualiza campos proporcionados (duration, caloriesBurned, notes, etc.)
- Incluye exercises y routine en respuesta
Eliminar Registro de Entrenamiento
Section titled “Eliminar Registro de Entrenamiento”Eliminar un registro de entrenamiento.
- URL:
/api/v1/workouts/logs/:id - Método:
DELETE - Autenticación Requerida: Sí
Descripción Interna
Section titled “Descripción Interna”Este endpoint elimina un log de entrenamiento y sus ejercicios asociados (cascade).
Añadir Ejercicio a Registro de Entrenamiento
Section titled “Añadir Ejercicio a Registro de Entrenamiento”Añadir un ejercicio a un registro de entrenamiento.
- URL:
/api/v1/workouts/logs/:id/exercises - Método:
POST - Autenticación Requerida: Sí
Descripción Interna
Section titled “Descripción Interna”Este endpoint añade un ejercicio al log:
- Crea WorkoutExercise con:
- workoutLogId
- exerciseId
- sets, reps, weight
- duration, distance (para cardio)
- restTime, notes
- rpeTarget (Rate of Perceived Exertion)
Cuerpo de Solicitud
Section titled “Cuerpo de Solicitud”{ "exerciseId": "exercise_id", "sets": 3, "reps": 10, "weight": 50, "restTime": 60, "notes": "Felt strong"}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.workouts.logs[':id'].exercises.$post({ param: { id: 'workout_log_id' }, json: { exerciseId: 'exercise_id', sets: 3, reps: 10, weight: 50 }})Actualizar Ejercicio en Registro de Entrenamiento
Section titled “Actualizar Ejercicio en Registro de Entrenamiento”Actualizar un ejercicio en un registro de entrenamiento.
- URL:
/api/v1/workouts/logs/:logId/exercises/:exerciseId - Método:
PUT - Autenticación Requerida: Sí
Descripción Interna
Section titled “Descripción Interna”Este endpoint actualiza un ejercicio en el log:
- Actualiza los campos proporcionados del WorkoutExercise
Eliminar Ejercicio de Registro de Entrenamiento
Section titled “Eliminar Ejercicio de Registro de Entrenamiento”Eliminar un ejercicio de un registro de entrenamiento.
- URL:
/api/v1/workouts/logs/:logId/exercises/:exerciseId - Método:
DELETE - Autenticación Requerida: Sí