diff --git a/Server/src/models/api.app.ts b/Server/src/models/api.app.ts index bb141a2..151c2f4 100644 --- a/Server/src/models/api.app.ts +++ b/Server/src/models/api.app.ts @@ -25,7 +25,8 @@ export const UpdateRequestApp = z.object({ vehicleId: z.number().int().nonnegative(), // vehicle id of user pos: Position.optional(), // the current position of user speed: z.number().optional(), // Speed in km/h - heading: z.number().optional() // Heading of the vehicle between 0 and 359 + heading: z.number().optional(), // Heading of the vehicle between 0 and 359 + timestamp: z.number().optional() // Timestamp of GPS measurement in milliseconds since epoch }) //================ new diff --git a/Server/src/routes/vehicle.route.ts b/Server/src/routes/vehicle.route.ts index ddc519b..df116d6 100644 --- a/Server/src/routes/vehicle.route.ts +++ b/Server/src/routes/vehicle.route.ts @@ -79,9 +79,11 @@ export class VehicleRoute { if ( vehiclePayload.pos !== undefined && vehiclePayload.heading !== undefined && - vehiclePayload.speed !== undefined + vehiclePayload.speed !== undefined && + vehiclePayload.timestamp !== undefined ) { - await VehicleService.appendLog(userVehicle.uid, vehiclePayload.pos, vehiclePayload.heading, vehiclePayload.speed) + await VehicleService.appendLog(userVehicle.uid, vehiclePayload.pos, vehiclePayload.heading, vehiclePayload.speed, + new Date(vehiclePayload.timestamp)) } const userVehicleData = await VehicleService.getVehicleData(userVehicle) diff --git a/Server/src/services/vehicle.service.ts b/Server/src/services/vehicle.service.ts index 58d9aa9..3adcfab 100644 --- a/Server/src/services/vehicle.service.ts +++ b/Server/src/services/vehicle.service.ts @@ -33,11 +33,32 @@ export type VehicleData = { /** Service for vehicle management. */ export default class VehicleService { /** + * Search for vehicles on a track + * @param track `Track` to search on for vehicles + * @param type `VehicleType` to filter the returned vehicles by + * @returns `Vehicle[]` of all vehicles on the given `track` + */ + public static async getAllVehiclesForTrack(track: Track, type?: VehicleType): Promise { + // if no type is given, this is a simple forward + if (type == null) { + return database.vehicles.getAll(track.uid) + } + + // get all vehicles for track and filter by type + const vehicles: Vehicle[] = await database.vehicles.getAll(track.uid) + const filteredVehicles = vehicles.filter(function (vehicle, _index, _vehicles) { + return vehicle.typeId == type.uid + }) + return filteredVehicles + } + + /** * Append log for a given vehicle * @param vehicleId vehicle id to append the log for * @param position position of the vehicle * @param heading heading of the vehicle * @param speed speed of the vehicle + * @param timestamp timestamp of the gps position * @returns appended log if successful * @throws PrismaError, if appending log in the database was not possible */ @@ -45,10 +66,11 @@ export default class VehicleService { vehicleId: number, position: z.infer, heading: number, - speed: number + speed: number, + timestamp: Date ): Promise { return await database.logs.save({ - timestamp: new Date(), + timestamp, vehicleId, position: [position.lng, position.lat], heading, @@ -56,26 +78,6 @@ export default class VehicleService { }) } - /** - * Search for vehicles on a track - * @param track `Track` to search on for vehicles - * @param type `VehicleType` to filter the returned vehicles by - * @returns `Vehicle[]` of all vehicles on the given `track` - */ - public static async getAllVehiclesForTrack(track: Track, type?: VehicleType): Promise { - // if no type is given, this is a simple forward - if (type == null) { - return database.vehicles.getAll(track.uid) - } - - // get all vehicles for track and filter by type - const vehicles: Vehicle[] = await database.vehicles.getAll(track.uid) - const filteredVehicles = vehicles.filter(function (vehicle, _index, _vehicles) { - return vehicle.typeId == type.uid - }) - return filteredVehicles - } - /** * Compute all data (e.g. position, speed and heading) for a given vehicle * @param vehicle `Vehicle` to compute data for