My App
CourseKitBackend

Module Setup

Register and configure the CourseKitModule in your NestJS application

CourseKitModule.register()

CourseKitModule is a NestJS dynamic module. Call register() with your storage adapters and optional configuration.

import { Module } from '@nestjs/common';
import {
    CourseKitModule,
    PrismaTimetableEventAdapter,
    PrismaRoomAdapter,
    PrismaInstructorAdapter,
    PrismaGroupAdapter,
    PrismaAvailabilityAdapter,
    PrismaAcademicPeriodAdapter,
    PrismaCourseAdapter,
    PrismaLocationDistanceAdapter,
} from '@hfu.digital/coursekit-nestjs';
import { PrismaService } from './prisma.service';

@Module({
    imports: [
        CourseKitModule.register({
            eventStorage: new PrismaTimetableEventAdapter(
                prisma.timetableEvent,
                prisma.eventException,
                prisma.eventInstructor,
                prisma.eventGroup,
            ),
            roomStorage: new PrismaRoomAdapter(prisma.room),
            instructorStorage: new PrismaInstructorAdapter(prisma.instructor),
            groupStorage: new PrismaGroupAdapter(prisma.group, prisma.studentGroup),
            availabilityStorage: new PrismaAvailabilityAdapter(prisma.availability),
            periodStorage: new PrismaAcademicPeriodAdapter(prisma.academicPeriod),
            courseStorage: new PrismaCourseAdapter(prisma.course),
            locationDistanceStorage: new PrismaLocationDistanceAdapter(prisma.locationDistance),
        }),
    ],
})
export class AppModule {}

CourseKitModuleOptions

interface CourseKitModuleOptions {
    eventStorage: TimetableEventStorage;
    roomStorage: RoomStorage;
    instructorStorage: InstructorStorage;
    groupStorage: GroupStorage;
    availabilityStorage: AvailabilityStorage;
    periodStorage: AcademicPeriodStorage;
    courseStorage: CourseStorage;
    locationDistanceStorage?: LocationDistanceStorage;
    /** Additional custom constraints beyond the built-ins */
    constraints?: ScheduleConstraint[];
    /** Set false to disable built-in constraints (default: true) */
    enableBuiltInConstraints?: boolean;
}
OptionTypeRequiredDescription
eventStorageTimetableEventStorageYesEvents, exceptions, instructor/group associations
roomStorageRoomStorageYesRoom CRUD and search
instructorStorageInstructorStorageYesInstructor CRUD
groupStorageGroupStorageYesGroup CRUD and student management
availabilityStorageAvailabilityStorageYesAvailability rules CRUD
periodStorageAcademicPeriodStorageYesAcademic period CRUD
courseStorageCourseStorageYesCourse CRUD with hierarchy
locationDistanceStorageLocationDistanceStorageNoCampus-to-campus travel times
constraintsScheduleConstraint[]NoCustom constraint implementations
enableBuiltInConstraintsbooleanNoEnable/disable the 3 built-in constraints (default: true)

Exported Services

The module exports the following injectable services and storage tokens:

Domain Services:

  • RecurrenceService
  • TimeService
  • AvailabilityService
  • ConflictService
  • QueryService

Storage Tokens:

  • TimetableEventStorage
  • RoomStorage
  • InstructorStorage
  • GroupStorage
  • AvailabilityStorage
  • AcademicPeriodStorage
  • CourseStorage

Disabling Built-in Constraints

To replace the built-in constraints with your own:

CourseKitModule.register({
    // ...storage adapters
    enableBuiltInConstraints: false,
    constraints: [new MyOverlapConstraint(), new MyCapacityConstraint()],
})

On this page