diff --git a/package.json b/package.json index 94dc9e6..94127d3 100644 --- a/package.json +++ b/package.json @@ -104,6 +104,7 @@ "**/*.(t|j)s" ], "coveragePathIgnorePatterns": [ + ".validator.ts", ".controller.ts", ".module.ts", ".request.ts", diff --git a/src/modules/ad/domain/dtos/create-ad.request.ts b/src/modules/ad/domain/dtos/create-ad.request.ts index 5b7e8cf..0075948 100644 --- a/src/modules/ad/domain/dtos/create-ad.request.ts +++ b/src/modules/ad/domain/dtos/create-ad.request.ts @@ -15,10 +15,10 @@ import { mappingKeyToFrequency } from './validators/frequency.mapping'; import { MarginDTO } from './create.margin.dto'; import { ScheduleDTO } from './create.schedule.dto'; import { AddressRequestDTO } from './create.address.request'; -import { HasProperPassengerSeats } from './validators/has-passenger-seats.validator'; -import { HasProperDriverSeats } from './validators/has-driver-seats.validator'; -import { HasProperPositionIndexes } from './validators/address-position.validator'; -import { IsPunctualOrRecurrent } from './validators/is-punctual-or-recurrent.validator'; +import { IsPunctualOrRecurrent } from './validators/decorators/is-punctual-or-recurrent.validator'; +import { HasProperDriverSeats } from './validators/decorators/has-driver-seats.validator'; +import { HasProperPassengerSeats } from './validators/decorators/has-passenger-seats.validator'; +import { HasProperPositionIndexes } from './validators/decorators/address-position.validator'; export class CreateAdRequest { @IsOptional() diff --git a/src/modules/ad/domain/dtos/validators/address-position.ts b/src/modules/ad/domain/dtos/validators/address-position.ts new file mode 100644 index 0000000..bbf8551 --- /dev/null +++ b/src/modules/ad/domain/dtos/validators/address-position.ts @@ -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; +} diff --git a/src/modules/ad/domain/dtos/validators/address-position.validator.ts b/src/modules/ad/domain/dtos/validators/decorators/address-position.validator.ts similarity index 55% rename from src/modules/ad/domain/dtos/validators/address-position.validator.ts rename to src/modules/ad/domain/dtos/validators/decorators/address-position.validator.ts index 5602713..5ac8e5a 100644 --- a/src/modules/ad/domain/dtos/validators/address-position.validator.ts +++ b/src/modules/ad/domain/dtos/validators/decorators/address-position.validator.ts @@ -1,19 +1,7 @@ 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( validationOptions?: ValidationOptions, ): PropertyDecorator { diff --git a/src/modules/ad/domain/dtos/validators/has-driver-seats.validator.ts b/src/modules/ad/domain/dtos/validators/decorators/has-driver-seats.validator.ts similarity index 53% rename from src/modules/ad/domain/dtos/validators/has-driver-seats.validator.ts rename to src/modules/ad/domain/dtos/validators/decorators/has-driver-seats.validator.ts index 8642b87..fc12011 100644 --- a/src/modules/ad/domain/dtos/validators/has-driver-seats.validator.ts +++ b/src/modules/ad/domain/dtos/validators/decorators/has-driver-seats.validator.ts @@ -4,24 +4,7 @@ import { ValidationOptions, buildMessage, } 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; -} +import { hasProperDriverSeats } from '../has-driver-seats'; export function HasProperDriverSeats( validationOptions?: ValidationOptions, diff --git a/src/modules/ad/domain/dtos/validators/has-passenger-seats.validator.ts b/src/modules/ad/domain/dtos/validators/decorators/has-passenger-seats.validator.ts similarity index 51% rename from src/modules/ad/domain/dtos/validators/has-passenger-seats.validator.ts rename to src/modules/ad/domain/dtos/validators/decorators/has-passenger-seats.validator.ts index 74cf588..82d4240 100644 --- a/src/modules/ad/domain/dtos/validators/has-passenger-seats.validator.ts +++ b/src/modules/ad/domain/dtos/validators/decorators/has-passenger-seats.validator.ts @@ -4,24 +4,7 @@ import { ValidationOptions, buildMessage, } 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; -} +import { hasProperPassengerSeats } from '../has-passenger-seats'; export function HasProperPassengerSeats( validationOptions?: ValidationOptions, diff --git a/src/modules/ad/domain/dtos/validators/decorators/is-punctual-or-recurrent.validator.ts b/src/modules/ad/domain/dtos/validators/decorators/is-punctual-or-recurrent.validator.ts new file mode 100644 index 0000000..d18a1a6 --- /dev/null +++ b/src/modules/ad/domain/dtos/validators/decorators/is-punctual-or-recurrent.validator.ts @@ -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, + ); +} diff --git a/src/modules/ad/domain/dtos/validators/has-driver-seats.ts b/src/modules/ad/domain/dtos/validators/has-driver-seats.ts new file mode 100644 index 0000000..aaef9c8 --- /dev/null +++ b/src/modules/ad/domain/dtos/validators/has-driver-seats.ts @@ -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; +} diff --git a/src/modules/ad/domain/dtos/validators/has-passenger-seats.ts b/src/modules/ad/domain/dtos/validators/has-passenger-seats.ts new file mode 100644 index 0000000..46b1dad --- /dev/null +++ b/src/modules/ad/domain/dtos/validators/has-passenger-seats.ts @@ -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; +} diff --git a/src/modules/ad/domain/dtos/validators/is-punctual-or-recurrent.validator.ts b/src/modules/ad/domain/dtos/validators/is-punctual-or-recurrent.ts similarity index 53% rename from src/modules/ad/domain/dtos/validators/is-punctual-or-recurrent.validator.ts rename to src/modules/ad/domain/dtos/validators/is-punctual-or-recurrent.ts index d740c24..70bfef3 100644 --- a/src/modules/ad/domain/dtos/validators/is-punctual-or-recurrent.validator.ts +++ b/src/modules/ad/domain/dtos/validators/is-punctual-or-recurrent.ts @@ -1,9 +1,4 @@ -import { - ValidateBy, - ValidationArguments, - ValidationOptions, - buildMessage, -} from 'class-validator'; +import { ValidationArguments } from 'class-validator'; import { Frequency } from '../../types/frequency.enum'; function isPunctual(args: ValidationArguments): boolean { @@ -30,24 +25,3 @@ function isRecurrent(args: ValidationArguments): boolean { export const isPunctualOrRecurrent = (args: ValidationArguments): boolean => { 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, - ); -} diff --git a/src/modules/ad/tests/unit/domain/has-driver-seats-validator.spec.ts b/src/modules/ad/tests/unit/domain/has-driver-seats-validator.spec.ts index 4da1d4e..35bad11 100644 --- a/src/modules/ad/tests/unit/domain/has-driver-seats-validator.spec.ts +++ b/src/modules/ad/tests/unit/domain/has-driver-seats-validator.spec.ts @@ -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', () => { it('should validate if driver and drivers seats is not provided ', () => { diff --git a/src/modules/ad/tests/unit/domain/has-passenger-seats-validator.spec.ts b/src/modules/ad/tests/unit/domain/has-passenger-seats-validator.spec.ts index 3befd78..ae5459e 100644 --- a/src/modules/ad/tests/unit/domain/has-passenger-seats-validator.spec.ts +++ b/src/modules/ad/tests/unit/domain/has-passenger-seats-validator.spec.ts @@ -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', () => { it('should validate if passenger and passengers seats is not provided ', () => { diff --git a/src/modules/ad/tests/unit/domain/has-proper-addresses-indexes.spec.ts b/src/modules/ad/tests/unit/domain/has-proper-addresses-indexes.spec.ts index 2d9ddaa..6785548 100644 --- a/src/modules/ad/tests/unit/domain/has-proper-addresses-indexes.spec.ts +++ b/src/modules/ad/tests/unit/domain/has-proper-addresses-indexes.spec.ts @@ -1,5 +1,5 @@ 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', () => { const mockAddress1: AddressRequestDTO = { lon: 48.68944505415954, diff --git a/src/modules/ad/tests/unit/domain/is-punctual-or-reccurent.spec.ts b/src/modules/ad/tests/unit/domain/is-punctual-or-reccurent.spec.ts index 869fe2c..2678862 100644 --- a/src/modules/ad/tests/unit/domain/is-punctual-or-reccurent.spec.ts +++ b/src/modules/ad/tests/unit/domain/is-punctual-or-reccurent.spec.ts @@ -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'; describe('punctual or reccurent validators', () => {