73 lines
3.3 KiB
JavaScript
73 lines
3.3 KiB
JavaScript
// Parse and return an LDB Request
|
|
|
|
// FUNCTIONS
|
|
// post(body, id): Exported:
|
|
// body: [req.body from controller]
|
|
// id : [req.params.id from controller - this is expected to be CRS or TIPLOC]
|
|
|
|
// convertTiploc(TIPLOC) : Exported: Looks up CRS, Name & STANOX for Tiploc
|
|
|
|
const log = require('../utils/log.utils'); // Log Helper
|
|
const ldb = require('ldbs-json')
|
|
const util = require('../utils/ldb.utils')
|
|
const san = require('../utils/sanitizer.utils')
|
|
|
|
const ldbKey = process.env.OWL_LDB_KEY
|
|
const ldbsvKey = process.env.OWL_LDB_SVKEY
|
|
|
|
async function get(body, id){
|
|
var cleanId = san.cleanApiEndpointTxt(id);
|
|
var obj = await util.checkCrs(cleanId);
|
|
try {
|
|
var crs = obj[0]['3ALPHA'];
|
|
log.out(`ldbService.get: Determined CRS for lookup to be: ${crs}`);
|
|
var data = await arrDepBoard(crs);
|
|
} catch (err) {
|
|
log.out(`ldbService.get: Error, Unable to find CRS: ${err}`)
|
|
var data = {ERROR:'NOT_FOUND',description:'The entered station was not found. Please check and try again.'};
|
|
}
|
|
try {
|
|
if (data.GetStationBoardResult.nrccMessages) {
|
|
var msg = await util.cleanMessages(data.GetStationBoardResult.nrccMessages);
|
|
data.GetStationBoardResult.nrccMessages.message = msg;
|
|
}
|
|
if (data.GetStationBoardResult.trainServices && !Array.isArray(data.GetStationBoardResult.trainServices.service)) {
|
|
log.out(`ldbService.get: Transforming trainServices`)
|
|
var services = await util.cleanServices(data.GetStationBoardResult.trainServices.service)
|
|
data.GetStationBoardResult.trainServices.service = services;
|
|
}
|
|
if (data.GetStationBoardResult.ferryServices && !Array.isArray(data.GetStationBoardResult.ferryServices.service)) {
|
|
log.out(`ldbService.get: Transforming ferryServices`)
|
|
var services = await util.cleanServices(data.GetStationBoardResult.ferryServices.service)
|
|
data.GetStationBoardResult.ferryServices.service = services;
|
|
}
|
|
if (data.GetStationBoardResult.busServices && !Array.isArray(data.GetStationBoardResult.busServices.service)) {
|
|
log.out(`ldbService.get: Transforming busServices`)
|
|
var services = await util.cleanServices(data.GetStationBoardResult.busServices.service)
|
|
data.GetStationBoardResult.busServices.service = services;
|
|
}
|
|
} catch (err) {
|
|
log.out(`ldbService.get: Error transforming upstream data: ${err}`)
|
|
}
|
|
return data;
|
|
}
|
|
|
|
async function arrDepBoard(CRS){
|
|
log.out(`ldbService.arrDepBoard: Trying to fetch ArrDep Board for ${CRS}`)
|
|
try {
|
|
var options = {
|
|
numRows: 10,
|
|
crs: CRS.toUpperCase()
|
|
}
|
|
var api = new ldb(ldbKey,false)
|
|
var reply = await api.call("GetArrDepBoardWithDetails",options)
|
|
return reply
|
|
} catch (err) {
|
|
log.out(`ldbService.arrDepBoard: Lookup Failed for: ${CRS}`)
|
|
return {GetStationBoardResult: "not available", Reason: `The CRS code ${CRS} is not valid`, Why: `Sometimes a station will have more than one CRS - for example Filton Abbey Wood has FIT and FAW however schedules are only available when looking up with FIT - this is how the National Rail Enquiries systems work.`};
|
|
}
|
|
};
|
|
|
|
module.exports = {
|
|
get
|
|
} |