add custom validation pipe

This commit is contained in:
Gsk54 2022-12-23 11:00:34 +01:00
parent 4667e57f0c
commit 4e2ee28219
4 changed files with 47 additions and 5 deletions

View File

@ -0,0 +1,14 @@
import { Injectable, ValidationPipe } from '@nestjs/common';
import { RpcException } from '@nestjs/microservices';
@Injectable()
export class RpcValidationPipe extends ValidationPipe {
createExceptionFactory() {
return (validationErrors = []) => {
return new RpcException({
code: 3,
message: this.flattenValidationErrors(validationErrors),
});
};
}
}

View File

@ -1,6 +1,11 @@
import { Mapper } from '@automapper/core';
import { InjectMapper } from '@automapper/nestjs';
import { Controller } from '@nestjs/common';
import {
Controller,
UsePipes,
ValidationError,
ValidationPipe,
} from '@nestjs/common';
import { CommandBus, QueryBus } from '@nestjs/cqrs';
import { GrpcMethod, RpcException } from '@nestjs/microservices';
import { DatabaseException } from 'src/modules/database/src/exceptions/DatabaseException';
@ -16,6 +21,7 @@ import { FindAllUsersQuery } from '../../queries/find-all-users.query';
import { FindUserByUuidQuery } from '../../queries/find-user-by-uuid.query';
import { UserPresenter } from './user.presenter';
import { ICollection } from '../../../database/src/interfaces/collection.interface';
import { RpcValidationPipe } from './rpc.validation-pipe';
@Controller()
export class UsersController {
@ -70,6 +76,12 @@ export class UsersController {
}
}
@UsePipes(
new RpcValidationPipe({
whitelist: true,
forbidUnknownValues: false,
}),
)
@GrpcMethod('UsersService', 'Update')
async updateUser(data: UpdateUserRequest): Promise<UserPresenter> {
try {

View File

@ -1,24 +1,29 @@
import { AutoMap } from '@automapper/classes';
import { IsString } from 'class-validator';
import { IsOptional, IsString } from 'class-validator';
export class CreateUserRequest {
@IsString()
@IsOptional()
@AutoMap()
uuid?: string;
@IsString()
@IsOptional()
@AutoMap()
firstName?: string;
@IsString()
@IsOptional()
@AutoMap()
lastName?: string;
@IsString()
@IsOptional()
@AutoMap()
email?: string;
@IsString()
@IsOptional()
@AutoMap()
phone?: string;
}

View File

@ -1,24 +1,35 @@
import { AutoMap } from '@automapper/classes';
import { IsString } from 'class-validator';
import {
IsEmail,
IsNotEmpty,
IsOptional,
IsPhoneNumber,
IsString,
} from 'class-validator';
export class UpdateUserRequest {
@IsString()
@IsNotEmpty()
@AutoMap()
uuid: string;
@IsString()
@IsOptional()
@AutoMap()
firstName?: string;
@IsString()
@IsOptional()
@AutoMap()
lastName?: string;
@IsString()
@IsEmail()
@IsOptional()
@AutoMap()
email?: string;
@IsString()
@IsPhoneNumber()
@IsOptional()
@AutoMap()
phone?: string;
}