import { Module } from '@nestjs/common'; import { HttpModule } from '@nestjs/axios'; import { ConfigModule, ConfigService } from '@nestjs/config'; import { ClientsModule, Transport } from '@nestjs/microservices'; import { NotificationsController } from './notifications.controller'; import { NotificationsService } from './notifications.service'; import { EmailAdapter, SmsAdapter, PushAdapter } from './notification.adapters'; import { EmailClientService } from './email-client.service'; import { SmsClientService } from './sms-client.service'; @Module({ imports: [ HttpModule.register({ timeout: 10_000 }), ClientsModule.registerAsync([ { name: 'EMAIL_SERVICE', imports: [ConfigModule], inject: [ConfigService], useFactory: (config: ConfigService) => ({ transport: Transport.RMQ, options: { urls: [config.get('RABBITMQ_URL') ?? 'amqp://localhost:5672'], queue: config.get('EMAIL_QUEUE') ?? 'email_queue', queueOptions: { durable: true }, noAck: true, }, }), }, { name: 'SMS_SERVICE', imports: [ConfigModule], inject: [ConfigService], useFactory: (config: ConfigService) => ({ transport: Transport.RMQ, options: { urls: [config.get('RABBITMQ_URL') ?? 'amqp://localhost:5672'], queue: config.get('SMS_QUEUE') ?? 'sms_queue', queueOptions: { durable: true }, noAck: true, }, }), }, ]), ], controllers: [NotificationsController], providers: [ NotificationsService, EmailAdapter, SmsAdapter, PushAdapter, EmailClientService, SmsClientService, ], exports: [NotificationsService, EmailClientService, SmsClientService], }) export class NotificationsModule {}