import { RabbitMQModule } from '@golevelup/nestjs-rabbitmq'; import { RedisModule, RedisModuleOptions } from '@liaoliaots/nestjs-redis'; import { Module } from '@nestjs/common'; import { ConfigModule, ConfigService } from '@nestjs/config'; import { CqrsModule } from '@nestjs/cqrs'; import { ConfigurationMessagerController } from './adapters/primaries/configuration-messager.controller'; import { RedisConfigurationRepository } from './adapters/secondaries/redis-configuration.repository'; import { DeleteConfigurationUseCase } from './domain/usecases/delete-configuration.usecase'; import { GetConfigurationUseCase } from './domain/usecases/get-configuration.usecase'; import { SetConfigurationUseCase } from './domain/usecases/set-configuration.usecase'; @Module({ imports: [ CqrsModule, RedisModule.forRootAsync({ imports: [ConfigModule], inject: [ConfigService], useFactory: async ( configService: ConfigService, ): Promise => { return { config: { host: configService.get('REDIS_HOST'), port: configService.get('REDIS_PORT'), }, }; }, }), RabbitMQModule.forRootAsync(RabbitMQModule, { imports: [ConfigModule], useFactory: async (configService: ConfigService) => ({ exchanges: [ { name: 'configuration', type: 'topic', }, ], uri: configService.get('RMQ_URI'), connectionInitOptions: { wait: false }, enableControllerDiscovery: true, }), inject: [ConfigService], }), ], controllers: [ConfigurationMessagerController], providers: [ GetConfigurationUseCase, SetConfigurationUseCase, DeleteConfigurationUseCase, RedisConfigurationRepository, ], }) export class ConfigurationModule {}