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) => {
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);

View File

@ -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;