import { AutoMap } from '@automapper/classes'; import { ArrayMinSize, IsArray, IsBoolean, IsDate, IsEnum, IsMilitaryTime, IsNotEmpty, IsNumber, IsOptional, IsString, } from 'class-validator'; import { Frequency } from '../types/frequency.enum'; import { Coordinate } from '../../../geography/domain/entities/coordinate'; import { Type } from 'class-transformer'; import { HasTruthyWith } from './has-truthy-with.validator'; export class CreateAdRequest { @IsString() @IsNotEmpty() @AutoMap() uuid: string; @IsString() @IsNotEmpty() @AutoMap() userUuid: string; @HasTruthyWith('passenger', { message: 'A role (driver or passenger) must be set to true', }) @IsBoolean() @AutoMap() driver: boolean; @IsBoolean() @AutoMap() passenger: boolean; @IsEnum(Frequency) @AutoMap() frequency: Frequency; @Type(() => Date) @IsDate() @AutoMap() fromDate: Date; @Type(() => Date) @IsDate() @AutoMap() toDate: Date; @IsOptional() @IsMilitaryTime() @AutoMap() monTime?: string; @IsOptional() @IsMilitaryTime() @AutoMap() tueTime?: string; @IsOptional() @IsMilitaryTime() @AutoMap() wedTime?: string; @IsOptional() @IsMilitaryTime() @AutoMap() thuTime?: string; @IsOptional() @IsMilitaryTime() @AutoMap() friTime?: string; @IsOptional() @IsMilitaryTime() @AutoMap() satTime?: string; @IsOptional() @IsMilitaryTime() @AutoMap() sunTime?: string; @IsNumber() @AutoMap() monMargin: number; @IsNumber() @AutoMap() tueMargin: number; @IsNumber() @AutoMap() wedMargin: number; @IsNumber() @AutoMap() thuMargin: number; @IsNumber() @AutoMap() friMargin: number; @IsNumber() @AutoMap() satMargin: number; @IsNumber() @AutoMap() sunMargin: number; @Type(() => Coordinate) @IsArray() @ArrayMinSize(2) @AutoMap(() => [Coordinate]) addresses: Coordinate[]; @IsNumber() @AutoMap() seatsDriver: number; @IsNumber() @AutoMap() seatsPassenger: number; @IsOptional() @IsNumber() @AutoMap() seatsUsed?: number; @IsBoolean() @AutoMap() strict: boolean; }