76 lines
2.1 KiB
JavaScript
76 lines
2.1 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 ));
|
||
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 };
|
||
}
|
||
|
||
static cyrillicToLatin(str) {
|
||
const cyrillic_to_latin = { 'А': 'A', 'В': 'B', 'Е': 'E', 'К': 'K', 'М': 'M', 'Н': 'H', 'О': 'O', 'Р': 'P', 'С': 'C', 'Т': 'T', 'У': 'Y', 'Х': 'X' }; //{'А':'A', 'К':'K', 'М':'M', 'В':'B', 'С':'C'};
|
||
let regex = new RegExp('[' + Object.keys(cyrillic_to_latin).join('') + ']', 'g');
|
||
return str.replace(regex, letter => cyrillic_to_latin[letter] || letter);
|
||
}
|
||
|
||
static parseDate(dateStr) {
|
||
let dateParams = dateStr.split('.').reverse().map(n => parseInt(n, 10));
|
||
dateParams[1] -= 1;
|
||
let date = (new Date(...dateParams)).getTime();
|
||
return Math.floor(date/1000);
|
||
}
|
||
}
|
||
|
||
module.exports = Utils; |