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;
}| Option | Type | Required | Description |
|---|---|---|---|
eventStorage | TimetableEventStorage | Yes | Events, exceptions, instructor/group associations |
roomStorage | RoomStorage | Yes | Room CRUD and search |
instructorStorage | InstructorStorage | Yes | Instructor CRUD |
groupStorage | GroupStorage | Yes | Group CRUD and student management |
availabilityStorage | AvailabilityStorage | Yes | Availability rules CRUD |
periodStorage | AcademicPeriodStorage | Yes | Academic period CRUD |
courseStorage | CourseStorage | Yes | Course CRUD with hierarchy |
locationDistanceStorage | LocationDistanceStorage | No | Campus-to-campus travel times |
constraints | ScheduleConstraint[] | No | Custom constraint implementations |
enableBuiltInConstraints | boolean | No | Enable/disable the 3 built-in constraints (default: true) |
Exported Services
The module exports the following injectable services and storage tokens:
Domain Services:
RecurrenceServiceTimeServiceAvailabilityServiceConflictServiceQueryService
Storage Tokens:
TimetableEventStorageRoomStorageInstructorStorageGroupStorageAvailabilityStorageAcademicPeriodStorageCourseStorage
Disabling Built-in Constraints
To replace the built-in constraints with your own:
CourseKitModule.register({
// ...storage adapters
enableBuiltInConstraints: false,
constraints: [new MyOverlapConstraint(), new MyCapacityConstraint()],
})