|
@@ -8,10 +8,13 @@ import {
|
|
|
HttpStatus,
|
|
|
} from '@nestjs/common';
|
|
|
import { ApiBody, ApiQuery, ApiResponse } from '@nestjs/swagger';
|
|
|
+import { WGS84 } from '../math';
|
|
|
+import { WeatherService } from 'src/weather/weather.service';
|
|
|
import { AirportService } from '../airport/airport.service';
|
|
|
import { CoordinateConverter, WaypointConverter } from '../generic/converters';
|
|
|
import { CoordinateDto } from '../generic/dto/coordinate.dto';
|
|
|
import { WaypointDto } from '../generic/dto/waypoint.dto';
|
|
|
+import { PerformanceService } from '../performance/performance.service';
|
|
|
import { AircraftDto } from './dto/aircraft.dto';
|
|
|
import { ControllerInputDto } from './dto/controllerinput.dto';
|
|
|
import { FlightStateDto } from './dto/flightstate.dto';
|
|
@@ -31,6 +34,8 @@ export class InboundController {
|
|
|
constructor(
|
|
|
private readonly inboundService: InboundService,
|
|
|
private readonly airportService: AirportService,
|
|
|
+ private readonly performanceService: PerformanceService,
|
|
|
+ private readonly weatherService: WeatherService,
|
|
|
) {}
|
|
|
|
|
|
private static convertAircraft<T>(aircraft: Aircraft | AircraftDto): T {
|
|
@@ -196,24 +201,56 @@ export class InboundController {
|
|
|
description: 'The destination airport is unknown',
|
|
|
})
|
|
|
async insert(inbound: InboundDto): Promise<boolean> {
|
|
|
- return this.airportService.airport(inbound.destination).then((airport) => {
|
|
|
- if (!airport) {
|
|
|
- throw new HttpException('Airport not found', HttpStatus.NOT_FOUND);
|
|
|
- }
|
|
|
+ return this.airportService
|
|
|
+ .airport(inbound.destination)
|
|
|
+ .then(async (airport) => {
|
|
|
+ if (!airport) {
|
|
|
+ throw new HttpException('Airport not found', HttpStatus.NOT_FOUND);
|
|
|
+ }
|
|
|
+
|
|
|
+ // update the weather data
|
|
|
+ if (inbound.controllerData.remainingRoute.length >= 1) {
|
|
|
+ await this.weatherService.update(
|
|
|
+ inbound.destination,
|
|
|
+ inbound.controllerData.remainingRoute[0].identifier,
|
|
|
+ WGS84.distance(
|
|
|
+ {
|
|
|
+ lat: inbound.flightState.position.latitude,
|
|
|
+ lon: inbound.flightState.position.longitude,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ lat: inbound.controllerData.remainingRoute[0].coordinate
|
|
|
+ .latitude,
|
|
|
+ lon: inbound.controllerData.remainingRoute[0].coordinate
|
|
|
+ .longitude,
|
|
|
+ },
|
|
|
+ ) * 0.000539957,
|
|
|
+ inbound.flightState.groundSpeed,
|
|
|
+ inbound.flightState.heading,
|
|
|
+ inbound.flightState.groundTrack,
|
|
|
+ inbound.flightState.altitude,
|
|
|
+ );
|
|
|
+ }
|
|
|
|
|
|
- return this.inboundService
|
|
|
- .callsignKnown(inbound.callsign)
|
|
|
- .then((known) => {
|
|
|
- const internalInbound =
|
|
|
- InboundController.convertInboundDtoInbound(inbound);
|
|
|
+ const performance = await this.performanceService.findAircraft(
|
|
|
+ inbound.aircraft.type,
|
|
|
+ inbound.aircraft.wtc,
|
|
|
+ inbound.aircraft.engineCount,
|
|
|
+ );
|
|
|
+ const internalInbound =
|
|
|
+ InboundController.convertInboundDtoInbound(inbound);
|
|
|
|
|
|
- if (known) {
|
|
|
- return this.inboundService.update(internalInbound);
|
|
|
- } else {
|
|
|
+ // TODO calculate remaining route predictions
|
|
|
+
|
|
|
+ return this.inboundService
|
|
|
+ .callsignKnown(inbound.callsign)
|
|
|
+ .then((known) => {
|
|
|
+ if (known) {
|
|
|
+ return this.inboundService.update(internalInbound);
|
|
|
+ }
|
|
|
return this.inboundService.add(internalInbound);
|
|
|
- }
|
|
|
- });
|
|
|
- });
|
|
|
+ });
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
@Delete('/remove')
|