backend/src/utils/translators/ldb/staffStation.ts
Fred Boniface 1c0081b570 Add - but not implement - calculateLength()
Signed-off-by: Fred Boniface <fred@fjla.uk>
2023-08-04 00:31:55 +01:00

120 lines
3.9 KiB
TypeScript

import type { StaffLdb, NrccMessage, TrainServices,
ServiceLocation } from '@owlboard/ts-types';
import { tz } from 'moment-timezone';
import { removeNewlineAndPTag } from '../../newSanitizer';
/// I do not yet have a type defined for any of the input object
export function transform(input: any): StaffLdb | null {
const data = input.GetBoardResult
let output: StaffLdb
try {
output = {
generatedAt: transformDateTime(data?.generatedAt) || new Date(),
locationName: data?.locationName || "Not Found",
stationManagerCode: data?.stationManagerCode || "UK",
nrccMessages: transformNrcc(data?.nrccMessages) || undefined,
trainServices: transformTrainServices(data?.trainServices) || undefined,
busServices: transformTrainServices(data?.busServices) || undefined,
ferryServices: transformTrainServices(data?.ferryServices) || undefined
}
return output
} catch (err) {
console.log('Unable to parse data, assuming no data: ' + err)
}
return null
}
function transformDateTime(input: string): Date {
console.debug(`staffStation.transformDateTime Input: ${input}`)
return new Date(input)
}
function transformNrcc(input: any): NrccMessage[] {
console.debug(`staffStations.transformNrcc: Running`)
let output: NrccMessage[] = []
let messages = input
if (!Array.isArray(input?.message)) {
messages = [input?.message]
}
for (const item of messages) {
let message: NrccMessage = {
severity: item?.severity,
xhtmlMessage: removeNewlineAndPTag(item?.xhtmlMessage)
}
output.push(message)
}
return output
}
function transformTrainServices(input: any): TrainServices[] {
console.debug(`staffStation.transformTrainServices running`)
let services: any = input?.service
let output: TrainServices[] = []
if (services === undefined) {
return output
}
if (!Array.isArray(input.service)) {
services = [input.service]
}
for (const service of services) {
const trainService: TrainServices = {
rid: service?.rid,
uid: service?.uid,
trainid: service?.trainid,
operatorCode: service?.operatorCode || 'UK',
platform: service?.platform || '-',
platformIsHidden: service?.platformIsHidden,
serviceIsSupressed: service?.serviceIsSupressed,
origin: transformLocation(service?.origin),
destination: transformLocation(service?.destination),
length: calculateLength(service),
isCancelled: service?.isCancelled,
cancelReason: service?.cancelReason,
delayReason: service?.delayReason,
arrivalType: service?.arrivalType,
departureType: service?.departureType,
sta: transformUnspecifiedDateTime(service?.sta),
eta: transformUnspecifiedDateTime(service?.eta),
ata: transformUnspecifiedDateTime(service?.ata),
std: transformUnspecifiedDateTime(service?.std),
etd: transformUnspecifiedDateTime(service?.etd),
atd: transformUnspecifiedDateTime(service?.atd),
}
Object.keys(trainService).forEach(key => trainService[key] === undefined && delete trainService[key]);
output.push(trainService)
}
return output
}
function transformLocation(input: any): ServiceLocation[] {
console.debug(`staffStation.transformLocation running`)
let output: ServiceLocation[] = []
let locations: any[] = input.location
if (!Array.isArray(input.location)) {
locations = [input.location]
}
for (const item of locations) {
const location: ServiceLocation = {
tiploc: item?.tiploc,
name: item?.locationName
}
output.push(location)
}
return output
}
function calculateLength(input: TrainServices): number | undefined {
console.log(input);
return undefined
}
function transformUnspecifiedDateTime(input: string): Date | undefined {
console.debug(`staffStation.transformUnspecifiedDateTime running`)
if (!input) {
return undefined
}
const date = tz(input, "Europe/London");
return date.toDate()
}