introduce an endpoint and service to update the active runway and arrival mode
This commit is contained in:
		| @@ -3,6 +3,7 @@ import { | ||||
|   Controller, | ||||
|   Get, | ||||
|   Delete, | ||||
|   Patch, | ||||
|   Post, | ||||
|   Query, | ||||
|   HttpException, | ||||
| @@ -27,6 +28,7 @@ import { WaypointDto } from '../generic/dto/waypoint.dto'; | ||||
| import { Coordinate } from '../generic/models/coordinate.model'; | ||||
| import { CoordinateDto } from '../generic/dto/coordinate.dto'; | ||||
| import { WaypointConverter } from '../generic/converters'; | ||||
| import { ActiveRunwaysDto } from './dto/activerunways.dto'; | ||||
|  | ||||
| @Controller('airport') | ||||
| export class AirportController { | ||||
| @@ -317,4 +319,38 @@ export class AirportController { | ||||
|       await this.airportService.deleteAirport(icao); | ||||
|     }); | ||||
|   } | ||||
|  | ||||
|   @Patch('/activateRunways') | ||||
|   @ApiBody({ | ||||
|     description: 'The airport definition', | ||||
|     type: ActiveRunwaysDto, | ||||
|   }) | ||||
|   @ApiResponse({ | ||||
|     status: 200, | ||||
|     description: 'The active runways are set', | ||||
|   }) | ||||
|   @ApiResponse({ | ||||
|     status: 404, | ||||
|     description: 'The airport or the runways are not found', | ||||
|   }) | ||||
|   @ApiResponse({ | ||||
|     status: 422, | ||||
|     description: 'The arrival mode is invalid', | ||||
|   }) | ||||
|   async activeRunways( | ||||
|     @Body('runways') runways: ActiveRunwaysDto, | ||||
|   ): Promise<void> { | ||||
|     if (runways.mode !== 'STAGGERED' && runways.mode !== 'IPA') { | ||||
|       throw new HttpException( | ||||
|         'Invalid arrival mode', | ||||
|         HttpStatus.UNPROCESSABLE_ENTITY, | ||||
|       ); | ||||
|     } | ||||
|  | ||||
|     await this.airportService.activateRunways(runways).then((updated) => { | ||||
|       if (!updated) { | ||||
|         throw new HttpException('Airport not found', HttpStatus.NOT_FOUND); | ||||
|       } | ||||
|     }); | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -1,6 +1,7 @@ | ||||
| import { Injectable } from '@nestjs/common'; | ||||
| import { InjectModel } from '@nestjs/mongoose'; | ||||
| import { Model } from 'mongoose'; | ||||
| import { ActiveRunwaysDto } from './dto/activerunways.dto'; | ||||
| import { Airport, AirportDocument } from './models/airport.model'; | ||||
|  | ||||
| @Injectable() | ||||
| @@ -57,4 +58,17 @@ export class AirportService { | ||||
|   async deleteAirport(icao: string): Promise<void> { | ||||
|     this.airportModel.deleteOne({ icao }); | ||||
|   } | ||||
|  | ||||
|   async activateRunways(runways: ActiveRunwaysDto): Promise<boolean> { | ||||
|     return this.airportExists(runways.icao).then(async (exists) => { | ||||
|       if (exists) { | ||||
|         await this.airportModel.findOneAndUpdate( | ||||
|           { icao: runways.icao }, | ||||
|           { activeRunways: runways.runways, arrivalMode: runways.mode }, | ||||
|         ); | ||||
|       } | ||||
|  | ||||
|       return exists; | ||||
|     }); | ||||
|   } | ||||
| } | ||||
|   | ||||
							
								
								
									
										27
									
								
								src/airport/dto/activerunways.dto.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								src/airport/dto/activerunways.dto.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | ||||
| import { IsNotEmpty, IsOptional } from 'class-validator'; | ||||
| import { ApiProperty } from '@nestjs/swagger'; | ||||
| import { ConstraintDto } from './constraint.dto'; | ||||
| import { WaypointDto } from '../../generic/dto/waypoint.dto'; | ||||
|  | ||||
| export class ActiveRunwaysDto { | ||||
|   @IsNotEmpty() | ||||
|   @ApiProperty({ | ||||
|     description: 'The ICAO code of the airport', | ||||
|     example: 'EDDB', | ||||
|   }) | ||||
|   icao: string; | ||||
|  | ||||
|   @IsNotEmpty() | ||||
|   @ApiProperty({ | ||||
|     description: 'The arrival mode (possible: STAGGERED, IPA)', | ||||
|     example: 'IPA', | ||||
|   }) | ||||
|   mode: string; | ||||
|  | ||||
|   @IsNotEmpty() | ||||
|   @ApiProperty({ | ||||
|     description: 'The active runways', | ||||
|     example: '["25L", "25R"]', | ||||
|   }) | ||||
|   runways: string[]; | ||||
| } | ||||
		Reference in New Issue
	
	Block a user