Class Types — Code Map
API
| File | Purpose |
|---|---|
apps/api/src/class-types/class-types.module.ts | Wires controller + service; imports MembershipsModule. |
apps/api/src/class-types/class-types.controller.ts | Routes; toResponse mapper to ClassTypeResponse (@fitkit/shared). |
apps/api/src/class-types/class-types.service.ts | CRUD; depends on MembershipsService.requireMembership for auth, raw programs query for org-belonging check. |
apps/api/src/class-types/dto/create-class-type.dto.ts | programId, name, description?, defaultDurationMin?, defaultCapacity?, color?, hasWorkout?. |
apps/api/src/class-types/dto/update-class-type.dto.ts | PartialType minus programId. |
Routes (prefix organizations/:orgId/class-types)
| Method | Path | Handler | Notes |
|---|---|---|---|
| POST | / | create | owner/admin |
| GET | / | list | any member |
| GET | /:id | getById | any member |
| PATCH | /:id | update | owner/admin |
| DELETE | /:id | remove (deactivate) | owner/admin |
Web
apps/web/src/components/onboarding/class-type-form.tsx— the form component used both in onboarding and in the schedule settings panel.apps/web/src/app/[lang]/(protected)/dashboard/schedule/page.tsxand its sub-tabs render the class types ribbon and class-types CRUD sheet.- i18n keys:
schedule.classTypes*,schedule.classTypeSheet*inapps/web/src/i18n/dictionaries/{en,he,ru}.json.
DB tables
| Table | Used as |
|---|---|
class_types | Owned. |
programs | Parent FK (class_types.program_id). Org boundary lives here. |
class_sessions | Child; references class_type_id. |
daily_programming | Keys by class_type_id + date. |
Shared schemas
libs/shared/src/lib/schemas/scheduling.schema.ts—ClassTypeResponseshape:{ id, programId, name, description, defaultDurationMin, defaultCapacity, color, hasWorkout, isActive, createdAt, program: { id, name, deliveryMode } }
Tests
- No dedicated unit spec found for class types as of this audit (see
ls apps/api/src/class-types/). CRUD is exercised indirectly through scheduling specs. TODO: addclass-types.service.unit.spec.ts.