import { reportConfigs } from "@api/admin/report/report-configs/report-configs";
import { BNestEmailTemplateConfig, BNestUserConfig, BNestValuelistConfig } from "@bish-nest/core";
import { ModuleConfigBase } from "@bish-nest/core/app-config/module-config-base.class";
import { BNestCfgService } from "@bish-nest/core/config";
import { BNestInitInterface } from "@bish-nest/core/interfaces";
import { BNestAppLogger } from "@bish-nest/core/services";
import { BNestEmailLogConfig } from "@bish-nest/email-log";
import { Injectable, OnModuleInit } from "@nestjs/common";
import { EmailTemplateType } from "@prisma/client";
import { AssessmentConfig } from "../api/admin/assessment/config/assessment-config.service";
import { CompanyConfig } from "../api/admin/company/config/company-config.service";
import { CourseConfig } from "../api/admin/course/config/course-config.service";
import { CourseModuleConfig } from "../api/admin/course-module/config/course-module-config.service";
import { CourseModulePageConfig } from "../api/admin/course-module-page/config/course-module-page-config.service";
import { InvoiceConfig } from "../api/admin/invoice/config/invoice-config.service";
import { KnowledgeReviewConfig } from "../api/admin/knowledge-review/config/knowledge-review-config.service";
import { KnowledgeReviewQuestionConfig } from "../api/admin/knowledge-review/config/knowledge-review-question-config.service";
import { LearningGroupConfig } from "../api/admin/learning-group/config/learning-group-config.service";
import { PackageConfig } from "../api/admin/package/config/package-config.service";
import { ParticipantConfig } from "../api/admin/participant/config/participant-config.service";
import { ParticipantGroupConfig } from "../api/admin/participant-group/config/participant-group-config.service";
import { PromoCodeConfig } from "../api/admin/promo-code/config/promo-code-config.service";
import { ReportLogConfig } from "../api/admin/report-log/config/report-log-config.service";
import { SubscriptionConfig } from "../api/admin/subscription/config/subscription-config.service";
import { SystemLogConfig } from "../api/admin/system-log/config/system-log-config.service";
import { SystemSettingConfig } from "../api/admin/system-setting/config/system-setting-config.service";
import { TestimonialConfig } from "../api/admin/testimonial/config/testimonial-config.service";
import { ContactEnquiryConfig } from "../api/admin/contact-enquiry/config/contact-enquiry-config.service";
import { getEmailSkeleton } from "../templates/email/email-skeleton.template";
@Injectable()
export class InitService implements OnModuleInit, BNestInitInterface {
private moduleConfigTypes: ModuleConfigBase[] = [];
private initialized = false;
constructor(
private bnestCfgService: BNestCfgService,
private valuelistConfig: BNestValuelistConfig,
private userConfig: BNestUserConfig,
private companyConfig: CompanyConfig,
private participantConfig: ParticipantConfig,
private courseConfig: CourseConfig,
private courseModuleConfig: CourseModuleConfig,
private courseModulePageConfig: CourseModulePageConfig,
private packageConfig: PackageConfig,
private contactEnquiryConfig: ContactEnquiryConfig,
private assessmentConfig: AssessmentConfig,
private knowledgeReviewConfig: KnowledgeReviewConfig,
private knowledgeReviewQuestionConfig: KnowledgeReviewQuestionConfig,
private emailTemplateConfig: BNestEmailTemplateConfig,
private emailLogConfig: BNestEmailLogConfig,
private reportLogConfig: ReportLogConfig,
private systemLogConfig: SystemLogConfig,
private systemSettingConfig: SystemSettingConfig,
private subscriptionConfig: SubscriptionConfig,
private invoiceConfig: InvoiceConfig,
private promoCodeConfig: PromoCodeConfig,
private testimonialConfig: TestimonialConfig,
private participantGroupConfig: ParticipantGroupConfig,
private learningGroupConfig: LearningGroupConfig,
private readonly logger: BNestAppLogger,
) {}
async onModuleInit() {
await this.init();
}
async init(): Promise<void> {
if (this.initialized) {
this.logger.log("InitService: init skipped (already initialized)");
return;
}
this.logger.log("InitService: initialization start");
// Email template admin module: align validators / column config with this app's Prisma enum
this.bnestCfgService.setEmailTemplateTypeValues(Object.values(EmailTemplateType) as string[]);
// Set up the module config types array (only those available in RecallAssess API)
this.moduleConfigTypes = [
this.valuelistConfig,
this.userConfig,
this.companyConfig,
this.participantConfig,
this.courseConfig,
this.courseModuleConfig,
this.courseModulePageConfig,
this.packageConfig,
this.contactEnquiryConfig,
this.assessmentConfig,
this.knowledgeReviewConfig,
this.knowledgeReviewQuestionConfig,
this.emailTemplateConfig,
this.emailLogConfig,
this.reportLogConfig,
this.systemLogConfig,
this.systemSettingConfig,
this.subscriptionConfig,
this.invoiceConfig,
this.promoCodeConfig,
this.participantGroupConfig,
this.learningGroupConfig,
this.testimonialConfig,
];
// First set the module config types
this.bnestCfgService.setModuleConfigTypes(this.moduleConfigTypes);
// Then set all the module configs
this.bnestCfgService.setModulesConfig();
// Set all the report configs
this.bnestCfgService.setReportsConfig(reportConfigs);
// Set RecallAssess email skeleton template
this.bnestCfgService.setEmailSkeleton(getEmailSkeleton);
this.bnestCfgService.validate();
this.initialized = true;
this.logger.log("InitService: initialization complete");
}
}