refactoring seperate decorators from validating functions
This commit is contained in:
parent
1b5ed98ee5
commit
8dcf456f7e
|
@ -104,6 +104,7 @@
|
||||||
"**/*.(t|j)s"
|
"**/*.(t|j)s"
|
||||||
],
|
],
|
||||||
"coveragePathIgnorePatterns": [
|
"coveragePathIgnorePatterns": [
|
||||||
|
".validator.ts",
|
||||||
".controller.ts",
|
".controller.ts",
|
||||||
".module.ts",
|
".module.ts",
|
||||||
".request.ts",
|
".request.ts",
|
||||||
|
|
|
@ -15,10 +15,10 @@ import { mappingKeyToFrequency } from './validators/frequency.mapping';
|
||||||
import { MarginDTO } from './create.margin.dto';
|
import { MarginDTO } from './create.margin.dto';
|
||||||
import { ScheduleDTO } from './create.schedule.dto';
|
import { ScheduleDTO } from './create.schedule.dto';
|
||||||
import { AddressRequestDTO } from './create.address.request';
|
import { AddressRequestDTO } from './create.address.request';
|
||||||
import { HasProperPassengerSeats } from './validators/has-passenger-seats.validator';
|
import { IsPunctualOrRecurrent } from './validators/decorators/is-punctual-or-recurrent.validator';
|
||||||
import { HasProperDriverSeats } from './validators/has-driver-seats.validator';
|
import { HasProperDriverSeats } from './validators/decorators/has-driver-seats.validator';
|
||||||
import { HasProperPositionIndexes } from './validators/address-position.validator';
|
import { HasProperPassengerSeats } from './validators/decorators/has-passenger-seats.validator';
|
||||||
import { IsPunctualOrRecurrent } from './validators/is-punctual-or-recurrent.validator';
|
import { HasProperPositionIndexes } from './validators/decorators/address-position.validator';
|
||||||
|
|
||||||
export class CreateAdRequest {
|
export class CreateAdRequest {
|
||||||
@IsOptional()
|
@IsOptional()
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
import { AddressRequestDTO } from '../create.address.request';
|
||||||
|
|
||||||
|
export function hasProperPositionIndexes(value: AddressRequestDTO[]) {
|
||||||
|
if (value.every((address) => address.position === undefined)) return true;
|
||||||
|
else if (value.every((address) => typeof address.position === 'number')) {
|
||||||
|
value.sort((a, b) => a.position - b.position);
|
||||||
|
for (let i = 1; i < value.length; i++) {
|
||||||
|
if (value[i - 1].position >= value[i].position) return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
|
@ -1,19 +1,7 @@
|
||||||
import { ValidateBy, ValidationOptions, buildMessage } from 'class-validator';
|
import { ValidateBy, ValidationOptions, buildMessage } from 'class-validator';
|
||||||
import { AddressRequestDTO } from '../create.address.request';
|
import { AddressRequestDTO } from '../../create.address.request';
|
||||||
|
import { hasProperPositionIndexes } from '../address-position';
|
||||||
|
|
||||||
export function hasProperPositionIndexes(value: AddressRequestDTO[]) {
|
|
||||||
if (value.every((address) => address.position === undefined)) return true;
|
|
||||||
else if (value.every((address) => typeof address.position === 'number')) {
|
|
||||||
value.sort((a, b) => a.position - b.position);
|
|
||||||
for (let i = 1; i < value.length; i++) {
|
|
||||||
if (value[i - 1].position >= value[i].position) return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* istanbul ignore next */
|
|
||||||
export function HasProperPositionIndexes(
|
export function HasProperPositionIndexes(
|
||||||
validationOptions?: ValidationOptions,
|
validationOptions?: ValidationOptions,
|
||||||
): PropertyDecorator {
|
): PropertyDecorator {
|
|
@ -4,24 +4,7 @@ import {
|
||||||
ValidationOptions,
|
ValidationOptions,
|
||||||
buildMessage,
|
buildMessage,
|
||||||
} from 'class-validator';
|
} from 'class-validator';
|
||||||
|
import { hasProperDriverSeats } from '../has-driver-seats';
|
||||||
export function hasProperDriverSeats(args: ValidationArguments) {
|
|
||||||
if (
|
|
||||||
args.object['driver'] === true &&
|
|
||||||
typeof args.object['seatsDriver'] === 'number'
|
|
||||||
)
|
|
||||||
return args.object['seatsDriver'] > 0;
|
|
||||||
if (
|
|
||||||
(args.object['driver'] === false ||
|
|
||||||
args.object['driver'] === null ||
|
|
||||||
args.object['driver'] === undefined) &&
|
|
||||||
(args.object['seatsDriver'] === 0 ||
|
|
||||||
args.object['seatsDriver'] === null ||
|
|
||||||
args.object['seatsDriver'] === undefined)
|
|
||||||
)
|
|
||||||
return true;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function HasProperDriverSeats(
|
export function HasProperDriverSeats(
|
||||||
validationOptions?: ValidationOptions,
|
validationOptions?: ValidationOptions,
|
|
@ -4,24 +4,7 @@ import {
|
||||||
ValidationOptions,
|
ValidationOptions,
|
||||||
buildMessage,
|
buildMessage,
|
||||||
} from 'class-validator';
|
} from 'class-validator';
|
||||||
|
import { hasProperPassengerSeats } from '../has-passenger-seats';
|
||||||
export function hasProperPassengerSeats(args: ValidationArguments) {
|
|
||||||
if (
|
|
||||||
args.object['passenger'] === true &&
|
|
||||||
typeof args.object['seatsPassenger'] === 'number'
|
|
||||||
)
|
|
||||||
return args.object['seatsPassenger'] > 0;
|
|
||||||
else if (
|
|
||||||
(args.object['passenger'] === false ||
|
|
||||||
args.object['passenger'] === null ||
|
|
||||||
args.object['passenger'] === undefined) &&
|
|
||||||
(args.object['seatsPassenger'] === 0 ||
|
|
||||||
args.object['seatsPassenger'] === null ||
|
|
||||||
args.object['seatsPassenger'] === undefined)
|
|
||||||
)
|
|
||||||
return true;
|
|
||||||
else return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function HasProperPassengerSeats(
|
export function HasProperPassengerSeats(
|
||||||
validationOptions?: ValidationOptions,
|
validationOptions?: ValidationOptions,
|
|
@ -0,0 +1,28 @@
|
||||||
|
import {
|
||||||
|
ValidateBy,
|
||||||
|
ValidationArguments,
|
||||||
|
ValidationOptions,
|
||||||
|
buildMessage,
|
||||||
|
} from 'class-validator';
|
||||||
|
import { isPunctualOrRecurrent } from '../is-punctual-or-recurrent';
|
||||||
|
|
||||||
|
export function IsPunctualOrRecurrent(
|
||||||
|
validationOptions?: ValidationOptions,
|
||||||
|
): PropertyDecorator {
|
||||||
|
return ValidateBy(
|
||||||
|
{
|
||||||
|
name: '',
|
||||||
|
constraints: [],
|
||||||
|
validator: {
|
||||||
|
validate: (value, args: ValidationArguments): boolean =>
|
||||||
|
isPunctualOrRecurrent(args),
|
||||||
|
defaultMessage: buildMessage(
|
||||||
|
() =>
|
||||||
|
`the departure, from date, to date and schedule must be properly set on reccurent or punctual ad `,
|
||||||
|
validationOptions,
|
||||||
|
),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
validationOptions,
|
||||||
|
);
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
import { ValidationArguments } from 'class-validator';
|
||||||
|
|
||||||
|
export function hasProperDriverSeats(args: ValidationArguments) {
|
||||||
|
if (
|
||||||
|
args.object['driver'] === true &&
|
||||||
|
typeof args.object['seatsDriver'] === 'number'
|
||||||
|
)
|
||||||
|
return args.object['seatsDriver'] > 0;
|
||||||
|
if (
|
||||||
|
(args.object['driver'] === false ||
|
||||||
|
args.object['driver'] === null ||
|
||||||
|
args.object['driver'] === undefined) &&
|
||||||
|
(args.object['seatsDriver'] === 0 ||
|
||||||
|
args.object['seatsDriver'] === null ||
|
||||||
|
args.object['seatsDriver'] === undefined)
|
||||||
|
)
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
import { ValidationArguments } from 'class-validator';
|
||||||
|
|
||||||
|
export function hasProperPassengerSeats(args: ValidationArguments) {
|
||||||
|
if (
|
||||||
|
args.object['passenger'] === true &&
|
||||||
|
typeof args.object['seatsPassenger'] === 'number'
|
||||||
|
)
|
||||||
|
return args.object['seatsPassenger'] > 0;
|
||||||
|
else if (
|
||||||
|
(args.object['passenger'] === false ||
|
||||||
|
args.object['passenger'] === null ||
|
||||||
|
args.object['passenger'] === undefined) &&
|
||||||
|
(args.object['seatsPassenger'] === 0 ||
|
||||||
|
args.object['seatsPassenger'] === null ||
|
||||||
|
args.object['seatsPassenger'] === undefined)
|
||||||
|
)
|
||||||
|
return true;
|
||||||
|
else return false;
|
||||||
|
}
|
|
@ -1,9 +1,4 @@
|
||||||
import {
|
import { ValidationArguments } from 'class-validator';
|
||||||
ValidateBy,
|
|
||||||
ValidationArguments,
|
|
||||||
ValidationOptions,
|
|
||||||
buildMessage,
|
|
||||||
} from 'class-validator';
|
|
||||||
import { Frequency } from '../../types/frequency.enum';
|
import { Frequency } from '../../types/frequency.enum';
|
||||||
|
|
||||||
function isPunctual(args: ValidationArguments): boolean {
|
function isPunctual(args: ValidationArguments): boolean {
|
||||||
|
@ -30,24 +25,3 @@ function isRecurrent(args: ValidationArguments): boolean {
|
||||||
export const isPunctualOrRecurrent = (args: ValidationArguments): boolean => {
|
export const isPunctualOrRecurrent = (args: ValidationArguments): boolean => {
|
||||||
return isPunctual(args) || isRecurrent(args);
|
return isPunctual(args) || isRecurrent(args);
|
||||||
};
|
};
|
||||||
|
|
||||||
export function IsPunctualOrRecurrent(
|
|
||||||
validationOptions?: ValidationOptions,
|
|
||||||
): PropertyDecorator {
|
|
||||||
return ValidateBy(
|
|
||||||
{
|
|
||||||
name: '',
|
|
||||||
constraints: [],
|
|
||||||
validator: {
|
|
||||||
validate: (value, args: ValidationArguments): boolean =>
|
|
||||||
isPunctualOrRecurrent(args),
|
|
||||||
defaultMessage: buildMessage(
|
|
||||||
() =>
|
|
||||||
`the departure, from date, to date and schedule must be properly set on reccurent or punctual ad `,
|
|
||||||
validationOptions,
|
|
||||||
),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
validationOptions,
|
|
||||||
);
|
|
||||||
}
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { hasProperDriverSeats } from '../../../domain/dtos/validators/has-driver-seats.validator';
|
import { hasProperDriverSeats } from '../../../domain/dtos/validators/has-driver-seats';
|
||||||
|
|
||||||
describe('driver and/or driver seats validator', () => {
|
describe('driver and/or driver seats validator', () => {
|
||||||
it('should validate if driver and drivers seats is not provided ', () => {
|
it('should validate if driver and drivers seats is not provided ', () => {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { hasProperPassengerSeats } from '../../../domain/dtos/validators/has-passenger-seats.validator';
|
import { hasProperPassengerSeats } from '../../../domain/dtos/validators/has-passenger-seats';
|
||||||
|
|
||||||
describe('driver and/or passenger seats validator', () => {
|
describe('driver and/or passenger seats validator', () => {
|
||||||
it('should validate if passenger and passengers seats is not provided ', () => {
|
it('should validate if passenger and passengers seats is not provided ', () => {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { AddressRequestDTO } from '../../../domain/dtos/create.address.request';
|
import { AddressRequestDTO } from '../../../domain/dtos/create.address.request';
|
||||||
import { hasProperPositionIndexes } from '../../../domain/dtos/validators/address-position.validator';
|
import { hasProperPositionIndexes } from '../../../domain/dtos/validators/address-position';
|
||||||
describe('addresses position validators', () => {
|
describe('addresses position validators', () => {
|
||||||
const mockAddress1: AddressRequestDTO = {
|
const mockAddress1: AddressRequestDTO = {
|
||||||
lon: 48.68944505415954,
|
lon: 48.68944505415954,
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { isPunctualOrRecurrent } from '../../../domain/dtos/validators/is-punctual-or-recurrent.validator';
|
import { isPunctualOrRecurrent } from '../../../domain/dtos/validators/is-punctual-or-recurrent';
|
||||||
import { Frequency } from '../../../domain/types/frequency.enum';
|
import { Frequency } from '../../../domain/types/frequency.enum';
|
||||||
|
|
||||||
describe('punctual or reccurent validators', () => {
|
describe('punctual or reccurent validators', () => {
|
||||||
|
|
Loading…
Reference in New Issue