diff --git a/src/airport/airport.controller.ts b/src/airport/airport.controller.ts index d5132c4..64f7f8d 100644 --- a/src/airport/airport.controller.ts +++ b/src/airport/airport.controller.ts @@ -27,8 +27,10 @@ import { Waypoint } from '../generic/models/waypoint.model'; 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 { CoordinateConverter, WaypointConverter } from '../generic/converters'; import { ActiveRunwaysDto } from './dto/activerunways.dto'; +import { Runway } from './models/runway.model'; +import { RunwayDto } from './dto/runway.dto'; @Controller('airport') export class AirportController { @@ -118,6 +120,17 @@ export class AirportController { } as T; } + private static convertRunways(runways: Runway[] | RunwayDto[]): T[] { + const retval: T[] = []; + runways.forEach((runway) => + retval.push({ + identifier: runway.identifier, + threshold: CoordinateConverter.convert(runway.threshold), + } as T), + ); + return retval; + } + private static airportToAirportDto(airport: Airport): AirportDto { if (!airport) return null; @@ -127,6 +140,7 @@ export class AirportController { airport.location, ), elevation: airport.elevation, + runways: AirportController.convertRunways(airport.runways), upperConstraints: AirportController.convertConstraints( airport.upperConstraints, ), @@ -156,6 +170,7 @@ export class AirportController { airport.location, ), elevation: airport.elevation, + runways: AirportController.convertRunways(airport.runways), upperConstraints: AirportController.convertConstraints( airport.upperConstraints, ), diff --git a/src/airport/dto/airport.dto.ts b/src/airport/dto/airport.dto.ts index 6aa075a..5563fac 100644 --- a/src/airport/dto/airport.dto.ts +++ b/src/airport/dto/airport.dto.ts @@ -5,6 +5,7 @@ import { ArrivalRouteDto } from './arrivalroute.dto'; import { RunwaySpacingDto } from './runwayspacing.dto'; import { PlanningDto } from './planning.dto'; import { WaypointDto } from '../../generic/dto/waypoint.dto'; +import { RunwayDto } from './runway.dto'; export class AirportDto { @IsNotEmpty() @@ -26,6 +27,12 @@ export class AirportDto { }) elevation: number; + @IsNotEmpty() + @ApiProperty({ + description: 'All possible arrival runways', + }) + runways: RunwayDto[]; + @IsOptional() @ApiProperty({ description: 'The constraints in upper airspaces', diff --git a/src/airport/dto/runway.dto.ts b/src/airport/dto/runway.dto.ts new file mode 100644 index 0000000..b71453a --- /dev/null +++ b/src/airport/dto/runway.dto.ts @@ -0,0 +1,18 @@ +import { IsNotEmpty } from 'class-validator'; +import { ApiProperty } from '@nestjs/swagger'; +import { CoordinateDto } from '../../generic/dto/coordinate.dto'; + +export class RunwayDto { + @IsNotEmpty() + @ApiProperty({ + description: 'The identifier of the runway', + example: '25L', + }) + identifier: string; + + @IsNotEmpty() + @ApiProperty({ + description: 'The runway threshold', + }) + altitude: CoordinateDto; +} diff --git a/src/airport/models/airport.model.ts b/src/airport/models/airport.model.ts index ff89296..27ea69d 100644 --- a/src/airport/models/airport.model.ts +++ b/src/airport/models/airport.model.ts @@ -5,6 +5,7 @@ import { Constraint, ConstraintSchema } from './constraint.model'; import { Planning, PlanningSchema } from './planning.model'; import { RunwaySpacing, RunwaySpacingSchema } from './runwayspacing.model'; import { Waypoint } from '../../generic/models/waypoint.model'; +import { Runway, RunwaySchema } from './runway.model'; export type AirportDocument = Airport & Document; @@ -29,6 +30,12 @@ export class Airport { }) elevation: number; + @Prop({ + required: true, + type: [RunwaySchema], + }) + runways: Runway[]; + @Prop({ type: [ConstraintSchema], }) diff --git a/src/airport/models/runway.model.ts b/src/airport/models/runway.model.ts new file mode 100644 index 0000000..93c9c30 --- /dev/null +++ b/src/airport/models/runway.model.ts @@ -0,0 +1,25 @@ +import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose'; +import { Document } from 'mongoose'; +import { + Coordinate, + CoordinateSchema, +} from '../../generic/models/coordinate.model'; + +export type RunwayDocument = Runway & Document; + +@Schema() +export class Runway { + @Prop({ + required: true, + type: String, + }) + identifier: string; + + @Prop({ + required: true, + type: CoordinateSchema, + }) + threshold: Coordinate; +} + +export const RunwaySchema = SchemaFactory.createForClass(Runway);