Skip to content

Registros de Entrenamiento

Endpoints para registrar y seguir sesiones de entrenamiento.

Los siguientes modelos de Prisma pertenecen al schema fitness:

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")
}
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")
}

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)

Este endpoint obtiene logs de entrenamiento:

  1. Filtros disponibles:

    • userId: Filtrar por usuario
    • routineId: Filtrar por rutina
    • startDate/endDate: Rango de fechas
    • minDuration/maxDuration: Filtrar por duración
    • minCalories/maxCalories: Filtrar por calorías
  2. Incluye:

    • userProfile con email
    • routine (id, name, difficulty)
    • exercises con detalles del ejercicio (name, targetMuscles)
  3. Ordenado por createdAt descendente

  • dateFrom: Fecha de inicio
  • dateTo: Fecha de fin
  • userId: Filtrar por usuario
  • routineId: Filtrar por rutina
  • minDuration/maxDuration: Rango de duración
  • minCalories/maxCalories: Rango de calorías
  • page: Número de página
  • limit: Resultados por página
{
"data": [
{
"id": "...",
"duration": 60,
"caloriesBurned": 350,
"notes": "Good session",
"userProfile": {...},
"routine": {
"id": "...",
"name": "Full Body",
"difficulty": "INTERMEDIATE"
},
"exercises": [...]
}
],
"pagination": {...}
}
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 registros de entrenamiento del usuario actual.

  • URL: /api/v1/workouts/logs/me
  • Método: GET
  • Autenticación Requerida:

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.

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 el registro de entrenamiento más reciente del usuario actual.

  • URL: /api/v1/workouts/logs/last
  • Método: GET
  • Autenticación Requerida:

Este endpoint obtiene el último entrenamiento:

  1. Busca el log más reciente del usuario (findFirstOrThrow)
  2. Ordena por createdAt descendente
  3. Incluye exercises del log
  4. Lanza 404 si no tiene logs
{
"data": {
"id": "...",
"duration": 60,
"caloriesBurned": 350,
"createdAt": "2023-10-27T10:00:00Z",
"exercises": [...]
}
}
import { hcWithType } from '@vitality-gym/api/client'
const client = hcWithType('http://localhost:3000')
const res = await client.api.v1.workouts.logs.last.$get()

Obtener un registro de entrenamiento específico.

  • URL: /api/v1/workouts/logs/:id
  • Método: GET
  • Autenticación Requerida:

Este endpoint obtiene un log específico:

  1. Busca por ID con findUniqueOrThrow
  2. Incluye:
    • userProfile con email
    • routine con targetMuscles, equipment
    • exercises con información detallada del ejercicio (instructions, gifUrl)

Registrar un nuevo entrenamiento.

  • URL: /api/v1/workouts/logs
  • Método: POST
  • Autenticación Requerida:

Este endpoint crea un nuevo log de entrenamiento:

  1. Obtiene userProfileId del token
  2. Crea el log con:
    • duration, caloriesBurned, notes
    • routineId (opcional, si se basó en una rutina)
  3. Incluye exercises y routine en respuesta
{
"duration": 60,
"caloriesBurned": 350,
"notes": "Good session",
"routineId": "routine_id"
}
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 un registro de entrenamiento existente.

  • URL: /api/v1/workouts/logs/:id
  • Método: PUT
  • Autenticación Requerida:

Este endpoint actualiza un log:

  1. Actualiza campos proporcionados (duration, caloriesBurned, notes, etc.)
  2. Incluye exercises y routine en respuesta

Eliminar un registro de entrenamiento.

  • URL: /api/v1/workouts/logs/:id
  • Método: DELETE
  • Autenticación Requerida:

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:

Este endpoint añade un ejercicio al log:

  1. Crea WorkoutExercise con:
    • workoutLogId
    • exerciseId
    • sets, reps, weight
    • duration, distance (para cardio)
    • restTime, notes
    • rpeTarget (Rate of Perceived Exertion)
{
"exerciseId": "exercise_id",
"sets": 3,
"reps": 10,
"weight": 50,
"restTime": 60,
"notes": "Felt strong"
}
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:

Este endpoint actualiza un ejercicio en el log:

  1. 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: