Я хотел бы иметь следующий dto:
export class SetEntryPasswordDto {
@ApiProperty()
@Validate(EntryBelongsToUser)
@Validate(EntryIsNotLocked)
@Type(() => Number)
@IsNumber()
id: number;
@ApiProperty()
@IsString()
@IsNotEmpty()
@Validate(PasswordMatchValidator)
@Matches(EValidator.PASSWORD, { message: 'password is not strong enough' })
password: string;
@ApiProperty()
@IsNotEmpty()
@IsString()
confirmPassword: string;
@ApiProperty()
@IsOptional()
@IsString()
passwordHint?: string;
@IsNumber()
userId: number;
}
Проблема в том, что мне нужно сделать пару проверок asyn c, и я хотел бы использовать класс-валидатор lib для этого.
Мой вопрос: если я сделаю это, как в приведенном выше фрагменте кода, могу ли я быть уверен, что первым завершится EntryIsNotLocked
? Если нет, то как заставить эти проверки выполняться по порядку?
Спасибо.
Дополнительная информация:
Похоже, есть важная информация.
EntryBelongsToUser
и EntryIsNotLocked
- это классы ValidatorConstraint. Например, один из них выглядит так:
@ValidatorConstraint({ name: 'EntryIsNotLocked', async: false })
@Injectable()
export class EntryIsNotLocked implements ValidatorConstraintInterface {
constructor(
private readonly entryService: EntryService,
) {}
public async validate(val: any, args: ValidationArguments): Promise<boolean> {
// here goes some validation logic
}
public defaultMessage(args: ValidationArguments): string {
return `Unauthorized to execute this action`;
}
}
Второй выглядит точно так же. Итак, вопрос в том, могу ли я гарантировать порядок, установив для параметра async
декоратора ValidatorConstraint
значение false
для них обоих?