62 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { IsBoolean, IsInt, IsOptional, IsPositive } from 'class-validator';
 | |
| import { getConnection } from 'typeorm';
 | |
| import { RunnerNotFoundError } from '../../../errors/RunnerErrors';
 | |
| import { Runner } from '../../entities/Runner';
 | |
| import { Scan } from '../../entities/Scan';
 | |
| 
 | |
| /**
 | |
|  * This class is used to update a Scan entity (via put request)
 | |
|  */
 | |
| export abstract class UpdateScan {
 | |
|     /**
 | |
|      * The updated scan's id.
 | |
|      * This shouldn't have changed but it is here in case anyone ever wants to enable id changes (whyever they would want to).
 | |
|      */
 | |
|     @IsInt()
 | |
|     id: number;
 | |
| 
 | |
|     /**
 | |
|      * The updated scan's associated runner's id.
 | |
|      * This is important to link ran distances to runners.
 | |
|      */
 | |
|     @IsInt()
 | |
|     @IsPositive()
 | |
|     runner: number;
 | |
| 
 | |
|     /**
 | |
|      * Is the updated scan valid (for fraud reasons).
 | |
|      */
 | |
|     @IsBoolean()
 | |
|     @IsOptional()
 | |
|     valid?: boolean = true;
 | |
| 
 | |
|     /**
 | |
|      * The updated scan's distance in meters.
 | |
|      */
 | |
|     @IsInt()
 | |
|     @IsPositive()
 | |
|     public distance: number;
 | |
| 
 | |
|     /**
 | |
|      * Update a Scan entity based on this.
 | |
|      * @param scan The scan that shall be updated.
 | |
|      */
 | |
|     public async update(scan: Scan): Promise<Scan> {
 | |
|         scan.distance = this.distance;
 | |
|         scan.valid = this.valid;
 | |
|         scan.runner = await this.getRunner();
 | |
| 
 | |
|         return scan;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Gets a runner based on the runner id provided via this.runner.
 | |
|      */
 | |
|     public async getRunner(): Promise<Runner> {
 | |
|         const runner = await getConnection().getRepository(Runner).findOne({ id: this.runner });
 | |
|         if (!runner) {
 | |
|             throw new RunnerNotFoundError();
 | |
|         }
 | |
|         return runner;
 | |
|     }
 | |
| } |