Трубы работают только на контроллерах, вы не можете использовать их со службами. Но вы можете просто использовать метод validate
класса-валидатора (вместе с методом plainToClass
класса-преобразователя) в любом месте кода:
const user = plainToClass(UserCreateDto, userRequestEntity);
const errors = await validate(user)
if (errors.length > 0) {
throw this.createError(errors);
}
Кроме того, вам не нужно создавать несколько классов DTO для разных ролей. Просто используйте class-validator
группы :
Назначьте каждое свойство в DTO одной или нескольким группам (= ролям):
@Min(12, {groups: ['admin', 'staff']})
age: number;
@Length(2, 20, {groups: ['admin']})
name: string;
Затем передайте свою группу (роли) plainToClass
и validate
.
// Pass your roles as groups
const groups = ['admin'];
// Transform to class with groups
const entityClass = plainToClass(EntityDto, entity, { groups })
// Validate with groups
const errors = await validate(entityClass, { groups });