Filtering by regions

This commit is contained in:
Selim Mustafaev 2020-06-20 14:30:02 +03:00
parent c493af392c
commit 55e715dbd5
2 changed files with 116 additions and 4 deletions

View File

@ -166,6 +166,95 @@ const typeOperation = {
'98':'учет отмены приостановления действия права управления ТС по постановлению судебного пристава-исполнителя о временном ограничении на пользование должников специальным правом'
};
const regions = [
{ name: 'Республика Адыгея', codes: [1]},
{ name: 'Республика Башкортостан', codes: [2, 102, 702]},
{ name: 'Республика Бурятия', codes: [3]},
{ name: 'Республика Алтай', codes: [4]},
{ name: 'Республика Дагестан', codes: [5]},
{ name: 'Республика Ингушетия', codes: [6]},
{ name: 'Кабардино-Балкарская Республика', codes: [7]},
{ name: 'Республика Калмыкия', codes: [8]},
{ name: 'Республика Карачаево-Черкесия', codes: [9]},
{ name: 'Республика Карелия', codes: [10]},
{ name: 'Республика Коми', codes: [11]},
{ name: 'Республика Марий Эл', codes: [12]},
{ name: 'Республика Мордовия', codes: [13, 113]},
{ name: 'Республика Саха (Якутия)', codes: [14]},
{ name: 'Республика Северная Осетия — Алания', codes: [15]},
{ name: 'Республика Татарстан', codes: [16, 116, 716]},
{ name: 'Республика Тыва', codes: [17]},
{ name: 'Удмуртская Республика', codes: [18]},
{ name: 'Республика Хакасия', codes: [19]},
{ name: 'Чувашская Республика', codes: [21, 121]},
{ name: 'Алтайский край', codes: [22, 122]},
{ name: 'Краснодарский край', codes: [23, 93, 123, 193]},
{ name: 'Красноярский край', codes: [24, 84, 88, 124]},
{ name: 'Приморский край', codes: [25, 125]},
{ name: 'Ставропольский край', codes: [26, 126]},
{ name: 'Хабаровский край', codes: [27, 127]},
{ name: 'Амурская область', codes: [28]},
{ name: 'Архангельская область', codes: [29]},
{ name: 'Астраханская область', codes: [30]},
{ name: 'Белгородская область', codes: [31]},
{ name: 'Брянская область', codes: [32]},
{ name: 'Владимирская область', codes: [33]},
{ name: 'Волгоградская область', codes: [34, 134]},
{ name: 'Вологодская область', codes: [35]},
{ name: 'Воронежская область', codes: [36, 136]},
{ name: 'Ивановская область', codes: [37]},
{ name: 'Иркутская область', codes: [38, 85, 138]},
{ name: 'Калининградская область', codes: [39, 91]},
{ name: 'Калужская область', codes: [40]},
{ name: 'Камчатский край', codes: [41]},
{ name: 'Кемеровская область', codes: [42, 142]},
{ name: 'Кировская область', codes: [43]},
{ name: 'Костромская область', codes: [44]},
{ name: 'Курганская область', codes: [45]},
{ name: 'Курская область', codes: [46]},
{ name: 'Ленинградская область', codes: [47, 147]},
{ name: 'Липецкая область', codes: [48]},
{ name: 'Магаданская область', codes: [49]},
{ name: 'Московская область', codes: [50, 90, 150, 190, 750, 790]},
{ name: 'Мурманская область', codes: [51]},
{ name: 'Нижегородская область', codes: [52, 152]},
{ name: 'Новгородская область', codes: [53]},
{ name: 'Новосибирская область', codes: [54, 154]},
{ name: 'Омская область', codes: [55]},
{ name: 'Оренбургская область', codes: [56]},
{ name: 'Орловская область', codes: [57]},
{ name: 'Пензенская область', codes: [58]},
{ name: 'Пермский край', codes: [59, 81, 159]},
{ name: 'Псковская область', codes: [60]},
{ name: 'Ростовская область', codes: [61, 161, 761]},
{ name: 'Рязанская область', codes: [62]},
{ name: 'Самарская область', codes: [63, 163, 763]},
{ name: 'Саратовская область', codes: [64, 164]},
{ name: 'Сахалинская область', codes: [65]},
{ name: 'Свердловская область', codes: [66, 96, 196]},
{ name: 'Смоленская область', codes: [67]},
{ name: 'Тамбовская область', codes: [68]},
{ name: 'Тверская область', codes: [69, 169]},
{ name: 'Томская область', codes: [70]},
{ name: 'Тульская область', codes: [71]},
{ name: 'Тюменская область', codes: [72]},
{ name: 'Ульяновская область', codes: [73, 173]},
{ name: 'Челябинская область', codes: [74, 174]},
{ name: 'Забайкальский край', codes: [75, 80]},
{ name: 'Ярославская область', codes: [76]},
{ name: 'Москва', codes: [77, 97, 99, 177, 199, 197, 777, 797, 799]},
{ name: 'Санкт-Петербург', codes: [78, 98, 178, 198]},
{ name: 'Еврейская автономная область', codes: [79]},
{ name: 'Республика Крым', codes: [82]},
{ name: 'Ненецкий автономный округ', codes: [83]},
{ name: 'Ханты-Мансийский автономный округ Югра', codes: [86, 186]},
{ name: 'Чукотский автономный округ', codes: [87]},
{ name: 'Ямало-Ненецкий автономный округ', codes: [89]},
{ name: 'Севастополь', codes: [92]},
{ name: 'Байконур', codes: [94]},
{ name: 'Чеченская республика', codes: [20, 95]},
];
module.exports = {
organs, ogr, typeAuto, typeOperation
organs, ogr, typeAuto, typeOperation, regions
};

View File

@ -4,9 +4,26 @@ const jwt = require('jsonwebtoken');
const cors = require('cors');
const AvtocodProvider = require('../data_providers/avtocod');
const Vin01Provider = require('../data_providers/vin01');
const { regions } = require('../data_providers/constants');
const makeError = error => ({ success: false, error });
function 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 {};
}
}
router.post('/check', async (req, res) => {
const number = req.body.number.replace(/ /g, '').toUpperCase();
const googleIdToken = req.body.googleIdToken;
@ -55,19 +72,21 @@ router.post('/check', async (req, res) => {
});
router.get('/', async (req, res) => {
const { limit, query, brand, model, color } = req.query;
const { limit, query, brand, model, color, regions } = req.query;
let numberQuery = makeNumberQuery(query, regions?.split(',') ?? []);
let findQuery = {
number: query,
'brand.name.normalized': brand,
'model.name.normalized': model,
color
};
let findQueryFiltered = Object.fromEntries(Object.entries(findQuery).filter(([,val]) => val ));
let finalQuery = { ...findQueryFiltered, ...numberQuery };
try {
let collection = req.db.collection('vehicles');
let vehicles = await collection.find(findQueryFiltered).sort({ addedDate: -1 }).limit(parseInt(limit ?? 0)).toArray();
let vehicles = await collection.find(finalQuery).sort({ addedDate: -1 }).limit(parseInt(limit ?? 0)).toArray();
res.send({ success: true, data: vehicles });
} catch(ex) {
res.send(makeError('Error reading vehicles from DB'));
@ -109,6 +128,10 @@ router.get('/colors', async (req, res) => {
}
});
router.get('/regions', (req, res) => {
res.send({ success: true, data: regions });
});
router.get('/shared_report', cors({ origin: 'https://auto.aliencat.pro' }), async (req, res) => {
try {
let { plateNumber } = jwt.verify(req.query.token, '#TheTruthIsOutThere');