define a generic folder

This commit is contained in:
Sven Czarnian
2022-10-23 16:30:25 +02:00
parent ad843e4706
commit 7a41dd0fb2
12 changed files with 47 additions and 37 deletions

View File

@@ -0,0 +1,11 @@
import { CoordinateDto } from '../dto/coordinate.dto';
import { Coordinate } from '../models/coordinate.model';
export class CoordinateConverter {
static convert<T>(coordinate: Coordinate | CoordinateDto): T {
return {
latitude: coordinate.latitude,
longitude: coordinate.longitude,
} as T;
}
}

View File

@@ -0,0 +1,4 @@
import { CoordinateConverter } from './coordinate';
import { WaypointConverter } from './waypoint';
export { CoordinateConverter, WaypointConverter };

View File

@@ -0,0 +1,20 @@
import { WaypointDto } from '../dto/waypoint.dto';
import { Waypoint } from '../models/waypoint.model';
import { CoordinateConverter } from './coordinate';
export class WaypointConverter {
static convert<T, C>(waypoint: Waypoint | WaypointDto): T {
return {
identifier: waypoint.identifier,
coordinate: CoordinateConverter.convert<C>(waypoint.coordinate),
} as T;
}
static convertList<T, E>(waypoints: Waypoint[] | WaypointDto[]): T[] {
const retval: T[] = [];
waypoints.forEach((waypoint) =>
retval.push(WaypointConverter.convert<T, E>(waypoint)),
);
return retval;
}
}

View File

@@ -0,0 +1,20 @@
import { IsNotEmpty, IsLatitude, IsLongitude } from 'class-validator';
import { ApiProperty } from '@nestjs/swagger';
export class CoordinateDto {
@IsNotEmpty()
@ApiProperty({
description: 'The latitudinal component',
example: 42.8402,
})
@IsLatitude()
latitude: number;
@IsNotEmpty()
@ApiProperty({
description: 'The longitudinal component',
example: 18.8402,
})
@IsLongitude()
longitude: number;
}

View File

@@ -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;
}

View File

@@ -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);

View File

@@ -0,0 +1,22 @@
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document } from 'mongoose';
import { Coordinate, CoordinateSchema } from './coordinate.model';
export type WaypointDocument = Waypoint & Document;
@Schema()
export class Waypoint {
@Prop({
required: true,
type: String,
})
identifier: string;
@Prop({
required: true,
type: CoordinateSchema,
})
coordinate: Coordinate;
}
export const WaypointSchema = SchemaFactory.createForClass(Waypoint);