import { RabbitMQModule } from '@golevelup/nestjs-rabbitmq'; import { RedisClientOptions } from '@liaoliaots/nestjs-redis'; import { CacheModule, Module } from '@nestjs/common'; import { ConfigModule, ConfigService } from '@nestjs/config'; import { CqrsModule } from '@nestjs/cqrs'; import { redisStore } from 'cache-manager-ioredis-yet'; import { DatabaseModule } from '../database/database.module'; import { TerritoriesController } from './adapters/primaries/territories.controller'; import { LoggingMessager } from './adapters/secondaries/logging.messager'; import { TerritoriesRepository } from './adapters/secondaries/territories.repository'; import { TerritoryMessager } from './adapters/secondaries/territory.messager'; import { CreateTerritoryUseCase } from './domain/usecases/create-territory.usecase'; import { DeleteTerritoryUseCase } from './domain/usecases/delete-territory.usecase'; import { FindAllTerritoriesForPointUseCase } from './domain/usecases/find-all-territories-for-point.usecase'; import { FindAllTerritoriesUseCase } from './domain/usecases/find-all-territories.usecase'; import { FindTerritoryByUuidUseCase } from './domain/usecases/find-territory-by-uuid.usecase'; import { UpdateTerritoryUseCase } from './domain/usecases/update-territory.usecase'; import { TerritoryProfile } from './mappers/territory.profile'; @Module({ imports: [ DatabaseModule, CqrsModule, RabbitMQModule.forRootAsync(RabbitMQModule, { imports: [ConfigModule], useFactory: async (configService: ConfigService) => ({ exchanges: [ { name: 'territory', type: 'topic', }, { name: 'logging', type: 'topic', }, ], uri: configService.get('RMQ_URI'), connectionInitOptions: { wait: false }, }), inject: [ConfigService], }), CacheModule.registerAsync({ imports: [ConfigModule], useFactory: async (configService: ConfigService) => ({ store: await redisStore({ host: configService.get('REDIS_HOST'), port: configService.get('REDIS_PORT'), ttl: configService.get('CACHE_TTL'), }), }), inject: [ConfigService], }), ], controllers: [TerritoriesController], providers: [ TerritoryProfile, TerritoriesRepository, TerritoryMessager, LoggingMessager, FindAllTerritoriesForPointUseCase, FindAllTerritoriesUseCase, FindTerritoryByUuidUseCase, CreateTerritoryUseCase, UpdateTerritoryUseCase, DeleteTerritoryUseCase, ], exports: [], }) export class TerritoriesModule {}