territory/src/modules/territories/territories.module.ts

70 lines
2.6 KiB
TypeScript

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<string>('RMQ_URI'),
connectionInitOptions: { wait: false },
}),
inject: [ConfigService],
}),
CacheModule.registerAsync<RedisClientOptions>({
imports: [ConfigModule],
useFactory: async (configService: ConfigService) => ({
store: await redisStore({
host: configService.get<string>('REDIS_HOST'),
port: configService.get<number>('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 {}