diff --git a/src/performance/models/performance.model.ts b/src/performance/models/performance.model.ts index fab07e6..f0fa517 100644 --- a/src/performance/models/performance.model.ts +++ b/src/performance/models/performance.model.ts @@ -1,24 +1,42 @@ import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose'; import { Document } from 'mongoose'; -import { PerformanceEntry } from './performanceentry.model'; +import { + PerformanceEntry, + PerformanceEntrySchema, +} from './performanceentry.model'; export type PerformanceDocument = Performance & Document; @Schema() export class Performance { - @Prop({ required: true }) + @Prop({ + type: String, + required: true, + }) icaoCode: string; - @Prop({ required: true, type: PerformanceEntry }) + @Prop({ + required: true, + type: PerformanceEntrySchema, + }) aboveFL240: PerformanceEntry; - @Prop({ required: true, type: PerformanceEntry }) + @Prop({ + required: true, + type: PerformanceEntrySchema, + }) aboveFL100: PerformanceEntry; - @Prop({ required: true, type: PerformanceEntry }) + @Prop({ + required: true, + type: PerformanceEntrySchema, + }) belowFL100: PerformanceEntry; - @Prop({ required: true }) + @Prop({ + required: true, + type: Number, + }) minimalApproachSpeed: number; } diff --git a/src/performance/models/performanceentry.model.ts b/src/performance/models/performanceentry.model.ts index 6f1b9a0..12a3d6a 100644 --- a/src/performance/models/performanceentry.model.ts +++ b/src/performance/models/performanceentry.model.ts @@ -5,10 +5,16 @@ export type PerformanceEntryDocument = PerformanceEntry & Document; @Schema() export class PerformanceEntry { - @Prop({ required: true }) + @Prop({ + required: true, + type: Number, + }) speed: number; - @Prop({ required: true }) + @Prop({ + required: true, + type: Number, + }) rateOfDescend: number; } diff --git a/src/performance/performance.service.ts b/src/performance/performance.service.ts index 628f2cf..0ee3b67 100644 --- a/src/performance/performance.service.ts +++ b/src/performance/performance.service.ts @@ -21,26 +21,41 @@ export class PerformanceService { private async updatePerformanceData( performanceData: Record, version: SemanticVersionDto, - ): Promise { + ): Promise { return this.performanceModel.deleteMany({}).then(async () => { + const invalidEntries: string[] = []; + for (const key in performanceData) { if (key !== 'FILEINFO') { - await this.performanceModel.create({ - icaoCode: key, - aboveFL240: { - speed: performanceData[key]['speedabovefl240'], - rateOfDescend: performanceData[key]['rodabovefl240'], - }, - aboveFL100: { - speed: performanceData[key]['speedabovefl100'], - rateOfDescend: performanceData[key]['rodabovefl100'], - }, - belowFL100: { - speed: performanceData[key]['speedbelowfl100'], - rateOfDescend: performanceData[key]['rodbelowfl100'], - }, - minimalApproachSpeed: performanceData[key]['speedapproach'], - }); + const validAircraft = + performanceData[key]['speedabovefl240'] !== undefined && + performanceData[key]['rodabovefl240'] !== undefined && + performanceData[key]['speedabovefl100'] !== undefined && + performanceData[key]['rodabovefl100'] !== undefined && + performanceData[key]['speedbelowfl100'] !== undefined && + performanceData[key]['rodbelowfl100'] !== undefined && + performanceData[key]['speedapproach'] !== undefined; + + if (!validAircraft) { + invalidEntries.push(key); + } else { + await this.performanceModel.create({ + icaoCode: key, + aboveFL240: { + speed: performanceData[key]['speedabovefl240'], + rateOfDescend: performanceData[key]['rodabovefl240'], + }, + aboveFL100: { + speed: performanceData[key]['speedabovefl100'], + rateOfDescend: performanceData[key]['rodabovefl100'], + }, + belowFL100: { + speed: performanceData[key]['speedbelowfl100'], + rateOfDescend: performanceData[key]['rodbelowfl100'], + }, + minimalApproachSpeed: performanceData[key]['speedapproach'], + }); + } } } @@ -50,15 +65,15 @@ export class PerformanceService { version, ); - return true; + return invalidEntries; }); } - private async validateAndUpdatePerformanceData(): Promise { + private async validateAndUpdatePerformanceData(): Promise { // read the performance file and validate the version length const data = PerformanceService.readPerformanceFile(); const versionParts = (data['FILEINFO']['version'] as string).split('.'); - if (versionParts.length !== 3) return false; + if (versionParts.length !== 3) return []; // create the fileversion const fileversion: SemanticVersionDto = { @@ -84,7 +99,7 @@ export class PerformanceService { return this.updatePerformanceData(data, fileversion); } - return false; + return []; }) .catch(() => this.updatePerformanceData(data, fileversion)); } diff --git a/src/versioning/versioning.model.ts b/src/versioning/models/versioning.model.ts similarity index 59% rename from src/versioning/versioning.model.ts rename to src/versioning/models/versioning.model.ts index 5ab9925..fe46bab 100644 --- a/src/versioning/versioning.model.ts +++ b/src/versioning/models/versioning.model.ts @@ -5,19 +5,34 @@ export type VersioningDocument = Versioning & Document; @Schema() export class Versioning { - @Prop({ required: true }) + @Prop({ + required: true, + type: String, + }) componentName: string; - @Prop({ required: true }) + @Prop({ + required: true, + type: String, + }) createdAt: string; - @Prop({ required: true }) + @Prop({ + required: true, + type: Number, + }) versionMain: number; - @Prop({ required: true }) + @Prop({ + required: true, + type: Number, + }) versionMajor: number; - @Prop({ required: true }) + @Prop({ + required: true, + type: Number, + }) versionMinor: number; } diff --git a/src/versioning/versioning.module.ts b/src/versioning/versioning.module.ts index 672f126..77be04a 100644 --- a/src/versioning/versioning.module.ts +++ b/src/versioning/versioning.module.ts @@ -1,6 +1,6 @@ import { Module } from '@nestjs/common'; import { MongooseModule } from '@nestjs/mongoose'; -import { VersioningSchema } from './versioning.model'; +import { VersioningSchema } from './models/versioning.model'; import { VersioningService } from './versioning.service'; @Module({ diff --git a/src/versioning/versioning.service.ts b/src/versioning/versioning.service.ts index febab21..0a1a2c7 100644 --- a/src/versioning/versioning.service.ts +++ b/src/versioning/versioning.service.ts @@ -2,7 +2,7 @@ import { Injectable } from '@nestjs/common'; import { InjectModel } from '@nestjs/mongoose'; import { Model } from 'mongoose'; import { SemanticVersionDto } from './dto/semanticversion.dto'; -import { Versioning, VersioningDocument } from './versioning.model'; +import { Versioning, VersioningDocument } from './models/versioning.model'; @Injectable() export class VersioningService {