import { Module } from '@nestjs/common'; import { MikroOrmModule } from '@mikro-orm/nestjs'; import { BullModule } from '@nestjs/bullmq'; import { JwtModule } from '@nestjs/jwt'; import { Notification } from './entities/notification.entity'; import { NotificationPreference } from './entities/notification-preference.entity'; import { NotificationService } from './services/notification.service'; import { NotificationPreferenceService } from './services/notification-preference.service'; import { NotificationQueueService } from './services/notification-queue.service'; import { PushNotificationService } from './services/push-notification.service'; import { SmsProcessor } from './processors/sms.processor'; import { PushProcessor } from './processors/push.processor'; import { NotificationsController } from './controllers/notifications.controller'; import { User } from '../users/entities/user.entity'; import { Restaurant } from '../restaurants/entities/restaurant.entity'; import { AuthModule } from '../auth/auth.module'; import { ConfigService } from '@nestjs/config'; import { NotificationQueueNameEnum } from './constants/queue'; import { UtilsModule } from '../utils/utils.module'; import { NotificationsGateway } from './notifications.gateway'; import { WsAdminAuthGuard } from './guards/ws-admin-auth.guard'; @Module({ imports: [ AuthModule, UtilsModule, JwtModule, MikroOrmModule.forFeature([Notification, NotificationPreference, User, Restaurant]), BullModule.registerQueue({ name: NotificationQueueNameEnum.SMS }, { name: NotificationQueueNameEnum.PUSH }), BullModule.forRootAsync({ inject: [ConfigService], useFactory: (config: ConfigService) => ({ connection: { host: config.get('REDIS_HOST') || 'captain.dev.danakcorp.com', port: config.get('REDIS_PORT') || 50601, password: config.get('REDIS_PASSWORD'), // Pull from .env }, }), }), ], controllers: [NotificationsController], providers: [ NotificationService, NotificationPreferenceService, NotificationQueueService, PushNotificationService, PushProcessor, SmsProcessor, NotificationsGateway, WsAdminAuthGuard, ], exports: [NotificationService, NotificationPreferenceService, NotificationQueueService, PushNotificationService], }) export class NotificationsModule {}