import { EmailEngagementService } from "@api/admin/email/services/email-engagement.service";
import { CLParticipantModule } from "@api/client/participant/participant.module";
import { DynamicMailFieldsModule } from "@api/shared/dynamic-mail-fields/dynamic-mail-fields.module";
import { UnsubscribeTokenService } from "@api/shared/email/services/unsubscribe-token.service";
import { BNestPrismaModule } from "@bish-nest/core/services";
import {
BNEST_EMAIL_LOG_HOOKS,
BNestEmailLogConfig,
BNestEmailLogController,
BNestEmailLogService,
} from "@bish-nest/email-log";
import { forwardRef, Module } from "@nestjs/common";
import { ScheduleModule } from "@nestjs/schedule";
import { RecallAssessEmailLogHooksService } from "../../../common/adapters/recallassess-email-log-hooks.service";
import { EmailPreferencesController } from "./controllers/email-preferences.controller";
import { EmailTemplateUpdatePendingController } from "./controllers/email-template-update-pending.controller";
import { EmailTestController } from "./controllers/email-test.controller";
import { EmailPreferencesEngagementModule } from "./email-preferences-engagement.module";
import { EmailResilienceModule } from "./email-resilience.module";
import { EmailSendingLimitsModule } from "./email-sending-limits.module";
import { EmailReminderService } from "./services/email-reminder.service";
import { EmailTestService } from "./services/email-test.service";
import { EmailValidationService } from "./services/email-validation.service";
import { EnhancedEmailService } from "./services/enhanced-email.service";
import { JourneyEmailAttachmentsService } from "./services/journey-email-attachments.service";
import { UpdatePendingEmailLogsService } from "./services/update-pending-email-logs.service";
@Module({
imports: [
ScheduleModule.forRoot(),
BNestPrismaModule,
CLParticipantModule,
DynamicMailFieldsModule,
forwardRef(() => EmailSendingLimitsModule),
forwardRef(() => EmailResilienceModule),
forwardRef(() => EmailPreferencesEngagementModule),
],
controllers: [
EmailPreferencesController,
EmailTemplateUpdatePendingController,
EmailTestController,
BNestEmailLogController,
],
providers: [
EmailReminderService,
UnsubscribeTokenService,
EnhancedEmailService,
RecallAssessEmailLogHooksService,
{
provide: BNEST_EMAIL_LOG_HOOKS,
useExisting: RecallAssessEmailLogHooksService,
},
BNestEmailLogConfig, // Required by InitService
BNestEmailLogService, // Required by ScheduledEmailProcessorService
// ✅ Email validation (DB flags, eligibility)
EmailValidationService,
UpdatePendingEmailLogsService,
EmailTestService,
EmailEngagementService,
JourneyEmailAttachmentsService,
],
exports: [
EmailReminderService,
UnsubscribeTokenService,
EnhancedEmailService,
EmailSendingLimitsModule,
EmailResilienceModule,
EmailPreferencesEngagementModule,
BNestEmailLogConfig, // Export for InitService
BNestEmailLogService, // Export for ScheduledEmailProcessorService
EmailValidationService,
EmailEngagementService,
JourneyEmailAttachmentsService,
],
})
export class EmailModule {}