apps/recallassess/recallassess-api/src/api/admin/course-module-page/config/course-module-page-config.service.ts
ModuleConfigBase
Methods |
| getConfiguration |
getConfiguration()
|
|
Returns :
ModuleConfig
|
import { ColumnConfig, ColumnType } from "@bish-nest/core/app-config/column-config.class";
import { MediaConfig } from "@bish-nest/core/app-config/media-config.class";
import { ModuleConfig } from "@bish-nest/core/app-config/module-config.class";
import { ModuleConfigBase } from "@bish-nest/core/app-config/module-config-base.class";
import { Injectable } from "@nestjs/common";
import { BatAnswerLevel, ContentType, MediaName, MediaType } from "@prisma/client";
import { COURSE_MODULE_PAGE_DIFFICULTY_LEVEL_VALUES } from "../dto/course-module-page-difficulty-level.constants";
import { CourseModulePageAddDto } from "../dto/course-module-page-add.dto";
import { CourseModulePageDetailDto } from "../dto/course-module-page-detail.dto";
import { CourseModulePageListDto } from "../dto/course-module-page-list.dto";
import { CourseModulePageSaveDto } from "../dto/course-module-page-save.dto";
@Injectable()
export class CourseModulePageConfig extends ModuleConfigBase {
getConfiguration(): ModuleConfig {
const columns: ColumnConfig[] = [
new ColumnConfig({ name: "id", type: ColumnType.Integer }),
new ColumnConfig({ name: "course_title", relationPath: "course.title" }),
new ColumnConfig({ name: "course_module_title", relationPath: "courseModule.title" }),
new ColumnConfig({ name: "course_module_id", type: ColumnType.Integer }),
new ColumnConfig({ name: "course_id", type: ColumnType.Integer }),
new ColumnConfig({ name: "title" }),
new ColumnConfig({
name: "content_type",
isEnumType: true,
enumValues: Object.values(ContentType),
}),
new ColumnConfig({
name: "quiz_difficulty_level",
isEnumType: true,
enumValues: Object.values(BatAnswerLevel),
}),
new ColumnConfig({
name: "difficulty_level",
isEnumType: true,
enumValues: [...COURSE_MODULE_PAGE_DIFFICULTY_LEVEL_VALUES],
}),
new ColumnConfig({ name: "outline" }),
new ColumnConfig({ name: "topic_objectives" }),
new ColumnConfig({ name: "top_tips" }),
new ColumnConfig({ name: "sort_order", type: ColumnType.Integer }),
new ColumnConfig({ name: "is_published", type: ColumnType.Boolean }),
new ColumnConfig({ name: "time_frame" }),
new ColumnConfig({ name: "flag", type: ColumnType.Boolean }),
new ColumnConfig({ name: "created_at", type: ColumnType.DateTime }),
new ColumnConfig({ name: "updated_at", type: ColumnType.DateTime }),
];
const mediaArr: MediaConfig[] = [
new MediaConfig({
name: MediaName.COURSE_MODULE_PAGE__PHOTO,
mediaRelationName: "mediaPhotos",
mediaRelationObj: {
mediaPhotos: {
where: { media_type: MediaType.IMAGE, media_name: MediaName.COURSE_MODULE_PAGE__PHOTO },
},
},
mediaRelationFromMediaTable: "courseModulePagePhoto",
}),
// All course-module-page media use the same Prisma relation (courseModulePagePhoto) and FK (course_module_page_id).
// media_type and media_name on Media distinguish photo vs video vs document.
new MediaConfig({
name: MediaName.COURSE_MODULE_PAGE__VIDEO,
mediaRelationName: "mediaVideos",
mediaRelationObj: {
mediaVideos: {
where: { media_type: MediaType.VIDEO, media_name: MediaName.COURSE_MODULE_PAGE__VIDEO },
},
},
mediaRelationFromMediaTable: "courseModulePagePhoto",
// Course-module-page videos: Bunny Stream when upload is wired (library id / API key in env only).
videoUploadBackend: "bunny_stream",
}),
new MediaConfig({
name: MediaName.COURSE_MODULE_PAGE__VIDEO_POSTER_IMAGE,
mediaRelationName: "mediaVideoPosterImage",
mediaRelationObj: {
mediaVideoPosterImage: {
where: { media_type: MediaType.IMAGE, media_name: MediaName.COURSE_MODULE_PAGE__VIDEO_POSTER_IMAGE },
},
},
mediaRelationFromMediaTable: "courseModulePagePhoto",
}),
new MediaConfig({
name: MediaName.COURSE_MODULE_PAGE__DOCUMENT,
mediaRelationName: "mediaDocuments",
mediaRelationObj: {
mediaDocuments: {
where: { media_type: MediaType.DOCUMENT, media_name: MediaName.COURSE_MODULE_PAGE__DOCUMENT },
},
},
mediaRelationFromMediaTable: "courseModulePagePhoto",
}),
];
return new ModuleConfig({
name: "course-module-page",
idColName: "course_module_page_id",
columns,
keywordSearchCols: [
// Allow keyword search by numeric record ID.
"id",
"title",
// Allow keyword search by creation date shown in the table.
"created_at",
"outline",
"topic_objectives",
"top_tips",
"course.title",
"course.course_code",
"courseModule.title",
"courseModule.course_module_code",
],
mediaArr,
relationObjToIncludeForList: {
courseModule: true,
course: true,
},
relationObjToIncludeForDetail: {
courseModule: true,
course: true,
userCreatedBy: true,
userUpdatedBy: true,
},
listDto: CourseModulePageListDto,
detailDto: CourseModulePageDetailDto,
addDto: CourseModulePageAddDto,
saveDto: CourseModulePageSaveDto,
});
}
}