AutoCatBackend/utils.js
2020-09-26 22:08:41 +03:00

64 lines
1.5 KiB
JavaScript

class Utils {
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
};
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 };
}
static makeNumberQuery(number, regions) {
let regionsQuery = null;
if(regions.length > 0) {
regionsQuery = { $or: regions.map(r => { return { number: { $regex: `\\D${r}$` } }; }) };
}
if(number && regionsQuery) {
return { $and: [ { number: { $regex: number } }, regionsQuery ] };
} else if(number) {
return { number: { $regex: number } };
} else if(regionsQuery) {
return regionsQuery;
} else {
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;