46 lines
1.7 KiB
JavaScript
46 lines
1.7 KiB
JavaScript
const log = require('../utils/log.utils');
|
|
const db = require('./dbAccess.services');
|
|
const clean = require('../utils/sanitizer.utils');
|
|
const pis = require('../services/pis.services');
|
|
|
|
async function findByHeadcodeToday(headcode) {
|
|
const sanitizedHeadcode = clean.removeNonAlphanumeric(headcode);
|
|
log.out(`trainServiceServices.findByHeadcode: Searching for headcode ${sanitizedHeadcode}`, 'dbug');
|
|
const now = new Date();
|
|
const dayMap = ['su', 'm', 't', 'w', 'th', 'f', 's'];
|
|
const shortDay = dayMap[now.getDay()]; // Fetch short day from map
|
|
const query = {
|
|
headcode: sanitizedHeadcode,
|
|
scheduleStartDate: {$lte: now},
|
|
scheduleEndDate: {$gte: now},
|
|
daysRun: {$in: [shortDay]}
|
|
};
|
|
const queryData = await db.query('timetable', query);
|
|
let trainData = queryData;
|
|
// At this point, the returned objects need sorting to ensure the correct object is returned.
|
|
// C, N, O, P is the order - C being the preferred, then N, then O and finally P.
|
|
let preparedData = [];
|
|
for (const trainService in trainData) {
|
|
// Search for PIS Code for each service
|
|
let tiplocList = await getPublicStops(trainData[trainService]['stops']);
|
|
const pisDetail = await pis.findByTiplocArray(tiplocList);
|
|
trainData[trainService]['pis'] = pisDetail?.[0]?.['code'] ?? 'None';
|
|
trainData[trainService]['publicStops'] = tiplocList;
|
|
preparedData.push(trainData[trainService]);
|
|
}
|
|
return preparedData;
|
|
}
|
|
|
|
async function getPublicStops(data) {
|
|
let tiplocList = [];
|
|
for (const publicStop in data) {
|
|
if (data[publicStop]['isPublic']) {
|
|
tiplocList.push(data[publicStop]['tiploc']);
|
|
}
|
|
}
|
|
return tiplocList;
|
|
}
|
|
|
|
module.exports = {
|
|
findByHeadcodeToday,
|
|
}; |