| 
							
							
							
						 |  |  | @@ -1,6 +1,6 @@ | 
		
	
		
			
				|  |  |  |  | import { Authorized, Body, Delete, Get, JsonController, OnUndefined, Param, Post, Put, QueryParam, UseBefore } from 'routing-controllers'; | 
		
	
		
			
				|  |  |  |  | import { OpenAPI, ResponseSchema } from 'routing-controllers-openapi'; | 
		
	
		
			
				|  |  |  |  | import { getConnectionManager, Repository } from 'typeorm'; | 
		
	
		
			
				|  |  |  |  | import { getConnection, getConnectionManager, Repository } from 'typeorm'; | 
		
	
		
			
				|  |  |  |  | import { RunnerNotFoundError } from '../errors/RunnerErrors'; | 
		
	
		
			
				|  |  |  |  | import { ScanIdsNotMatchingError, ScanNotFoundError } from '../errors/ScanErrors'; | 
		
	
		
			
				|  |  |  |  | import ScanAuth from '../middlewares/ScanAuth'; | 
		
	
	
		
			
				
					
					|  |  |  | @@ -8,6 +8,7 @@ import { CreateScan } from '../models/actions/CreateScan'; | 
		
	
		
			
				|  |  |  |  | import { CreateTrackScan } from '../models/actions/CreateTrackScan'; | 
		
	
		
			
				|  |  |  |  | import { UpdateScan } from '../models/actions/UpdateScan'; | 
		
	
		
			
				|  |  |  |  | import { Scan } from '../models/entities/Scan'; | 
		
	
		
			
				|  |  |  |  | import { TrackScan } from '../models/entities/TrackScan'; | 
		
	
		
			
				|  |  |  |  | import { ResponseEmpty } from '../models/responses/ResponseEmpty'; | 
		
	
		
			
				|  |  |  |  | import { ResponseScan } from '../models/responses/ResponseScan'; | 
		
	
		
			
				|  |  |  |  | import { ResponseTrackScan } from '../models/responses/ResponseTrackScan'; | 
		
	
	
		
			
				
					
					|  |  |  | @@ -31,7 +32,7 @@ export class ScanController { | 
		
	
		
			
				|  |  |  |  | 	@OpenAPI({ description: 'Lists all scans (normal or track) from all runners. <br> This includes the scan\'s runner\'s distance ran.' }) | 
		
	
		
			
				|  |  |  |  | 	async getAll() { | 
		
	
		
			
				|  |  |  |  | 		let responseScans: ResponseScan[] = new Array<ResponseScan>(); | 
		
	
		
			
				|  |  |  |  | 		const scans = await this.scanRepository.find({ relations: ['runner', 'runner.scans', 'runner.scans.track'] }); | 
		
	
		
			
				|  |  |  |  | 		const scans = await this.scanRepository.find({ relations: ['runner', 'track', 'runner.scans', 'runner.scans.track', 'card', 'station'] }); | 
		
	
		
			
				|  |  |  |  | 		scans.forEach(scan => { | 
		
	
		
			
				|  |  |  |  | 			responseScans.push(scan.toResponse()); | 
		
	
		
			
				|  |  |  |  | 		}); | 
		
	
	
		
			
				
					
					|  |  |  | @@ -46,7 +47,7 @@ export class ScanController { | 
		
	
		
			
				|  |  |  |  | 	@OnUndefined(ScanNotFoundError) | 
		
	
		
			
				|  |  |  |  | 	@OpenAPI({ description: 'Lists all information about the scan whose id got provided. This includes the scan\'s runner\'s distance ran.' }) | 
		
	
		
			
				|  |  |  |  | 	async getOne(@Param('id') id: number) { | 
		
	
		
			
				|  |  |  |  | 		let scan = await this.scanRepository.findOne({ id: id }, { relations: ['runner', 'runner.scans', 'runner.scans.track'] }) | 
		
	
		
			
				|  |  |  |  | 		let scan = await this.scanRepository.findOne({ id: id }, { relations: ['runner', 'track', 'runner.scans', 'runner.scans.track', 'card', 'station'] }) | 
		
	
		
			
				|  |  |  |  | 		if (!scan) { throw new ScanNotFoundError(); } | 
		
	
		
			
				|  |  |  |  | 		return scan.toResponse(); | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
	
		
			
				
					
					|  |  |  | @@ -59,7 +60,7 @@ export class ScanController { | 
		
	
		
			
				|  |  |  |  | 	async post(@Body({ validate: true }) createScan: CreateScan) { | 
		
	
		
			
				|  |  |  |  | 		let scan = await createScan.toScan(); | 
		
	
		
			
				|  |  |  |  | 		scan = await this.scanRepository.save(scan); | 
		
	
		
			
				|  |  |  |  | 		return (await this.scanRepository.findOne({ id: scan.id }, { relations: ['runner', 'runner.scans', 'runner.scans.track'] })).toResponse(); | 
		
	
		
			
				|  |  |  |  | 		return (await this.scanRepository.findOne({ id: scan.id }, { relations: ['runner', 'track', 'runner.scans', 'runner.scans.track', 'card', 'station'] })).toResponse(); | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	@Post("/trackscans") | 
		
	
	
		
			
				
					
					|  |  |  | @@ -69,8 +70,8 @@ export class ScanController { | 
		
	
		
			
				|  |  |  |  | 	@OpenAPI({ description: 'Create a new track scan. <br> This is just a alias for posting /scans', security: [{ "ScanApiToken": [] }, { "AuthToken": [] }, { "RefreshTokenCookie": [] }] }) | 
		
	
		
			
				|  |  |  |  | 	async postTrackScans(@Body({ validate: true }) createScan: CreateTrackScan) { | 
		
	
		
			
				|  |  |  |  | 		let scan = await createScan.toScan(); | 
		
	
		
			
				|  |  |  |  | 		scan = await this.scanRepository.save(scan); | 
		
	
		
			
				|  |  |  |  | 		return (await this.scanRepository.findOne({ id: scan.id }, { relations: ['runner', 'track', 'runner.scans', 'runner.scans.track'] })).toResponse(); | 
		
	
		
			
				|  |  |  |  | 		scan = await getConnection().getRepository(TrackScan).save(scan); | 
		
	
		
			
				|  |  |  |  | 		return (await this.scanRepository.findOne({ id: scan.id }, { relations: ['runner', 'track', 'runner.scans', 'runner.scans.track', 'card', 'station'] })).toResponse(); | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	@Put('/:id') | 
		
	
	
		
			
				
					
					|  |  |  | @@ -92,7 +93,7 @@ export class ScanController { | 
		
	
		
			
				|  |  |  |  | 		} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 		await this.scanRepository.save(await scan.updateScan(oldScan)); | 
		
	
		
			
				|  |  |  |  | 		return (await this.scanRepository.findOne({ id: id }, { relations: ['runner'] })).toResponse(); | 
		
	
		
			
				|  |  |  |  | 		return (await this.scanRepository.findOne({ id: id }, { relations: ['runner', 'track', 'runner.scans', 'runner.scans.track', 'card', 'station'] })).toResponse(); | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	@Delete('/:id') | 
		
	
	
		
			
				
					
					|  |  |  | @@ -104,7 +105,7 @@ export class ScanController { | 
		
	
		
			
				|  |  |  |  | 	async remove(@Param("id") id: number, @QueryParam("force") force: boolean) { | 
		
	
		
			
				|  |  |  |  | 		let scan = await this.scanRepository.findOne({ id: id }); | 
		
	
		
			
				|  |  |  |  | 		if (!scan) { return null; } | 
		
	
		
			
				|  |  |  |  | 		const responseScan = await this.scanRepository.findOne({ id: scan.id }, { relations: ["runner"] }); | 
		
	
		
			
				|  |  |  |  | 		const responseScan = await this.scanRepository.findOne({ id: scan.id }, { relations: ['runner', 'track', 'runner.scans', 'runner.scans.track', 'card', 'station'] }); | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 		await this.scanRepository.delete(scan); | 
		
	
		
			
				|  |  |  |  | 		return responseScan.toResponse(); | 
		
	
	
		
			
				
					
					|  |  |  |   |