import { MailerModule } from '@nestjs-modules/mailer'; import { forwardRef, Module } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; import { TypeOrmModule } from '@nestjs/typeorm'; import { TwilioModule } from 'nestjs-twilio'; import { RedisModule } from '~/common/redis/redis.module'; import { buildMailerOptions, buildTwilioOptions } from '~/core/module-options'; import { UserModule } from '~/user/user.module'; import { NotificationsController } from './controllers'; import { Notification } from './entities'; import { NotificationCreatedListener, TransactionNotificationListener } from './listeners'; import { NotificationsRepository } from './repositories'; import { FirebaseService, NotificationFactory, NotificationsService, TwilioService } from './services'; import { MessagingSystemFactory, RedisPubSubMessagingService } from './services/messaging'; @Module({ imports: [ forwardRef(() => RedisModule.register()), forwardRef(() => UserModule), TypeOrmModule.forFeature([Notification]), TwilioModule.forRootAsync({ useFactory: buildTwilioOptions, inject: [ConfigService], }), MailerModule.forRootAsync({ useFactory: buildMailerOptions, inject: [ConfigService], }), ], providers: [ NotificationsService, NotificationFactory, FirebaseService, NotificationsRepository, TwilioService, NotificationCreatedListener, TransactionNotificationListener, RedisPubSubMessagingService, MessagingSystemFactory, ], exports: [NotificationsService, NotificationFactory, NotificationCreatedListener], controllers: [NotificationsController], }) export class NotificationModule {}