import { registerDecorator, ValidationArguments, ValidationOptions, ValidatorConstraint, ValidatorConstraintInterface } from 'class-validator'; export function IsInRangeCustom(min: number, max: number, validationOptions?: ValidationOptions) { return (object: any, propertyName: string) => { registerDecorator({ target: object.constructor, propertyName, options: validationOptions, constraints: [min, max], validator: IsInRangeCustomConstraint, }); }; } @ValidatorConstraint({ name: 'IsInRangeCustom' }) export class IsInRangeCustomConstraint implements ValidatorConstraintInterface { validate(value: any, validationArguments: ValidationArguments) { try { value = parseInt(value) if (typeof value === "number" && value >= validationArguments.constraints[0] && value <= validationArguments.constraints[1]) { return true } else { return false } } catch (error) { return false } } defaultMessage(validationArguments?: ValidationArguments): string { return 'validation.INVALID_RANGE_OF_NUMBER' } }