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 { UsersController } from './adapters/primaries/users.controller'; import { LoggingMessager } from './adapters/secondaries/logging.messager'; import { UserMessager } from './adapters/secondaries/user.messager'; import { UsersRepository } from './adapters/secondaries/users.repository'; import { CreateUserUseCase } from './domain/usecases/create-user.usecase'; import { DeleteUserUseCase } from './domain/usecases/delete-user.usecase'; import { FindAllUsersUseCase } from './domain/usecases/find-all-users.usecase'; import { FindUserByUuidUseCase } from './domain/usecases/find-user-by-uuid.usecase'; import { UpdateUserUseCase } from './domain/usecases/update-user.usecase'; import { UserProfile } from './mappers/user.profile'; @Module({ imports: [ DatabaseModule, CqrsModule, RabbitMQModule.forRootAsync(RabbitMQModule, { imports: [ConfigModule], useFactory: async (configService: ConfigService) => ({ exchanges: [ { name: 'user', 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: [UsersController], providers: [ UserProfile, UsersRepository, UserMessager, LoggingMessager, FindAllUsersUseCase, FindUserByUuidUseCase, CreateUserUseCase, UpdateUserUseCase, DeleteUserUseCase, ], exports: [], }) export class UsersModule {}