class Utils { static makeVehiclesSearchQuery(queryParams) { const { query, brand, model, color, regions } = queryParams; let numberQuery = Utils.makeNumberQuery(query, regions?.split(',') ?? []); let findQuery = { 'brand.name.normalized': brand, 'model.name.normalized': model, color }; 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 {}; } } } module.exports = Utils;