AutoCatBackend/utils/utils.js

90 lines
2.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

class Utils {
static makeVehiclesSearchQuery(queryParams, email) {
const { query, brand, model, color, regions, fromDate, toDate, addedBy, fromDateUpdated, toDateUpdated, year } = queryParams;
let numberQuery = Utils.makeNumberQuery(query, regions?.split(',') ?? []);
let findQuery = {
'brand.name.normalized': brand,
'model.name.normalized': model,
color
};
if(year) {
findQuery.year = parseInt(year);
}
if(fromDate || toDate) {
findQuery.addedDate = {};
if(fromDate) {
findQuery.addedDate.$gte = fromDate*1000;
}
if(toDate) {
findQuery.addedDate.$lte = toDate*1000;
}
}
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;
} 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;