From e2a4c9c30f1a5c432093ee96daaf3edd97cf5f13 Mon Sep 17 00:00:00 2001 From: Selim Mustafaev Date: Sat, 26 Sep 2020 22:08:41 +0300 Subject: [PATCH] New filters - addedBy and date range --- routes/events.js | 4 +++- routes/vehicles.js | 3 ++- utils.js | 37 ++++++++++++++++++++++++++++++++++--- 3 files changed, 39 insertions(+), 5 deletions(-) diff --git a/routes/events.js b/routes/events.js index 39b7a0d..713e398 100644 --- a/routes/events.js +++ b/routes/events.js @@ -71,8 +71,10 @@ router.put('/', async (req, res) => { }); router.get('/', async (req, res) => { + const { email } = req.user; + try { - let finalQuery = Utils.makeVehiclesSearchQuery(req.query); + let finalQuery = Utils.makeVehiclesSearchQuery(req.query, email); let collection = req.db.collection('vehicles'); let vehicles = await collection.find(finalQuery, { number: 1, events: 1 }).toArray(); let events = []; diff --git a/routes/vehicles.js b/routes/vehicles.js index 86a6364..8620b07 100644 --- a/routes/vehicles.js +++ b/routes/vehicles.js @@ -64,9 +64,10 @@ router.post('/check', async (req, res) => { router.get('/', async (req, res) => { const { limit } = req.query; + const { email } = req.user; try { - let finalQuery = Utils.makeVehiclesSearchQuery(req.query); + let finalQuery = Utils.makeVehiclesSearchQuery(req.query, email); let collection = req.db.collection('vehicles'); let vehicles = await collection.find(finalQuery).sort({ addedDate: -1 }).limit(parseInt(limit ?? 0)).toArray(); res.send({ success: true, data: vehicles }); diff --git a/utils.js b/utils.js index 1f8c2b2..15f7a53 100644 --- a/utils.js +++ b/utils.js @@ -1,15 +1,34 @@ class Utils { - static makeVehiclesSearchQuery(queryParams) { - const { query, brand, model, color, regions } = queryParams; + static makeVehiclesSearchQuery(queryParams, email) { + const { query, brand, model, color, regions, fromDate, toDate, addedBy } = queryParams; let numberQuery = Utils.makeNumberQuery(query, regions?.split(',') ?? []); let findQuery = { 'brand.name.normalized': brand, 'model.name.normalized': model, - color + color }; + + if(fromDate || toDate) { + findQuery.addedDate = {}; + if(fromDate) { + findQuery.addedDate.$gte = fromDate*1000; + } + if(toDate) { + findQuery.addedDate.$lte = toDate*1000; + } + } + + if(addedBy) { + if(addedBy == 'me') { + findQuery.addedBy = email; + } else if(addedBy == 'anyoneButMe') { + findQuery.addedBy = { $ne: email }; + } + } let findQueryFiltered = Object.fromEntries(Object.entries(findQuery).filter(([,val]) => val )); + console.dir(findQueryFiltered); return { ...findQueryFiltered, ...numberQuery }; } @@ -28,6 +47,18 @@ class Utils { return {}; } } + + static makeDateQuery(from, to) { + let conditions = []; + if(from) { + conditions.push({ $gte: from }); + } + if(to) { + conditions.push({ $lte: to }); + } + + return { $and: conditions }; + } } module.exports = Utils; \ No newline at end of file