import { RabbitSubscribe } from '@golevelup/nestjs-rabbitmq'; import { Controller } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; import { CommandBus } from '@nestjs/cqrs'; import { DeleteConfigurationCommand } from '../../commands/delete-configuration.command'; import { SetConfigurationCommand } from '../../commands/set-configuration.command'; import { DeleteConfigurationRequest } from '../../domain/dtos/delete-configuration.request'; import { SetConfigurationRequest } from '../../domain/dtos/set-configuration.request'; import { Configuration } from '../../domain/entities/configuration'; @Controller() export class ConfigurationMessagerController { constructor( private readonly _commandBus: CommandBus, private readonly _configService: ConfigService, ) {} @RabbitSubscribe({ name: 'setConfiguration', }) public async setConfigurationHandler(message: string) { const configuration: Configuration = JSON.parse(message); if ( configuration.domain == this._configService.get('SERVICE_CONFIGURATION_DOMAIN') ) { const setConfigurationRequest: SetConfigurationRequest = new SetConfigurationRequest(); setConfigurationRequest.domain = configuration.domain; setConfigurationRequest.key = configuration.key; setConfigurationRequest.value = configuration.value; await this._commandBus.execute( new SetConfigurationCommand(setConfigurationRequest), ); } } @RabbitSubscribe({ name: 'deleteConfiguration', }) public async configurationDeletedHandler(message: string) { const deletedConfiguration: Configuration = JSON.parse(message); if ( deletedConfiguration.domain == this._configService.get('SERVICE_CONFIGURATION_DOMAIN') ) { const deleteConfigurationRequest = new DeleteConfigurationRequest(); deleteConfigurationRequest.domain = deletedConfiguration.domain; deleteConfigurationRequest.key = deletedConfiguration.key; await this._commandBus.execute( new DeleteConfigurationCommand(deleteConfigurationRequest), ); } } @RabbitSubscribe({ name: 'propagateConfiguration', }) public async propagateConfigurationsHandler(message: string) { const configurations: Array = JSON.parse(message); configurations.forEach(async (configuration) => { if ( configuration.domain == this._configService.get('SERVICE_CONFIGURATION_DOMAIN') ) { const setConfigurationRequest: SetConfigurationRequest = new SetConfigurationRequest(); setConfigurationRequest.domain = configuration.domain; setConfigurationRequest.key = configuration.key; setConfigurationRequest.value = configuration.value; await this._commandBus.execute( new SetConfigurationCommand(setConfigurationRequest), ); } }); } }