diff --git a/.eslintrc.js b/.eslintrc.cjs similarity index 100% rename from .eslintrc.js rename to .eslintrc.cjs diff --git a/data_providers/tgprovider.js b/data_providers/tgprovider.js index 54e1fad..ac530c1 100644 --- a/data_providers/tgprovider.js +++ b/data_providers/tgprovider.js @@ -59,23 +59,51 @@ class TGProvider { } } - parseReport(text) { - let number = this.findFirst(text, /Номер: (.*)\n/); - let vin = this.findFirst(text, /VIN: (.*)\n/); - let owner = this.findFirst(text, /Владелец: (.*)\n/); - let year = this.findFirst(text, /Год: (.*)\n/); - let color = this.findFirst(text, /Цвет: (.*)\n/); - let sts = this.findFirst(text, /СТС: (.*)\n/); - + parseBlock(text) { return { - number, - vin, - owner, - year, - color, - sts + name: this.findFirst(text, /📋 (.*)\n/), + vin: this.findFirst(text, /VIN: (.*)\n/), + plateNumber: this.findFirst(text, /Гос номер: (.*)\n/), + year: this.findFirst(text, /Год: (.*)\n/), + color: this.findFirst(text, /Цвет: (.*)\n/), + sts: this.findFirst(text, /СТС: (.*)\n/), + stsDate: this.findFirst(text, /Дата СТС: (.*)\n/), + owner: this.findFirst(text, /Владелец: (.*)\n/), + kbm: this.findFirst(text, /КБМ: (.*)\n/), + usageRegion: this.findFirst(text, /Регион: (.*)\n/), + status: this.findFirst(text, /Статус: (.*)\n/), + insurant: this.findFirst(text, /Страхователь: (.*)\n/), + birthday: this.findFirst(text, /День рождения: (.*)\n/), + number: this.findFirst(text, /Полис: (.*)\n/), }; } + + parseReport(text) { + + let result = text.match(/📋((?:.|\n)*?)^\n/gmu); + if(result && result.length > 0) { + + let generalInfo = null; + let insurance = null; + + for(let item of result) { + let block = Utils.removeNullFields(this.parseBlock(item)); + if(block.sts) { + generalInfo = block; + } else if(block.number) { + insurance = block; + insurance.date = Math.floor(Date.now() / 1000); + insurance.restrictions = ''; + } + } + + if(generalInfo || insurance) { + return { generalInfo, insurance }; + } + } + + return null; + } } export { TGProvider }; diff --git a/routes/vehicles.js b/routes/vehicles.js index f824343..6302a48 100644 --- a/routes/vehicles.js +++ b/routes/vehicles.js @@ -296,22 +296,38 @@ router.post('/checkGbTg', async (req, res) => { let report = await tgProvider.getReport(number); await tgProvider.close(); + if(!report.generalInfo && !report.insurance) { + res.send(makeError('No data found')); + return; + } + let collection = req.db.collection('vehicles'); let vehicle = await collection.findOne({ number }); if(vehicle) { let vinRegex = RegExp(vehicle.vin1.replace(/\*/g, '.')); - //let stsRegex = RegExp(vehicle.sts.replace(/\*/g, '.')); - if(report.vin.match(vinRegex) /*&& report.sts.match(stsRegex)*/) { + if(report.generalInfo.vin.match(vinRegex)) { let updatedFields = { - vin1: report.vin, - color: report.color, - sts: report.sts, + vin1: report.generalInfo.vin, + color: report.generalInfo.color, + sts: report.generalInfo.sts, updatedDate: Date.now() + }; + + console.log('insurance: ', report.insurance); + if(report.insurance) { + let osagoFound = vehicle.osagoContracts?.some(elem => { + return elem.number = report.insurance.number; + }) ?? false; + console.log('osago found: ', osagoFound); + if(!osagoFound) { + await collection.updateOne({ number }, { $push: { osagoContracts: report.insurance } }); + } } await collection.updateOne({ number }, { $set: updatedFields }); + vehicle = await collection.findOne({ number }); res.send({ success: true, data: Object.assign(vehicle, updatedFields) }); } else { res.send(makeError('Vehicle doesn\'t match')); diff --git a/utils/utils.js b/utils/utils.js index 32dbcaa..d117690 100644 --- a/utils/utils.js +++ b/utils/utils.js @@ -142,6 +142,10 @@ class Utils { }); return { promise, resolve, reject }; } + + static removeNullFields(obj) { + return Object.fromEntries(Object.entries(obj).filter(([, v]) => v != null)); + } } export default Utils; \ No newline at end of file