165 lines
4.9 KiB
JavaScript
165 lines
4.9 KiB
JavaScript
// Parse and return an LDB Request
|
|
|
|
const log = require('../utils/logs.utils'); // Log Helper
|
|
const ldb = require('ldbs-json');
|
|
const util = require('../utils/ldb.utils');
|
|
const san = require('../utils/sanitizer.utils');
|
|
const db = require('../services/dbAccess.services');
|
|
|
|
import { transform as staffStationTransform } from '../utils/translators/ldb/staffStation';
|
|
|
|
const ldbKey = process.env.OWL_LDB_KEY;
|
|
const ldbsvKey = process.env.OWL_LDB_SVKEY;
|
|
|
|
async function get(id, staff=false){
|
|
const cleanId = san.cleanApiEndpointTxt(id);
|
|
const obj = await util.checkCrs(cleanId);
|
|
try {
|
|
const crs = obj[0]['3ALPHA'];
|
|
log.out(`ldbService.get: Determined CRS for lookup to be: ${crs}`, 'info');
|
|
if (staff) {
|
|
const data = arrDepBoardStaff(crs);
|
|
db.increment('ldbsvws');
|
|
return await data;
|
|
} else {
|
|
const data = arrDepBoard(crs);
|
|
db.increment('ldbws');
|
|
return await data;
|
|
}
|
|
} catch (err) {
|
|
log.out(`ldbService.get: Error, Unable to find CRS: ${err}`, 'info');
|
|
return {
|
|
ERROR:'NOT_FOUND',
|
|
description:'The entered station was not found.'};
|
|
}
|
|
}
|
|
|
|
async function arrDepBoard(CRS){
|
|
log.out(`ldbService.arrDepBoard: Trying to fetch board for ${CRS}`, 'info');
|
|
try {
|
|
const options = {
|
|
numRows: 10,
|
|
crs: CRS.toUpperCase()
|
|
};
|
|
const api = new ldb(ldbKey,false);
|
|
let d = await api.call('GetArrDepBoardWithDetails', options, false, false);
|
|
return await util.cleanData(d);
|
|
} catch (err) {
|
|
log.out(`ldbService.arrDepBoard: Lookup Failed for: ${CRS}`, 'warn');
|
|
return {
|
|
GetStationBoardResult: 'not available',
|
|
Reason: `The CRS code ${CRS} is not valid`
|
|
};
|
|
}
|
|
}
|
|
|
|
async function arrDepBoardStaff(CRS) {
|
|
log.out(`ldbService.arrDepBoardStaff: Try to fetch board for ${CRS}`, 'dbug');
|
|
try {
|
|
const options = {
|
|
numRows: 40,
|
|
crs: CRS.toUpperCase(),
|
|
getNonPassengerServices: true,
|
|
time: await getDateTimeString(new Date),
|
|
timeWindow: 120,
|
|
services: 'PBS'
|
|
};
|
|
const api = new ldb(ldbsvKey,true);
|
|
console.time(`Fetch Staff LDB for ${CRS.toUpperCase()}`);
|
|
const result = await api.call('GetArrivalDepartureBoardByCRS',options,false,false);
|
|
console.timeEnd(`Fetch Staff LDB for ${CRS.toUpperCase()}`)
|
|
try {
|
|
const _staffLdb = staffStationTransform(result)
|
|
console.log("Transformation Test Successful")
|
|
console.log(JSON.stringify(_staffLdb))
|
|
} catch (err) {
|
|
console.log("Transformation Test Failed: " + err)
|
|
}
|
|
return result
|
|
} catch (err) {
|
|
log.out(`ldbService.arrDepBoardStaff: Lookup Failed for: ${CRS}`, 'warn');
|
|
log.out(`ldbService.arrDepBoardStaff: ${err}`);
|
|
return {
|
|
GetStationBoardResult: 'not available',
|
|
Reason: `The CRS code ${CRS} is not valid`
|
|
};
|
|
}
|
|
}
|
|
|
|
async function getServiceByRID(rid) {
|
|
log.out(`ldbService.getServiceByRID: Finding RID: ${rid}`, 'dbug');
|
|
try {
|
|
const options = {
|
|
rid: String(rid)
|
|
};
|
|
const api = new ldb(ldbsvKey,true);
|
|
return await api.call('GetServiceDetailsByRID', options,false,false);
|
|
} catch (err) {
|
|
log.out(`ldbService.queryService: ${err}`, 'EROR');
|
|
}
|
|
}
|
|
|
|
async function getServicesByOther(id) {
|
|
log.out(`ldbService.getServiceByOther: Finding services: ${id}`, 'dbug');
|
|
try {
|
|
const options = {
|
|
serviceID: id,
|
|
sdd: getDateString(new Date)
|
|
};
|
|
const api = new ldb(ldbsvKey,true);
|
|
return await api.call('QueryServices', options, false, false);
|
|
} catch (err) {
|
|
log.out(`ldbService.getServiceByOther: Error: ${err}`, 'EROR');
|
|
return false;
|
|
}
|
|
}
|
|
|
|
async function getReasonCodeList() {
|
|
log.out('ldbService.getReasonCodeList: Fetching reason code list', 'eror');
|
|
try {
|
|
const dbFilter = {};
|
|
return await db.query('reasonCodes', dbFilter, false);
|
|
} catch (err) {
|
|
log.out(`ldbService.getReasonCodeList: ${err}`, 'eror');
|
|
}
|
|
}
|
|
|
|
async function getReasonCode(code) {
|
|
log.out(`ldbService.getReasonCode: Fetching reason code ${code}`, 'dbug');
|
|
try {
|
|
const dbFilter = {
|
|
code: code
|
|
};
|
|
return await db.query('reasonCodes', dbFilter, false);
|
|
} catch (err) {
|
|
log.out(`ldbService.getReasonCode: ${err}`, 'eror');
|
|
}
|
|
}
|
|
|
|
async function getDateTimeString(date) {
|
|
|
|
const year = date.getFullYear(),
|
|
month = String(date.getMonth() + 1).padStart(2,'0'),
|
|
day = String(date.getDate()).padStart(2,'0'),
|
|
hour = String(date.getHours()).padStart(2,'0'),
|
|
minute = String(date.getMinutes()).padStart(2,'0'),
|
|
second = String(date.getSeconds()).padStart(2,'0');
|
|
const format = `${year}-${month}-${day}T${hour}:${minute}:${second}`;
|
|
return format;
|
|
}
|
|
|
|
async function getDateString(date) {
|
|
const year = date.getFullYear(),
|
|
month = String(date.getMonth() + 1).padStart(2,'0'),
|
|
day = String(date.getDate()).padStart(2,'0');
|
|
const format = `${year}-${month}-${day}`;
|
|
return format;
|
|
}
|
|
|
|
module.exports = {
|
|
get,
|
|
getServiceByRID,
|
|
getServicesByOther,
|
|
getReasonCodeList,
|
|
getReasonCode
|
|
}; |