Additional filters
This commit is contained in:
parent
f25eb7a19b
commit
bad9a810de
@ -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);
|
||||
|
||||
16
utils.js
16
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;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user