Skip to content

Asignaciones de Rutinas

Endpoints para asignar rutinas a usuarios y seguir progreso.

Los siguientes modelos de Prisma pertenecen al schema fitness:

model RoutineAssignment {
id String @id @default(cuid())
routineId String @map("routine_id")
userProfileId String @map("user_profile_id")
assignedById String @map("assigned_by_id")
startDate DateTime @map("start_date")
endDate DateTime? @map("end_date")
frequency AssignmentFrequency @default(FLEXIBLE)
status AssignmentStatus @default(ACTIVE)
isActive Boolean @default(true) @map("is_active")
completedSessions Int @default(0) @map("completed_sessions")
totalSessions Int? @map("total_sessions")
notes String?
userNotes String? @map("user_notes")
routine WorkoutRoutine @relation(fields: [routineId], references: [id], onDelete: Cascade)
userProfile UserProfile @relation("AssignedRoutines", fields: [userProfileId], references: [id], onDelete: Cascade)
assignedBy UserProfile @relation("AssignedRoutinesByMe", fields: [assignedById], references: [id], onDelete: Cascade)
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
@@unique([routineId, userProfileId])
@@map("routine_assignments")
@@schema("fitness")
}
enum AssignmentFrequency {
DAILY
EVERY_OTHER_DAY
THREE_TIMES_WEEK
FOUR_TIMES_WEEK
FIVE_TIMES_WEEK
WEEKLY
FLEXIBLE
@@schema("fitness")
}
enum AssignmentStatus {
ACTIVE
PAUSED
COMPLETED
CANCELLED
@@schema("fitness")
}

Obtener asignaciones de rutinas con filtros.

  • URL: /api/v1/workouts/assignments
  • Método: GET
  • Autenticación Requerida: Sí (Admin/Staff para todas)

Este endpoint obtiene asignaciones de rutinas:

  1. Filtros disponibles:

    • userId: Por usuario asignado
    • routineId: Por rutina
    • assignedBy: Por quien asignó
    • status: Estado de la asignación
    • frequency: DAILY, WEEKLY, etc.
    • isActive: Solo asignaciones activas
    • startDate/endDate: Rango de fechas
  2. Incluye:

    • routine (id, name, difficulty, estimatedDuration)
    • userProfile
    • assignedBy
  3. Usa Promise.all para obtener assignments y total en paralelo

{
"data": [
{
"id": "...",
"startDate": "2023-10-01",
"endDate": "2023-12-31",
"frequency": "WEEKLY",
"targetSessionsPerWeek": 3,
"completedSessions": 8,
"status": "ACTIVE",
"routine": {...},
"userProfile": {...},
"assignedBy": {...}
}
],
"pagination": {...}
}
import { hcWithType } from '@vitality-gym/api/client'
const client = hcWithType('http://localhost:3000')
const res = await client.api.v1.workouts.assignments.$get({
query: {}
})

Asignar una rutina a un usuario.

  • URL: /api/v1/workouts/assignments
  • Método: POST
  • Autenticación Requerida: Sí (Trainer/Admin/Staff)

Este endpoint asigna una rutina:

  1. Verifica duplicados: Busca asignación existente con mismo routineId + userProfileId
  2. Si existe y está activa: Lanza error 400
  3. Crea asignación con:
    • assignedById del token
    • startDate y endDate convertidos a Date
{
"routineId": "routine_id",
"userProfileId": "user_profile_id",
"startDate": "2023-10-01",
"endDate": "2023-12-31",
"frequency": "WEEKLY",
"targetSessionsPerWeek": 3,
"notes": "Focus on form"
}
  • 400 Bad Request: El usuario ya tiene una asignación activa para esta rutina

Obtener asignaciones de rutinas para el usuario actual.

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

Este endpoint es un wrapper que filtra por el userId del token autenticado.


Actualizar progreso al completar un entrenamiento (interno).

  • URL: Función interna
  • Autenticación Requerida: N/A

Esta función se llama internamente cuando se completa un workout:

  1. Busca asignación por routineId + userProfileId
  2. Si existe y está activa: Incrementa completedSessions
  3. Retorna null si no hay asignación