update and delete via message broker

This commit is contained in:
Gsk54
2022-12-22 14:31:46 +01:00
parent 8651345d6e
commit 2b7c2a26e4
6 changed files with 403 additions and 2 deletions

View File

@@ -0,0 +1,52 @@
import { RabbitSubscribe } from '@golevelup/nestjs-rabbitmq';
import { Controller } from '@nestjs/common';
import { CommandBus } from '@nestjs/cqrs';
import { UpdateUsernameCommand } from '../../commands/update-username.command';
import { Type } from '../../domain/dtos/type.enum';
import { UpdateUsernameRequest } from '../../domain/dtos/update-username.request';
import { DeleteAuthRequest } from '../../domain/dtos/delete-auth.request';
import { DeleteAuthCommand } from '../../commands/delete-auth.command';
@Controller()
export class AuthMessagerController {
constructor(private readonly _commandBus: CommandBus) {}
@RabbitSubscribe({
exchange: 'user',
routingKey: 'user.update',
})
public async userUpdatedHandler(message: string) {
const updatedUser = JSON.parse(message);
if (!updatedUser.hasOwnProperty('uuid')) throw new Error();
if (updatedUser.hasOwnProperty('email')) {
const updateUsernameRequest = new UpdateUsernameRequest();
updateUsernameRequest.uuid = updatedUser.uuid;
updateUsernameRequest.username = updatedUser.email;
updateUsernameRequest.type = Type.EMAIL;
this._commandBus.execute(
new UpdateUsernameCommand(updateUsernameRequest),
);
}
if (updatedUser.hasOwnProperty('phone')) {
const updateUsernameRequest = new UpdateUsernameRequest();
updateUsernameRequest.uuid = updatedUser.uuid;
updateUsernameRequest.username = updatedUser.phone;
updateUsernameRequest.type = Type.PHONE;
this._commandBus.execute(
new UpdateUsernameCommand(updateUsernameRequest),
);
}
}
@RabbitSubscribe({
exchange: 'user',
routingKey: 'user.delete',
})
public async userDeletedHandler(message: string) {
const deletedUser = JSON.parse(message);
if (!deletedUser.hasOwnProperty('uuid')) throw new Error();
const deleteAuthRequest = new DeleteAuthRequest();
deleteAuthRequest.uuid = deletedUser.uuid;
this._commandBus.execute(new DeleteAuthCommand(deleteAuthRequest));
}
}

View File

@@ -12,10 +12,30 @@ import { AddUsernameUseCase } from './domain/usecases/add-username.usecase';
import { UpdatePasswordUseCase } from './domain/usecases/update-password.usecase';
import { DeleteUsernameUseCase } from './domain/usecases/delete-username.usecase';
import { DeleteAuthUseCase } from './domain/usecases/delete-auth.usecase';
import { RabbitMQModule } from '@golevelup/nestjs-rabbitmq';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { AuthMessagerController } from './adapters/primaries/auth-messager.controller';
@Module({
imports: [DatabaseModule, CqrsModule],
controllers: [AuthController],
imports: [
DatabaseModule,
CqrsModule,
RabbitMQModule.forRootAsync(RabbitMQModule, {
imports: [ConfigModule],
useFactory: async (configService: ConfigService) => ({
exchanges: [
{
name: configService.get<string>('RMQ_EXCHANGE_NAME'),
type: configService.get<string>('RMQ_EXCHANGE_TYPE'),
},
],
uri: configService.get<string>('RMQ_URI'),
enableControllerDiscovery: true,
}),
inject: [ConfigService],
}),
],
controllers: [AuthController, AuthMessagerController],
providers: [
AuthProfile,
UsernameProfile,