File

apps/recallassess/recallassess-api/src/api/admin/course-module-page/config/course-module-page-config.service.ts

Extends

ModuleConfigBase

Index

Methods

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,
    });
  }
}

results matching ""

    No results matching ""