From 3664d6c2f021c058d1fa8744709133c328e07325 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=98=D0=B2=D0=B0=D0=BD=D0=BE=D0=B2=20=D0=A1=D0=B5=D1=80?= =?UTF-8?q?=D0=B3=D0=B5=D0=B9?= Date: Wed, 23 Oct 2024 11:43:38 +0700 Subject: [PATCH] error message swapped --- .../decorators/fields/DecimalField.ts | 47 ++++++++----------- .../decorators/fields/DecimalNumberField.ts | 4 +- 2 files changed, 21 insertions(+), 30 deletions(-) diff --git a/src/infrastructure/decorators/fields/DecimalField.ts b/src/infrastructure/decorators/fields/DecimalField.ts index 342c4db..41a994e 100644 --- a/src/infrastructure/decorators/fields/DecimalField.ts +++ b/src/infrastructure/decorators/fields/DecimalField.ts @@ -1,6 +1,6 @@ import {applyDecorators} from '@nestjs/common'; import {Column} from '@steroidsjs/typeorm'; -import {buildMessage, IsDecimal, ValidateBy, ValidateIf, ValidationOptions} from 'class-validator'; +import {IsDecimal, ValidateBy, ValidateIf, ValidationOptions} from 'class-validator'; import {BaseField, IBaseFieldOptions} from './BaseField'; export interface IDecimalFieldOptions extends IBaseFieldOptions { @@ -15,46 +15,37 @@ export const MIN_STRING_AS_NUMBER = 'minStringAsNumber'; export const MAX_STRING_AS_NUMBER = 'maxStringAsNumber'; -function stringMin(num: unknown, min: number): boolean { - return typeof num === 'string' && typeof min === 'number' && Number(num) >= min; -} - -function StringMin(minValue: number, validationOptions?: ValidationOptions): PropertyDecorator { +function buildValidate( + constraint: number, + validateFunction: (value: any, constraint: number) => boolean, + validationOptions?: ValidationOptions +) { return ValidateBy( { name: MIN_STRING_AS_NUMBER, - constraints: [minValue], + constraints: [constraint], validator: { - validate: (value, args): boolean => stringMin(value, args?.constraints[0]), - defaultMessage: buildMessage( - eachPrefix => eachPrefix + '$property must not be less than $constraint1', - validationOptions - ), + validate: (value, args): boolean => validateFunction(value, args?.constraints[0]), }, }, validationOptions ); } +function stringMin(num: unknown, min: number): boolean { + return typeof num === 'string' && typeof min === 'number' && Number(num) >= min; +} + +function StringMin(minValue: number, validationOptions?: ValidationOptions): PropertyDecorator { + return buildValidate(minValue, stringMin, validationOptions); +} + function stringMax(num: unknown, max: number): boolean { return typeof num === 'string' && typeof max === 'number' && Number(num) <= max; } function StringMax(maxValue: number, validationOptions?: ValidationOptions): PropertyDecorator { - return ValidateBy( - { - name: MAX_STRING_AS_NUMBER, - constraints: [maxValue], - validator: { - validate: (value, args): boolean => stringMax(value, args?.constraints[0]), - defaultMessage: buildMessage( - eachPrefix => eachPrefix + '$property must not be greater than $constraint1', - validationOptions - ), - }, - }, - validationOptions - ); + return buildValidate(maxValue, stringMax, validationOptions); } export function DecimalField(options: IDecimalFieldOptions = {}) { @@ -79,11 +70,11 @@ export function DecimalField(options: IDecimalFieldOptions = {}) { }), typeof options.min === 'number' && StringMin(options.min, { each: options.isArray, - message: `Должно быть не меньше ${options.min}` || options.minDecimalConstraintMessage, + message: options.minDecimalConstraintMessage || `Должно быть не меньше ${options.min}`, }), typeof options.max === 'number' && StringMax(options.max, { each: options.isArray, - message: `Должно быть не больше ${options.max}` || options.maxDecimalConstraintMessage, + message: options.maxDecimalConstraintMessage || `Должно быть не больше ${options.max}`, }), ].filter(Boolean) ); diff --git a/src/infrastructure/decorators/fields/DecimalNumberField.ts b/src/infrastructure/decorators/fields/DecimalNumberField.ts index b407570..20730b0 100644 --- a/src/infrastructure/decorators/fields/DecimalNumberField.ts +++ b/src/infrastructure/decorators/fields/DecimalNumberField.ts @@ -57,11 +57,11 @@ export function DecimalNumberField(options: IDecimalFieldOptions = {}) { }), typeof options.min === 'number' && Min(options.min, { each: options.isArray, - message: `Должно быть не меньше ${options.min}` || options.minDecimalConstraintMessage, + message: options.minDecimalConstraintMessage || `Должно быть не меньше ${options.min}`, }), typeof options.max === 'number' && Max(options.max, { each: options.isArray, - message: `Должно быть не больше ${options.max}` || options.maxDecimalConstraintMessage, + message: options.maxDecimalConstraintMessage || `Должно быть не больше ${options.max}`, }), ].filter(Boolean)); }