Les pipes ne fonctionnent que sur les contrôleurs, vous ne pouvez pas les utiliser avec les services. Mais vous pouvez utiliser la fonction de validation de classe validate
(avec la méthode du transformateur de classe plainToClass
) n'importe où dans votre code :
const user = plainToClass(UserCreateDto, userRequestEntity);
const errors = await validate(user)
if (errors.length > 0) {
throw this.createError(errors);
}
En outre, il n'est pas nécessaire de créer plusieurs classes DTO pour différents rôles. Il suffit d'utiliser class-validator
groupes :
Attribuez chaque propriété de votre DTO à un ou plusieurs groupes (= rôles) :
@Min(12, {groups: ['admin', 'staff']})
age: number;
@Length(2, 20, {groups: ['admin']})
name: string;
Passez ensuite votre groupe (rôles) à plainToClass
y 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 });