// Finds PIS Codes using DB Lookups const db = require('../services/dbAccess.services'); const log = require('../utils/log.utils'); const clean = require('../utils/sanitizer.utils'); async function findPisByOrigDest(start,end) { log.out(`pisServices.findPisByOrigDest: Searching for PIS for Orig: ${start}, Dest: ${end}`, 'dbug'); const firstCrs = clean.cleanApiEndpointTxt(start.toLowerCase()); const lastCrs = clean.cleanApiEndpointTxt(end.toLowerCase()); const query = { stops: { $all: [ { $elemMatch: { $eq: firstCrs } }, { $elemMatch: { $eq: lastCrs } } ] }, $expr: { $and: [ { $eq: [{ $arrayElemAt: [ '$stops', -1 ] }, lastCrs] }, { $eq: [{ $arrayElemAt: [ '$stops', 0 ] }, firstCrs] } ] } }; //const oldQuery = {$and:[{$expr:{$eq:[{$first:"$stops"},firstCrs]}},{$expr:{$eq:[{$last:"$stops"},lastCrs]}}]} const search = db.query('pis', query); return await search; } async function findPisByCode(code) { log.out(`pisServices.findPisByCode: Searching for PIS code: ${code}`, 'dbug'); const cleanCode = clean.removeNonNumeric(code); const query = { 'code': parseInt(cleanCode) }; const search = db.query('pis', query); return await search; } async function findRandom() { log.out('pisServices.findRandom: Finding five random PIS Codes', 'dbug'); const query = { // Doesn't work, need aggregation $sample: { size: 5 } }; const results = db.query('pis', query); return results; } // Hopefully at some point, I will also be able to implement a find PIS code by headcode option. module.exports = { findPisByOrigDest, findPisByCode, findRandom };