diff --git a/routes/vehicles.js b/routes/vehicles.js index ccc3c8f..0fabf5f 100644 --- a/routes/vehicles.js +++ b/routes/vehicles.js @@ -110,28 +110,30 @@ router.post('/check', async (req, res) => { router.get('/', async (req, res) => { const { email } = req.user; - const { pageToken } = req.query; + const { pageToken, sortBy, sortOrder } = req.query; const pageSize = 50; try { let finalQuery = Utils.makeVehiclesSearchQuery(req.query, email); let collection = req.db.collection('vehicles'); + let isAscending = sortOrder == 'ascending'; let response = {}; if(!pageToken) { response.count = await collection.countDocuments(finalQuery); } else { + let compareOperator = isAscending ? '$gt' : '$lt'; let lastVehicle = await collection.findOne({ _id: ObjectId(pageToken) }); finalQuery.$or = [ - { updatedDate: { $lt: lastVehicle.updatedDate } }, + { [sortBy]: { [compareOperator]: lastVehicle[sortBy] } }, { - updatedDate: lastVehicle.updatedDate, - _id: { $lt: ObjectId(pageToken) } + [sortBy]: lastVehicle[sortBy], + _id: { [compareOperator]: ObjectId(pageToken) } } ]; } - let vehicles = await collection.find(finalQuery).sort({ updatedDate: -1 }).limit(pageSize).toArray(); + let vehicles = await collection.find(finalQuery).sort({ [sortBy]: isAscending ? 1 : -1 }).limit(pageSize).toArray(); if(vehicles.length == pageSize) { response.pageToken = vehicles[vehicles.length - 1]._id; } @@ -199,6 +201,17 @@ router.get('/regions', (req, res) => { res.send({ success: true, data: regions }); }); +router.get('/years', async (req, res) => { + try { + let collection = req.db.collection('vehicles'); + let colors = await collection.distinct('year'); + res.send({ success: true, data: colors.filter(Boolean) }); + } catch(ex) { + res.send(makeError('Error reading vehicle years from DB')); + console.error(ex); + } +}); + router.get('/shared_report', cors({ origin: 'https://auto.aliencat.pro' }), async (req, res) => { try { let { plateNumber } = jwt.verify(req.query.token, process.env.JWT_SECRET_SHARED_REPORT); diff --git a/utils.js b/utils.js index 7f35c0c..916831b 100644 --- a/utils.js +++ b/utils.js @@ -1,6 +1,6 @@ class Utils { static makeVehiclesSearchQuery(queryParams, email) { - const { query, brand, model, color, regions, fromDate, toDate, addedBy } = queryParams; + const { query, brand, model, color, regions, fromDate, toDate, addedBy, fromDateUpdated, toDateUpdated, year } = queryParams; let numberQuery = Utils.makeNumberQuery(query, regions?.split(',') ?? []); let findQuery = { @@ -9,6 +9,10 @@ class Utils { color }; + if(year) { + findQuery.year = parseInt(year); + } + if(fromDate || toDate) { findQuery.addedDate = {}; if(fromDate) { @@ -19,6 +23,16 @@ class Utils { } } + if(fromDateUpdated || toDateUpdated) { + findQuery.updatedDate = {}; + if(fromDateUpdated) { + findQuery.updatedDate.$gte = fromDateUpdated*1000; + } + if(toDateUpdated) { + findQuery.updatedDate.$lte = toDateUpdated*1000; + } + } + if(addedBy) { if(addedBy == 'me') { findQuery.addedBy = email;