From d890bc5eb16d2bb350e7b1dc41d1da43dc3c31f9 Mon Sep 17 00:00:00 2001 From: Sven Czarnian Date: Tue, 25 Oct 2022 08:25:36 +0200 Subject: [PATCH] validate the airport inputs --- src/airport/airport.controller.ts | 61 +++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/src/airport/airport.controller.ts b/src/airport/airport.controller.ts index 2eb53bb..3c7059c 100644 --- a/src/airport/airport.controller.ts +++ b/src/airport/airport.controller.ts @@ -174,6 +174,56 @@ export class AirportController { }; } + private static validateAirportEnums(airport: AirportDto): void { + airport.planning.assignments.forEach((assignment) => { + if ( + assignment.type !== 'SHALL' && + assignment.type !== 'SHOULD' && + assignment.type !== 'MAY' + ) { + throw new HttpException( + 'Invalid assignment type', + HttpStatus.UNPROCESSABLE_ENTITY, + ); + } + }); + } + + private static validateConstraint(constraint: ConstraintDto): void { + if ( + constraint.altitude.mode !== 'BELOW' && + constraint.altitude.mode !== 'EXACT' && + constraint.altitude.mode !== 'ABOVE' + ) { + throw new HttpException( + 'Invalid altitude constraint mode', + HttpStatus.UNPROCESSABLE_ENTITY, + ); + } + if ( + constraint.speed.mode !== 'BELOW' && + constraint.speed.mode !== 'EXACT' && + constraint.speed.mode !== 'ABOVE' + ) { + throw new HttpException( + 'Invalid speed constraint mode', + HttpStatus.UNPROCESSABLE_ENTITY, + ); + } + } + + private static validateAirportConstraints(airport: AirportDto): void { + airport.upperConstraints.forEach((constraint) => + AirportController.validateConstraint(constraint), + ); + + airport.arrivalRoutes.forEach((route) => { + route.constraints.forEach((constraint) => + AirportController.validateConstraint(constraint), + ); + }); + } + @Get('/allCodes') @ApiResponse({ status: 200, @@ -221,7 +271,18 @@ export class AirportController { status: 409, description: 'The airport is already registered', }) + @ApiResponse({ + status: 422, + description: 'The assignment type is invalid', + }) + @ApiResponse({ + status: 422, + description: 'The constraint type is invalid', + }) async register(@Body('airport') airport: AirportDto): Promise { + AirportController.validateAirportConstraints(airport); + AirportController.validateAirportEnums(airport); + await this.airportService .registerAirport(AirportController.airportDtoToAirport(airport)) .then((registered) => {