Continued work on filtering train service data
Signed-off-by: Fred Boniface <fred@fjla.uk>
This commit is contained in:
parent
dc583a4632
commit
c4b3be9086
@ -16,6 +16,7 @@ async function findByHeadcodeToday(headcode) {
|
|||||||
daysRun: {$in: [shortDay]}
|
daysRun: {$in: [shortDay]}
|
||||||
};
|
};
|
||||||
const queryData = await db.query('timetable', query);
|
const queryData = await db.query('timetable', query);
|
||||||
|
console.log(JSON.stringify(queryData));
|
||||||
let trainData = await parseTrains(queryData);
|
let trainData = await parseTrains(queryData);
|
||||||
let preparedData = [];
|
let preparedData = [];
|
||||||
for (const trainService in trainData) {
|
for (const trainService in trainData) {
|
||||||
@ -50,10 +51,11 @@ async function getPublicStops(data) {
|
|||||||
|
|
||||||
async function parseTrains(data) { // Takes a single days data from a headcode query and returns only relevant services
|
async function parseTrains(data) { // Takes a single days data from a headcode query and returns only relevant services
|
||||||
let trainUids = [];
|
let trainUids = [];
|
||||||
for (const i in data) {
|
for (const i of data) {
|
||||||
const trainUid = data[i]['trainUid'];
|
console.log(i);
|
||||||
|
const trainUid = i['trainUid'];
|
||||||
if (!trainUids.includes(trainUid)) {
|
if (!trainUids.includes(trainUid)) {
|
||||||
data.push(trainUid);
|
trainUids.push(trainUid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let parsedData = [];
|
let parsedData = [];
|
||||||
@ -71,108 +73,51 @@ async function findByTrainUid(uid, date = new Date()) { // Date defaults to toda
|
|||||||
scheduleEndDate: {$gte: date}
|
scheduleEndDate: {$gte: date}
|
||||||
};
|
};
|
||||||
const queryData = await db.query('timetable', query);
|
const queryData = await db.query('timetable', query);
|
||||||
let c = [];
|
|
||||||
let n = [];
|
|
||||||
let o = [];
|
|
||||||
let p = [];
|
|
||||||
for (const serviceDetail of queryData) {
|
|
||||||
const trainUid = serviceDetail['trainUid'];
|
|
||||||
switch (serviceDetail['stpIndicator']) { // This won't work without further post procesing
|
|
||||||
case 'C':
|
|
||||||
c.push(trainUid);
|
|
||||||
break;
|
|
||||||
case 'N':
|
|
||||||
if (!c.includes(trainUid)) {
|
|
||||||
n.push(trainUid);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 'O':
|
|
||||||
if (!c.includes(trainUid) && !n.includes(trainUid)) {
|
|
||||||
o.push(trainUid);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 'P':
|
|
||||||
if (!c.includes(trainUid) && !n.includes(trainUid) && !o.includes(trainUid)) {
|
|
||||||
p.push(trainUid);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Thoughts:
|
|
||||||
async function findByTrainUid(uid, date = new Date()) {
|
|
||||||
const query = {
|
|
||||||
trainUid: uid,
|
|
||||||
scheduleStartDate: { $lte: date },
|
|
||||||
scheduleEndDate: { $gte: date }
|
|
||||||
};
|
|
||||||
|
|
||||||
const queryData = await db.query('timetable', query);
|
|
||||||
|
|
||||||
if (queryData.length === 0) {
|
if (queryData.length === 0) {
|
||||||
// Handle empty queryData
|
return [];
|
||||||
return {
|
|
||||||
c: [],
|
|
||||||
n: [],
|
|
||||||
o: [],
|
|
||||||
p: []
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
let stpIndicators = {};
|
||||||
const trainUidSet = new Set();
|
|
||||||
const trainUidStatus = {}; // Track the status of each trainUid
|
|
||||||
|
|
||||||
for (const serviceDetail of queryData) {
|
for (const serviceDetail of queryData) {
|
||||||
const trainUid = serviceDetail['trainUid'];
|
const trainUid = serviceDetail['trainUid'];
|
||||||
const stpIndicator = serviceDetail['stpIndicator'];
|
const stpIndicator = serviceDetail['stpIndicator'];
|
||||||
|
if (!stpIndicators[trainUid]) {
|
||||||
if (!trainUidStatus[trainUid]) {
|
stpIndicators[trainUid] = {
|
||||||
trainUidStatus[trainUid] = {
|
hasC: false,
|
||||||
hasO: false,
|
|
||||||
hasN: false,
|
hasN: false,
|
||||||
hasC: false
|
hasO: false,
|
||||||
|
hasP: false
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
if (stpIndicator === 'C') {
|
||||||
|
stpIndicators[trainUid].hasC = true;
|
||||||
|
}
|
||||||
|
if (stpIndicator === 'N') {
|
||||||
|
stpIndicators[trainUid].hasN = true;
|
||||||
|
}
|
||||||
if (stpIndicator === 'O') {
|
if (stpIndicator === 'O') {
|
||||||
trainUidStatus[trainUid].hasO = true;
|
stpIndicators[trainUid].hasO = true;
|
||||||
} else if (stpIndicator === 'N') {
|
|
||||||
trainUidStatus[trainUid].hasN = true;
|
|
||||||
} else if (stpIndicator === 'C') {
|
|
||||||
trainUidStatus[trainUid].hasC = true;
|
|
||||||
}
|
}
|
||||||
|
if (stpIndicator === 'P') {
|
||||||
trainUidSet.add(trainUid);
|
stpIndicators[trainUid].hasP = true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
const c = [];
|
console.log(JSON.stringify(stpIndicators));
|
||||||
const n = [];
|
let preparedData = [];
|
||||||
const o = [];
|
|
||||||
const p = [];
|
|
||||||
|
|
||||||
for (const serviceDetail of queryData) {
|
for (const serviceDetail of queryData) {
|
||||||
const trainUid = serviceDetail['trainUid'];
|
const trainUid = serviceDetail['trainUid'];
|
||||||
|
const thisStpIndicators = stpIndicators[trainUid];
|
||||||
const stpIndicator = serviceDetail['stpIndicator'];
|
const stpIndicator = serviceDetail['stpIndicator'];
|
||||||
|
|
||||||
if (stpIndicator === 'C') {
|
if (stpIndicator === 'C') {
|
||||||
continue; // Skip 'C' entries
|
continue;
|
||||||
}
|
}
|
||||||
|
if (stpIndicator === 'N' && !thisStpIndicators.hasC) {
|
||||||
if (stpIndicator === 'N' && !trainUidStatus[trainUid].hasC) {
|
preparedData.push(serviceDetail);
|
||||||
n.push(trainUid);
|
} else if (stpIndicator === 'O' && !thisStpIndicators.hasC && !thisStpIndicators.hasN) {
|
||||||
} else if (stpIndicator === 'O' && !trainUidStatus[trainUid].hasN && !trainUidStatus[trainUid].hasC) {
|
preparedData.push(serviceDetail);
|
||||||
o.push(trainUid);
|
} else if (stpIndicator === 'P' && !thisStpIndicators.hasC && !thisStpIndicators.hasN && !thisStpIndicators.hasO) {
|
||||||
} else if (stpIndicator === 'P' && !trainUidStatus[trainUid].hasN && !trainUidStatus[trainUid].hasO && !trainUidStatus[trainUid].hasC) {
|
preparedData.push(serviceDetail);
|
||||||
p.push(trainUid);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return preparedData;
|
||||||
return {
|
|
||||||
c,
|
|
||||||
n,
|
|
||||||
o,
|
|
||||||
p
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
*/
|
|
Loading…
Reference in New Issue
Block a user