diff --git a/src/models/responses/ResponseSelfServiceScan.ts b/src/models/responses/ResponseSelfServiceScan.ts new file mode 100644 index 0000000..65b90de --- /dev/null +++ b/src/models/responses/ResponseSelfServiceScan.ts @@ -0,0 +1,57 @@ +import { IsBoolean, IsInt, IsNotEmpty, IsPositive } from "class-validator"; +import { Scan } from '../entities/Scan'; +import { TrackScan } from '../entities/TrackScan'; +import { ResponseObjectType } from '../enums/ResponseObjectType'; +import { IResponse } from './IResponse'; + +/** + * Defines the scan selfservice response. +*/ +export class ResponseSelfServiceScan implements IResponse { + /** + * The responseType. + * This contains the type of class/entity this response contains. + */ + responseType: ResponseObjectType = ResponseObjectType.SELFSERVICESCAN; + + /** + * The scans's id (for sorting). + */ + @IsInt() + id: number; + + /** + * Is the scan valid (for fraud reasons). + * The determination of validity will work differently for every child class. + */ + @IsBoolean() + valid: boolean = true; + + /** + * The scans's length/distance in meters. + */ + @IsInt() + @IsPositive() + distance: number; + + /** + * The scans's lap time (0 if non is availdable). + */ + @IsInt() + @IsNotEmpty() + lapTime: number = 0; + + /** + * Creates a ResponseScan object from a scan. + * @param scan The scan the response shall be build for. + */ + public constructor(scan: Scan | TrackScan) { + this.id = scan.id; + this.distance = scan.distance; + this.valid = scan.valid; + if (scan instanceof TrackScan) { + this.lapTime = scan.lapTime; + this.responseType = ResponseObjectType.SELFSERVICETRACKSCAN; + } + } +}