Я хочу применить проверку на стороне сервера к моему CRUD API. Рассматриваемая сущность называется Employee
. Я использую employee.dto
(показано ниже) для создания и обновления конечных точек.
Пакет class-validator отлично работает с методом create
, но игнорирует все правила в DTO, когда я использую его с Partial<EmployeeDTO>
в методе обновления.
Используйте приведенный ниже код для справки.
Пакеты
"class-transformer": "^0.2.3",
"class-validator": "^0.10.0",
Сотрудник DTO
import { IsString, IsNotEmpty, IsEmail, IsEnum } from 'class-validator';
import { EmployeeRoles } from '../../entities/employee.entity';
export class EmployeeDTO {
@IsString()
@IsEmail()
@IsNotEmpty()
email: string;
@IsString()
@IsNotEmpty()
password: string;
@IsString()
@IsNotEmpty()
username: string;
@IsString()
@IsNotEmpty()
fullName: string;
@IsString()
@IsNotEmpty()
@IsEnum(EmployeeRoles)
role: string;
}
Сотрудник Контроллер
import {
Controller,
Param,
Post,
Body,
Put,
UsePipes,
} from '@nestjs/common';
import { EmployeeDTO } from './dto/employee.dto';
import { EmployeeService } from './employee.service';
import { ValidationPipe } from '../shared/pipes/validation.pipe';
@Controller('employee')
export class EmployeeController {
constructor(private employeeService: EmployeeService) {}
@Post()
@UsePipes(ValidationPipe)
addNewEmployee(@Body() data: EmployeeDTO) {
return this.employeeService.create(data);
}
@Put(':id')
@UsePipes(ValidationPipe)
updateEmployee(@Param('id') id: number, @Body() data: Partial<EmployeeDTO>) {
return this.employeeService.update(id, data);
}
}
Возможное решение
Я работаю над созданием отдельных DTO для методов create
и update
, но мне не нравится идея повторения кода.