Skip to Content
Living documentation — last reviewed 2026-05-28
FeaturesClass TypesClass Types — Code Map

Class Types — Code Map

API

FilePurpose
apps/api/src/class-types/class-types.module.tsWires controller + service; imports MembershipsModule.
apps/api/src/class-types/class-types.controller.tsRoutes; toResponse mapper to ClassTypeResponse (@fitkit/shared).
apps/api/src/class-types/class-types.service.tsCRUD; depends on MembershipsService.requireMembership for auth, raw programs query for org-belonging check.
apps/api/src/class-types/dto/create-class-type.dto.tsprogramId, name, description?, defaultDurationMin?, defaultCapacity?, color?, hasWorkout?.
apps/api/src/class-types/dto/update-class-type.dto.tsPartialType minus programId.

Routes (prefix organizations/:orgId/class-types)

MethodPathHandlerNotes
POST/createowner/admin
GET/listany member
GET/:idgetByIdany member
PATCH/:idupdateowner/admin
DELETE/:idremove (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.tsx and its sub-tabs render the class types ribbon and class-types CRUD sheet.
  • i18n keys: schedule.classTypes*, schedule.classTypeSheet* in apps/web/src/i18n/dictionaries/{en,he,ru}.json.

DB tables

TableUsed as
class_typesOwned.
programsParent FK (class_types.program_id). Org boundary lives here.
class_sessionsChild; references class_type_id.
daily_programmingKeys by class_type_id + date.

Shared schemas

  • libs/shared/src/lib/schemas/scheduling.schema.tsClassTypeResponse shape:
    { 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: add class-types.service.unit.spec.ts.