diff --git a/src/airport/airport.controller.ts b/src/airport/airport.controller.ts index ee32b06..e696c07 100644 --- a/src/airport/airport.controller.ts +++ b/src/airport/airport.controller.ts @@ -22,8 +22,10 @@ import { Assignment } from './models/assignment.model'; import { Constraint } from './models/constraint.model'; import { Planning } from './models/planning.model'; import { RunwaySpacing } from './models/runwayspacing.model'; -import { Waypoint } from './models/waypoint.model'; -import { WaypointDto } from './dto/waypoint.dto'; +import { Waypoint } from '../models/waypoint.model'; +import { WaypointDto } from '../dto/waypoint.dto'; +import { Coordinate } from 'src/models/coordinate.model'; +import { CoordinateDto } from 'src/dto/coordinate.dto'; @Controller('airport') export class AirportController { @@ -55,29 +57,33 @@ export class AirportController { return retval; } - private static convertWaypoint(waypoint: Waypoint | WaypointDto): T { + private static convertCoordinate( + coordinate: Coordinate | CoordinateDto, + ): T { return { - identifier: waypoint.identifier, - latitude: waypoint.latitude, - longitude: waypoint.longitude, + latitude: coordinate.latitude, + longitude: coordinate.longitude, } as T; } - private static convertWaypoints( + private static convertWaypoint(waypoint: Waypoint | WaypointDto): T { + return { + identifier: waypoint.identifier, + coordinate: AirportController.convertCoordinate(waypoint.coordinate), + } as T; + } + + private static convertWaypoints( waypoints: Waypoint[] | WaypointDto[], ): T[] { const retval: T[] = []; waypoints.forEach((waypoint) => - retval.push({ - identifier: waypoint.identifier, - latitude: waypoint.latitude, - longitude: waypoint.longitude, - } as T), + retval.push(AirportController.convertWaypoint(waypoint)), ); return retval; } - private static convertArrivalRoutes( + private static convertArrivalRoutes( routes: ArrivalRoute[] | ArrivalRouteDto[], ): T[] { const retval: T[] = []; @@ -85,7 +91,7 @@ export class AirportController { retval.push({ arrival: route.runway, runway: route.runway, - waypoints: AirportController.convertWaypoints(route.waypoints), + waypoints: AirportController.convertWaypoints(route.waypoints), constraints: AirportController.convertConstraints(route.constraints), } as T), ); @@ -140,7 +146,7 @@ export class AirportController { return { icao: airport.icao, - location: AirportController.convertWaypoint( + location: AirportController.convertWaypoint( airport.location, ), elevation: airport.elevation, @@ -150,7 +156,8 @@ export class AirportController { arrivalRoutes: AirportController.convertArrivalRoutes< ArrivalRouteDto, ConstraintDto, - WaypointDto + WaypointDto, + CoordinateDto >(airport.arrivalRoutes), spacings: AirportController.convertRunwaySpacings( airport.spacings, @@ -166,7 +173,9 @@ export class AirportController { return { icao: airport.icao, - location: AirportController.convertWaypoint(airport.location), + location: AirportController.convertWaypoint( + airport.location, + ), elevation: airport.elevation, upperConstraints: AirportController.convertConstraints( airport.upperConstraints, @@ -174,7 +183,8 @@ export class AirportController { arrivalRoutes: AirportController.convertArrivalRoutes< ArrivalRoute, Constraint, - Waypoint + Waypoint, + Coordinate >(airport.arrivalRoutes), spacings: AirportController.convertRunwaySpacings( airport.spacings, diff --git a/src/airport/dto/airport.dto.ts b/src/airport/dto/airport.dto.ts index a938dfc..2815a55 100644 --- a/src/airport/dto/airport.dto.ts +++ b/src/airport/dto/airport.dto.ts @@ -4,7 +4,7 @@ import { ConstraintDto } from './constraint.dto'; import { ArrivalRouteDto } from './arrivalroute.dto'; import { RunwaySpacingDto } from './runwayspacing.dto'; import { PlanningDto } from './planning.dto'; -import { WaypointDto } from './waypoint.dto'; +import { WaypointDto } from '../../dto/waypoint.dto'; export class AirportDto { @IsNotEmpty() diff --git a/src/airport/dto/arrivalroute.dto.ts b/src/airport/dto/arrivalroute.dto.ts index 96d94f3..f8a997e 100644 --- a/src/airport/dto/arrivalroute.dto.ts +++ b/src/airport/dto/arrivalroute.dto.ts @@ -1,7 +1,7 @@ import { IsNotEmpty, IsOptional } from 'class-validator'; import { ApiProperty } from '@nestjs/swagger'; import { ConstraintDto } from './constraint.dto'; -import { WaypointDto } from './waypoint.dto'; +import { WaypointDto } from '../../dto/waypoint.dto'; export class ArrivalRouteDto { @IsNotEmpty() diff --git a/src/airport/models/airport.model.ts b/src/airport/models/airport.model.ts index 29db52e..0a62b7e 100644 --- a/src/airport/models/airport.model.ts +++ b/src/airport/models/airport.model.ts @@ -4,7 +4,7 @@ import { ArrivalRoute, ArrivalRouteSchema } from './arrivalroute.model'; import { Constraint, ConstraintSchema } from './constraint.model'; import { Planning, PlanningSchema } from './planning.model'; import { RunwaySpacing, RunwaySpacingSchema } from './runwayspacing.model'; -import { Waypoint } from './waypoint.model'; +import { Waypoint } from '../../models/waypoint.model'; export type AirportDocument = Airport & Document; diff --git a/src/airport/models/arrivalroute.model.ts b/src/airport/models/arrivalroute.model.ts index 67a4d7e..559f2ca 100644 --- a/src/airport/models/arrivalroute.model.ts +++ b/src/airport/models/arrivalroute.model.ts @@ -1,7 +1,7 @@ import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose'; import { Document } from 'mongoose'; import { Constraint, ConstraintSchema } from './constraint.model'; -import { Waypoint, WaypointSchema } from './waypoint.model'; +import { Waypoint, WaypointSchema } from '../../models/waypoint.model'; export type ArrivalRouteDocument = ArrivalRoute & Document; diff --git a/src/airport/dto/waypoint.dto.ts b/src/dto/coordinate.dto.ts similarity index 72% rename from src/airport/dto/waypoint.dto.ts rename to src/dto/coordinate.dto.ts index 52753f6..1840d0e 100644 --- a/src/airport/dto/waypoint.dto.ts +++ b/src/dto/coordinate.dto.ts @@ -1,14 +1,7 @@ import { IsNotEmpty, IsLatitude, IsLongitude } from 'class-validator'; import { ApiProperty } from '@nestjs/swagger'; -export class WaypointDto { - @IsNotEmpty() - @ApiProperty({ - description: 'The unique waypoint code', - example: 'KETAP', - }) - identifier: string; - +export class CoordinateDto { @IsNotEmpty() @ApiProperty({ description: 'The latitudinal component', diff --git a/src/dto/waypoint.dto.ts b/src/dto/waypoint.dto.ts new file mode 100644 index 0000000..a31d641 --- /dev/null +++ b/src/dto/waypoint.dto.ts @@ -0,0 +1,19 @@ +import { IsNotEmpty } from 'class-validator'; +import { ApiProperty } from '@nestjs/swagger'; +import { CoordinateDto } from './coordinate.dto'; + +export class WaypointDto { + @IsNotEmpty() + @ApiProperty({ + description: 'The unique waypoint code', + example: 'KETAP', + }) + identifier: string; + + @IsNotEmpty() + @ApiProperty({ + description: 'The latitudinal component', + example: 42.8402, + }) + coordinate: CoordinateDto; +} diff --git a/src/models/coordinate.model.ts b/src/models/coordinate.model.ts new file mode 100644 index 0000000..5b6edd7 --- /dev/null +++ b/src/models/coordinate.model.ts @@ -0,0 +1,21 @@ +import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose'; +import { Document } from 'mongoose'; + +export type CoordinateDocument = Coordinate & Document; + +@Schema() +export class Coordinate { + @Prop({ + required: true, + type: Number, + }) + latitude: number; + + @Prop({ + required: true, + type: Number, + }) + longitude: number; +} + +export const CoordinateSchema = SchemaFactory.createForClass(Coordinate); diff --git a/src/airport/models/waypoint.model.ts b/src/models/waypoint.model.ts similarity index 75% rename from src/airport/models/waypoint.model.ts rename to src/models/waypoint.model.ts index e22f6d9..af4b1f3 100644 --- a/src/airport/models/waypoint.model.ts +++ b/src/models/waypoint.model.ts @@ -1,5 +1,6 @@ import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose'; import { Document } from 'mongoose'; +import { Coordinate, CoordinateSchema } from './coordinate.model'; export type WaypointDocument = Waypoint & Document; @@ -13,15 +14,9 @@ export class Waypoint { @Prop({ required: true, - type: Number, + type: CoordinateSchema, }) - latitude: number; - - @Prop({ - required: true, - type: Number, - }) - longitude: number; + coordinate: Coordinate; } export const WaypointSchema = SchemaFactory.createForClass(Waypoint);