apps/recallassess/recallassess-api/src/app.module.ts
import { AssessmentModule } from "@api/admin/assessment/assessment.module";
import { CompanyModule } from "@api/admin/company/company.module";
import { ContactEnquiryModule } from "@api/admin/contact-enquiry/contact-enquiry.module";
import { CourseModule } from "@api/admin/course/course.module";
import { CourseModuleModule } from "@api/admin/course-module/course-module.module";
import { CourseModulePageModule } from "@api/admin/course-module-page/course-module-page.module";
import { DashboardModule } from "@api/admin/dashboard/dashboard.module";
import { EmailTemplateModule } from "@api/admin/email-template/email-template.module";
import { InvoiceModule } from "@api/admin/invoice/invoice.module";
import { KnowledgeReviewModule } from "@api/admin/knowledge-review/knowledge-review.module";
import { LearningGroupModule } from "@api/admin/learning-group/learning-group.module";
import { PackageModule } from "@api/admin/package/package.module";
import { ParticipantModule } from "@api/admin/participant/participant.module";
import { ParticipantGroupModule } from "@api/admin/participant-group/participant-group.module";
import { PromoCodeModule } from "@api/admin/promo-code/promo-code.module";
import { ReportModule } from "@api/admin/report/report.module";
import { ReportLogModule } from "@api/admin/report-log/report-log.module";
import { SubscriptionModule } from "@api/admin/subscription/subscription.module";
import { SystemLogModule } from "@api/admin/system-log/system-log.module";
import { SystemSettingModule } from "@api/admin/system-setting/system-setting.module";
import { TestimonialModule } from "@api/admin/testimonial/testimonial.module";
import { CLAccountModule } from "@api/client/account/account.module";
import { CLAssessmentModule } from "@api/client/assessment/assessment.module";
import { CLAuthModule } from "@api/client/auth/auth.module";
import { CLCommonModule } from "@api/client/common/common.module";
import { CLCompanyProfileModule } from "@api/client/company-profile/company-profile.module";
import { CLContactSupportModule } from "@api/client/contact-support/contact-support.module";
import { CLCourseModule } from "@api/client/course/course.module";
import { CLDashboardModule } from "@api/client/dashboard/dashboard.module";
import { CLEmailModule } from "@api/client/email/email.module";
import { CLKnowledgeReviewModule } from "@api/client/knowledge-review/knowledge-review.module";
import { CLLearningModule } from "@api/client/learning/learning.module";
import { CLLearningGroupModule } from "@api/client/learning-group/learning-group.module";
import { CLMyCourseModule } from "@api/client/my-course/my-course.module";
import { CLPackageModule } from "@api/client/package/package.module";
import { CLParticipantModule } from "@api/client/participant/participant.module";
import { CLParticipantGroupModule } from "@api/client/participant-group/participant-group.module";
import { CLProfileModule } from "@api/client/profile/profile.module";
import { CLPromoCodeModule } from "@api/client/promo-code/promo-code.module";
import { CLSubscriptionModule } from "@api/client/subscription/subscription.module";
import { CLTestimonialModule } from "@api/client/testimonial/testimonial.module";
import { IntegrationModule } from "@api/integration/integration.module";
import { EmailModule } from "@api/shared/email/email.module";
import { RecallAssessEmailSenderModule } from "@api/shared/email/recallassess-email-sender.module";
import { MediaModule } from "@api/shared/media/media.module";
import { CLMiddlewareModule } from "@api/shared/middlewares";
import { ScheduledEmailModule } from "@api/shared/scheduled-email/scheduled-email.module";
import { StripeModule } from "@api/shared/stripe/stripe.module";
import { SystemLogStatusCodeInterceptor } from "@api/shared/system-log/interceptors/system-log-status-code.interceptor";
import { SystemLogSharedModule } from "@api/shared/system-log/system-log-shared.module";
import { TimezoneModule } from "@api/shared/timezone/timezone.module";
import {
BNEST_GLOBAL_EXCEPTION_LOG_WRITER,
BNestNavigationAdminModule,
BNestUserModule,
BNestValuelistModule,
} from "@bish-nest/core";
import { BNestAuthModule } from "@bish-nest/core/auth";
import { BNestCommonModule } from "@bish-nest/core/common";
import { GlobalExceptionFilter } from "@bish-nest/core/exception-filters/global-exception.filter";
import { BNestGlobalModule } from "@bish-nest/core/global";
import { ContentInterceptor } from "@bish-nest/core/interceptors/content.interceptor";
import { BNestLoggingInterceptor } from "@bish-nest/core/interceptors/logging.interceptor";
import { BNestExtractDataFromRequestModule } from "@bish-nest/core/middlewares/extract-data-from-request.module";
import { BNestAppRequestContext } from "@bish-nest/core/request-context/app-request-context";
import { RequestContextModule } from "@medibloc/nestjs-request-context";
import { Module } from "@nestjs/common";
import { ConfigModule } from "@nestjs/config";
import { APP_INTERCEPTOR } from "@nestjs/core";
import { EventEmitterModule } from "@nestjs/event-emitter";
import { existsSync } from "fs";
import { join } from "path";
import { CLAssessmentReportsModule } from "./api/client/reports/assessment-reports.module";
import { CLCourseReportsModule } from "./api/client/reports/course-reports.module";
import { CLLearningGroupReportsModule } from "./api/client/reports/learning-group-reports.module";
import { CLParticipantGroupReportsModule } from "./api/client/reports/participant-group-reports.module";
import { CLParticipantReportsModule } from "./api/client/reports/participant-reports.module";
import { CLReportsModule } from "./api/client/reports/reports.module";
import { RecallAssessGlobalExceptionLogWriterService } from "./common/adapters/recallassess-global-exception-log-writer.service";
import { InitService } from "./common/init.service";
import { AuthConfigService } from "./config/auth-config.service";
import { adminNavigationConfig } from "./config/navigation";
import { SubscriptionExpiryScheduleService } from "./jobs/subscription-expiry-schedule.service";
@Module({
imports: [
(() => {
const cwd = process.cwd();
const envFiles = [".env", "apps/recallassess/recallassess-api/docker/.env", "docker/.env"]
.map((p) => join(cwd, p))
.filter((p) => existsSync(p));
return ConfigModule.forRoot({
isGlobal: true,
envFilePath: envFiles.length > 0 ? envFiles : undefined,
});
})(),
EventEmitterModule.forRoot({
// Set this to `true` to use wildcards
wildcard: false,
// The delimiter used to segment namespaces
delimiter: ".",
// Set this to `true` if you want to emit the newListener event
newListener: false,
// Set this to `true` if you want to emit the removeListener event
removeListener: false,
// The maximum amount of listeners that can be assigned to an event
maxListeners: 10,
// Show event name in memory leak message when more than maximum amount of listeners is assigned
verboseMemoryLeak: false,
// Disable throwing uncaughtException if an error event is emitted and it has no listeners
ignoreErrors: false,
}),
RequestContextModule.forRoot({
contextClass: BNestAppRequestContext,
isGlobal: true,
}),
BNestExtractDataFromRequestModule,
CLMiddlewareModule,
RecallAssessEmailSenderModule,
BNestGlobalModule,
BNestAuthModule,
BNestNavigationAdminModule.forRoot(adminNavigationConfig),
BNestCommonModule,
ReportModule,
SystemLogSharedModule,
CompanyModule,
ContactEnquiryModule,
DashboardModule,
BNestValuelistModule,
BNestUserModule,
MediaModule,
TimezoneModule,
ScheduledEmailModule,
StripeModule,
CLAccountModule,
ParticipantModule,
CourseModule,
CourseModuleModule,
CourseModulePageModule,
AssessmentModule,
PackageModule,
SubscriptionModule,
InvoiceModule,
PromoCodeModule,
KnowledgeReviewModule,
TestimonialModule,
EmailTemplateModule,
ReportLogModule,
SystemLogModule,
SystemSettingModule,
ParticipantGroupModule,
LearningGroupModule,
EmailModule,
// Client modules
CLAuthModule,
CLCommonModule,
CLContactSupportModule,
CLCompanyProfileModule,
CLCourseModule,
CLDashboardModule,
CLMyCourseModule,
CLLearningGroupModule,
CLLearningGroupReportsModule,
CLAssessmentModule,
CLAssessmentReportsModule,
CLParticipantModule,
CLParticipantReportsModule,
CLParticipantGroupModule,
CLParticipantGroupReportsModule,
CLCourseReportsModule,
CLReportsModule,
CLLearningModule,
CLKnowledgeReviewModule,
CLPackageModule,
CLPromoCodeModule,
CLProfileModule,
CLTestimonialModule,
CLSubscriptionModule,
CLEmailModule,
// Integration modules
IntegrationModule,
],
controllers: [],
providers: [
AuthConfigService,
InitService,
GlobalExceptionFilter,
RecallAssessGlobalExceptionLogWriterService,
{
provide: BNEST_GLOBAL_EXCEPTION_LOG_WRITER,
useExisting: RecallAssessGlobalExceptionLogWriterService,
},
{
provide: APP_INTERCEPTOR,
useClass: SystemLogStatusCodeInterceptor,
},
{
provide: APP_INTERCEPTOR,
useClass: BNestLoggingInterceptor,
},
{
provide: APP_INTERCEPTOR,
useClass: ContentInterceptor,
},
SubscriptionExpiryScheduleService,
],
exports: [],
})
export class AppModule {}