import { Module } from '@nestjs/common'; import { ConfigModule, ConfigService } from '@nestjs/config'; import { UserModule } from './modules/user/user.module'; import { ConfigurationModule, ConfigurationModuleOptions, } from '@mobicoop/configuration-module'; import { HealthModule, HealthModuleOptions, HealthRepositoryPort, } from '@mobicoop/health-module'; import { MessagerModule } from './modules/messager/messager.module'; import { USER_REPOSITORY } from './modules/user/user.di-tokens'; import { MESSAGE_PUBLISHER } from './modules/messager/messager.di-tokens'; import { MessagePublisherPort } from '@mobicoop/ddd-library'; import { EventEmitterModule } from '@nestjs/event-emitter'; @Module({ imports: [ ConfigModule.forRoot({ isGlobal: true }), EventEmitterModule.forRoot(), ConfigurationModule.forRootAsync({ imports: [ConfigModule], inject: [ConfigService], useFactory: async ( configService: ConfigService, ): Promise => ({ domain: configService.get('SERVICE_CONFIGURATION_DOMAIN'), messageBroker: { uri: configService.get('MESSAGE_BROKER_URI'), exchange: configService.get('MESSAGE_BROKER_EXCHANGE'), }, redis: { host: configService.get('REDIS_HOST'), password: configService.get('REDIS_PASSWORD'), port: configService.get('REDIS_PORT'), }, setConfigurationBrokerQueue: 'user-configuration-create-update', deleteConfigurationQueue: 'user-configuration-delete', propagateConfigurationQueue: 'user-configuration-propagate', }), }), HealthModule.forRootAsync({ imports: [UserModule, MessagerModule], inject: [USER_REPOSITORY, MESSAGE_PUBLISHER], useFactory: async ( userRepository: HealthRepositoryPort, messagePublisher: MessagePublisherPort, ): Promise => ({ serviceName: 'user', criticalLoggingKey: 'logging.user.health.crit', checkRepositories: [ { name: 'UserRepository', repository: userRepository, }, ], messagePublisher, }), }), UserModule, MessagerModule, ], exports: [UserModule, MessagerModule], }) export class AppModule {}