44 lines
1.5 KiB
TypeScript
44 lines
1.5 KiB
TypeScript
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<IdResponse> {
|
|
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,
|
|
});
|
|
}
|
|
}
|
|
}
|