import { IsInt, IsNotEmpty, IsOptional, IsPositive, IsString } from 'class-validator'; import { TrackLapTimeCantBeNegativeError } from '../../../errors/TrackErrors'; import { Track } from '../../entities/Track'; /** * This classed is used to create a new Track entity from a json body (post request). */ export class CreateTrack { /** * The new track's name. */ @IsString() @IsNotEmpty() name: string; /** * The new track's distance in meters (must be greater than 0). */ @IsInt() @IsPositive() distance: number; /** * The minimum time a runner should take to run a lap on this track (in seconds). * Will be used for fraud detection. */ @IsInt() @IsOptional() minimumLapTime: number; /** * Creates a new Track entity from this. */ public toEntity(): Track { let newTrack: Track = new Track(); newTrack.name = this.name; newTrack.distance = this.distance; newTrack.minimumLapTime = this.minimumLapTime; if (this.minimumLapTime < 0) { throw new TrackLapTimeCantBeNegativeError(); } return newTrack; } }