Skip to Content
Living documentation — last reviewed 2026-05-28
FeaturesWorkout AssignmentsWorkout assignments — code map

Workout assignments — code map

API

Base path: /organizations/:orgId/assignments

Routes

RouteMethodService method
GET /coach-overviewKPIs + roster + sparklinegetCoachOverview
GET /my-weekMember’s published weekfindMyWeek
GET /todayMember’s published dayfindMyToday
PATCH /publishBulk set published on listed idssetPublished
POST /bulk-previewFilter → count + 10 samplesbulkPreview
POST /bulk-deleteFilter → soft-delete + auditbulkDelete
POST /bulk-publishFilter → publish drafts + auditbulkPublish
POST /personalBulk assign to athletesassignPersonal
POST /feedInsert workout_feed_posts rowassignFeed
POST /scheduleInsert class_sessions + workout linkassignSchedule
GET /`?weekStart&userIdprogramId`
POST /Legacy single-athlete createcreate
PATCH /:idUpdateupdate
DELETE /:idSoft deleteremove
POST /:id/completeStatus → completedcomplete
POST /:id/skipStatus → skippedskip
GET /:idSingle by id (member-scoped)findMyOne

Controller: apps/api/src/workout-assignments/workout-assignments.controller.ts Service: apps/api/src/workout-assignments/workout-assignments.service.ts (~1391 lines) Module: apps/api/src/workout-assignments/workout-assignments.module.ts

NestJS first-match-wins: literal routes (coach-overview, my-week, today, publish, bulk-*, personal, feed, schedule) are declared above :id in the controller for routing precedence.

Cross-feature exports

forkSnapshotIfNeeded(assignmentId) is the canonical entry point for lazy-fork. Used by:

  • apps/api/src/workouts/workouts.service.tsresolveEditTarget and updateMovementPrescription.
  • apps/api/src/workout-results/workout-results.service.tscreate (anchor result to snapshot id).

DTOs (apps/api/src/workout-assignments/dto/)

  • create-assignment.dto.ts — legacy single-athlete create.
  • update-assignment.dto.ts.
  • assign-personal.dto.ts{ workoutId?, kind?, note?, date, athleteIds[], drip:'now'|'morning_of' }.
  • assign-feed.dto.ts{ trackId, workoutId, publishAt, note? }.
  • assign-schedule.dto.ts{ workoutId, classTypeId, slots:[{startAt, capacity}] }.
  • set-published.dto.ts — bulk by id list.
  • bulk-filter.dto.tsWorkoutAssignmentsBulkPreviewDto, BulkDeleteDto, BulkPublishDto; WorkoutAssignmentsBulkFilter schema in libs/shared.

Web

Routes

PathFile
Member whiteboard (today + week)apps/web/src/app/[lang]/(protected)/(member)/whiteboard/page.tsx
Member program (assigned workouts)apps/web/src/app/[lang]/(protected)/(member)/program/page.tsx
Coach overviewapps/web/src/app/[lang]/(protected)/dashboard/overview/page.tsx
Program week gridapps/web/src/app/[lang]/(protected)/dashboard/programs/[id]/week/[date]/page.tsx
Members tab in weekapps/web/src/app/[lang]/(protected)/dashboard/programs/[id]/week/[date]/members/page.tsx
Single member dayapps/web/src/app/[lang]/(protected)/dashboard/programs/[id]/week/[date]/members/[memberId]/page.tsx
Member day editapps/web/src/app/[lang]/(protected)/dashboard/programs/[id]/week/[date]/members/[memberId]/edit/page.tsx

Components

  • apps/web/src/components/overview/programming/ — the coaching program views:
    • member-week-grid.tsx, feed-programming-view.tsx, client-compliance-view.tsx, program-enrollments-tab.tsx, program-comments-tab.tsx, program-class-types-tab.tsx
    • bulk-coaching-actions-sheet.tsx — bulk preview + delete + publish UI
    • workout-picker-sheet.tsx, week-navigation-bar.tsx, member-avatar.tsx, empty-state.tsx
  • apps/web/src/components/shared/program-grid/ — reusable cell shell + menus
  • apps/web/src/components/member/workouts/workout-detail-drawer.tsx — member’s view of one assignment’s snapshot
  • apps/web/src/components/member/session-card.tsx, apps/web/src/components/member/day-selector-strip.tsx

DB

libs/db/src/lib/schema/workouts.ts:

  • workout_assignments — see data-model.md.
  • workout_feed_posts — feed broadcast row (lives in scheduling.ts).

Shared

libs/shared/src/lib/schemas/workout.schema.ts:

  • workoutAssignmentResponseSchema — response shape.
  • assignmentStatusValuesassigned/completed/skipped.
  • workoutAssignmentsBulkFilterSchema, workoutAssignmentsBulkPreviewResponseSchema, workoutAssignmentsBulkDeleteInputSchema/ResponseSchema, workoutAssignmentsBulkPublishInputSchema/ResponseSchema.

Tests

FileType
apps/api/src/workout-assignments/workout-assignments.service.unit.spec.tsUnit — service core
apps/api/src/workout-assignments/workout-assignments.bulk.unit.spec.tsUnit — bulk preview/delete/publish
apps/api/src/workout-assignments/workout-assignments.service.driver.tsTest driver
apps/web/e2e/specs/coaching-grid.spec.tsE2E — coaching program grid
apps/web/e2e/specs/lazy-fork.spec.tsE2E — lazy-fork lifecycle
apps/web/e2e/specs/member-workout.spec.tsE2E — member day view