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) => {
|
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);
|
||||||
|
|||||||
16
utils.js
16
utils.js
@ -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;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user