Additional filters

This commit is contained in:
Selim Mustafaev 2021-03-24 22:51:55 +03:00
parent f25eb7a19b
commit bad9a810de
2 changed files with 33 additions and 6 deletions

View File

@ -110,28 +110,30 @@ router.post('/check', async (req, res) => {
router.get('/', async (req, res) => { router.get('/', async (req, res) => {
const { email } = req.user; const { email } = req.user;
const { pageToken } = req.query; const { pageToken, sortBy, sortOrder } = req.query;
const pageSize = 50; const pageSize = 50;
try { try {
let finalQuery = Utils.makeVehiclesSearchQuery(req.query, email); let finalQuery = Utils.makeVehiclesSearchQuery(req.query, email);
let collection = req.db.collection('vehicles'); let collection = req.db.collection('vehicles');
let isAscending = sortOrder == 'ascending';
let response = {}; let response = {};
if(!pageToken) { if(!pageToken) {
response.count = await collection.countDocuments(finalQuery); response.count = await collection.countDocuments(finalQuery);
} else { } else {
let compareOperator = isAscending ? '$gt' : '$lt';
let lastVehicle = await collection.findOne({ _id: ObjectId(pageToken) }); let lastVehicle = await collection.findOne({ _id: ObjectId(pageToken) });
finalQuery.$or = [ finalQuery.$or = [
{ updatedDate: { $lt: lastVehicle.updatedDate } }, { [sortBy]: { [compareOperator]: lastVehicle[sortBy] } },
{ {
updatedDate: lastVehicle.updatedDate, [sortBy]: lastVehicle[sortBy],
_id: { $lt: ObjectId(pageToken) } _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) { if(vehicles.length == pageSize) {
response.pageToken = vehicles[vehicles.length - 1]._id; response.pageToken = vehicles[vehicles.length - 1]._id;
} }
@ -199,6 +201,17 @@ router.get('/regions', (req, res) => {
res.send({ success: true, data: regions }); 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) => { router.get('/shared_report', cors({ origin: 'https://auto.aliencat.pro' }), async (req, res) => {
try { try {
let { plateNumber } = jwt.verify(req.query.token, process.env.JWT_SECRET_SHARED_REPORT); let { plateNumber } = jwt.verify(req.query.token, process.env.JWT_SECRET_SHARED_REPORT);

View File

@ -1,6 +1,6 @@
class Utils { class Utils {
static makeVehiclesSearchQuery(queryParams, email) { 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 numberQuery = Utils.makeNumberQuery(query, regions?.split(',') ?? []);
let findQuery = { let findQuery = {
@ -9,6 +9,10 @@ class Utils {
color color
}; };
if(year) {
findQuery.year = parseInt(year);
}
if(fromDate || toDate) { if(fromDate || toDate) {
findQuery.addedDate = {}; findQuery.addedDate = {};
if(fromDate) { 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) {
if(addedBy == 'me') { if(addedBy == 'me') {
findQuery.addedBy = email; findQuery.addedBy = email;