import { AggregateID, IdResponse, RpcExceptionCode, RpcValidationPipe, } from '@mobicoop/ddd-library'; import { Controller, UsePipes } from '@nestjs/common'; import { CommandBus } from '@nestjs/cqrs'; import { GrpcMethod, RpcException } from '@nestjs/microservices'; import { CreateAuthenticationRequestDto } from './dtos/create-authentication.request.dto'; import { CreateAuthenticationCommand } from '@modules/newauthentication/core/application/commands/create-authentication/create-authentication.command'; import { AuthenticationAlreadyExistsException } from '@modules/newauthentication/core/domain/authentication.errors'; @UsePipes( new RpcValidationPipe({ whitelist: true, forbidUnknownValues: false, }), ) @Controller() export class CreateAuthenticationGrpcController { constructor(private readonly commandBus: CommandBus) {} @GrpcMethod('AuthenticationService', 'Create') async validate(data: CreateAuthenticationRequestDto): Promise { try { const aggregateID: AggregateID = await this.commandBus.execute( new CreateAuthenticationCommand(data), ); return new IdResponse(aggregateID); } catch (error: any) { if (error instanceof AuthenticationAlreadyExistsException) throw new RpcException({ code: RpcExceptionCode.ALREADY_EXISTS, message: error.message, }); throw new RpcException({ code: RpcExceptionCode.UNKNOWN, message: error.message, }); } } }