| 
							
							
							
						 |  |  | @@ -1,6 +1,8 @@ | 
		
	
		
			
				|  |  |  |  | import { IsInt, IsPositive } from 'class-validator'; | 
		
	
		
			
				|  |  |  |  | import { getConnection } from 'typeorm'; | 
		
	
		
			
				|  |  |  |  | import { RunnerCardNotFoundError } from '../../errors/RunnerCardErrors'; | 
		
	
		
			
				|  |  |  |  | import { RunnerNotFoundError } from '../../errors/RunnerErrors'; | 
		
	
		
			
				|  |  |  |  | import { ScanStationNotFoundError } from '../../errors/ScanStationErrors'; | 
		
	
		
			
				|  |  |  |  | import { RunnerCard } from '../entities/RunnerCard'; | 
		
	
		
			
				|  |  |  |  | import { ScanStation } from '../entities/ScanStation'; | 
		
	
		
			
				|  |  |  |  | import { TrackScan } from '../entities/TrackScan'; | 
		
	
	
		
			
				
					
					|  |  |  | @@ -41,7 +43,7 @@ export class CreateTrackScan { | 
		
	
		
			
				|  |  |  |  |             throw new RunnerNotFoundError(); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |         newScan.timestamp = new Date(Date.now()).toString(); | 
		
	
		
			
				|  |  |  |  |         newScan.timestamp = Math.round(new Date().getTime() / 1000); | 
		
	
		
			
				|  |  |  |  |         newScan.valid = await this.validateScan(newScan); | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |         return newScan; | 
		
	
	
		
			
				
					
					|  |  |  | @@ -50,25 +52,25 @@ export class CreateTrackScan { | 
		
	
		
			
				|  |  |  |  |     public async getCard(): Promise<RunnerCard> { | 
		
	
		
			
				|  |  |  |  |         const track = await getConnection().getRepository(RunnerCard).findOne({ id: this.card }, { relations: ["runner"] }); | 
		
	
		
			
				|  |  |  |  |         if (!track) { | 
		
	
		
			
				|  |  |  |  |             throw new Error(); | 
		
	
		
			
				|  |  |  |  |             throw new RunnerCardNotFoundError(); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |         return track; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |     public async getStation(): Promise<ScanStation> { | 
		
	
		
			
				|  |  |  |  |         const track = await getConnection().getRepository(ScanStation).findOne({ id: this.card }, { relations: ["track"] }); | 
		
	
		
			
				|  |  |  |  |         if (!track) { | 
		
	
		
			
				|  |  |  |  |             throw new Error(); | 
		
	
		
			
				|  |  |  |  |         const station = await getConnection().getRepository(ScanStation).findOne({ id: this.station }, { relations: ["track"] }); | 
		
	
		
			
				|  |  |  |  |         if (!station) { | 
		
	
		
			
				|  |  |  |  |             throw new ScanStationNotFoundError(); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |         return track; | 
		
	
		
			
				|  |  |  |  |         return station; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |     public async validateScan(scan: TrackScan): Promise<boolean> { | 
		
	
		
			
				|  |  |  |  |         const scans = await getConnection().getRepository(TrackScan).find({ where: { runner: scan.runner }, relations: ["track"] }); | 
		
	
		
			
				|  |  |  |  |         const scans = await getConnection().getRepository(TrackScan).find({ where: { runner: scan.runner, valid: true }, relations: ["track"] }); | 
		
	
		
			
				|  |  |  |  |         if (scans.length == 0) { return true; } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |         const newestScan = scans[0]; | 
		
	
		
			
				|  |  |  |  |         if ((new Date(scan.timestamp).getTime() - new Date(newestScan.timestamp).getTime()) > scan.track.minimumLapTime) { | 
		
	
		
			
				|  |  |  |  |         const newestScan = scans[scans.length - 1]; | 
		
	
		
			
				|  |  |  |  |         if ((scan.timestamp - newestScan.timestamp) > scan.track.minimumLapTime) { | 
		
	
		
			
				|  |  |  |  |             return true; | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
	
		
			
				
					
					|  |  |  |   |