Checking registration history as part of GB check
This commit is contained in:
parent
a1cfc3fb9a
commit
e31b0da001
@ -1,5 +1,6 @@
|
|||||||
import { TGClient } from './tgclient.js';
|
import { TGClient } from './tgclient.js';
|
||||||
import Utils from '../utils/utils.js';
|
import Utils from '../utils/utils.js';
|
||||||
|
import Vin01Provider from './vin01.js';
|
||||||
|
|
||||||
class TGProvider {
|
class TGProvider {
|
||||||
|
|
||||||
@ -43,7 +44,7 @@ class TGProvider {
|
|||||||
await this.tgClient.close();
|
await this.tgClient.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
async getReport(number) {
|
async getReport(number, vin01token) {
|
||||||
try {
|
try {
|
||||||
let waitResponseTask = Utils.promiseWithResolvers();
|
let waitResponseTask = Utils.promiseWithResolvers();
|
||||||
this.checksMap.set(number, waitResponseTask);
|
this.checksMap.set(number, waitResponseTask);
|
||||||
@ -53,7 +54,17 @@ class TGProvider {
|
|||||||
}, 25000);
|
}, 25000);
|
||||||
let { id, text } = await waitResponseTask.promise;
|
let { id, text } = await waitResponseTask.promise;
|
||||||
await this.tgClient.viewMessage(id, this.chat.id);
|
await this.tgClient.viewMessage(id, this.chat.id);
|
||||||
return this.parseReport(text);
|
let report = this.parseReport(text);
|
||||||
|
|
||||||
|
if(vin01token && report.generalInfo.vin) {
|
||||||
|
console.log('Found vin: ', report.generalInfo.vin);
|
||||||
|
let vin01report = await Vin01Provider.getReportVin(report.generalInfo.vin, null, vin01token);
|
||||||
|
if(vin01report.ownershipPeriods?.length > 0) {
|
||||||
|
report.ownershipPeriods = vin01report.ownershipPeriods;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return report;
|
||||||
} finally {
|
} finally {
|
||||||
this.checksMap.delete(number);
|
this.checksMap.delete(number);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -75,77 +75,7 @@ class Vin01Provider {
|
|||||||
try {
|
try {
|
||||||
let vin = await Vin01Provider.getVin(number, token);
|
let vin = await Vin01Provider.getVin(number, token);
|
||||||
console.log('vin01 found VIN: ', vin);
|
console.log('vin01 found VIN: ', vin);
|
||||||
|
return await this.getReportVin(vin, number, token);
|
||||||
let checks = [Vin01Provider.runCheck('base', vin, token), Vin01Provider.runCheck('history', vin, token)];
|
|
||||||
let [base, history] = (await Promise.allSettled(checks)).map(Vin01Provider.checkErrors);
|
|
||||||
if(base.status == 'rejected' && history.status == 'rejected') {
|
|
||||||
console.log('Vin01 base error: ', base.reason.message);
|
|
||||||
console.log('Vin01 history error: ', history.reason.message);
|
|
||||||
let vehicle = new Vehicle();
|
|
||||||
vehicle.vin1 = Utils.cyrillicToLatin(vin);
|
|
||||||
vehicle.debugInfo = {
|
|
||||||
vin01vin: new DebugInfo(),
|
|
||||||
vin01history: DebugInfo.fromError(history.reason.message),
|
|
||||||
vin01base: DebugInfo.fromError(base.reason.message)
|
|
||||||
};
|
|
||||||
return vehicle;
|
|
||||||
} else if(base.status == 'rejected') {
|
|
||||||
console.log('vin01 found history');
|
|
||||||
let vehicle = Vehicle.fromVin01History(history.value);
|
|
||||||
vehicle.number = number;
|
|
||||||
Object.assign(vehicle.debugInfo, {
|
|
||||||
vin01vin: new DebugInfo(),
|
|
||||||
vin01base: DebugInfo.fromError(base.reason.message)
|
|
||||||
});
|
|
||||||
return vehicle;
|
|
||||||
} else if(history.status == 'rejected') {
|
|
||||||
console.log('vin01 found base info');
|
|
||||||
let vehicle = Vehicle.fromVin01Base(base.value);
|
|
||||||
vehicle.number = number;
|
|
||||||
Object.assign(vehicle.debugInfo, {
|
|
||||||
vin01vin: new DebugInfo(),
|
|
||||||
vin01history: DebugInfo.fromError(history.reason.message)
|
|
||||||
});
|
|
||||||
return vehicle;
|
|
||||||
} else {
|
|
||||||
// Both history and base reports were successfully received, merge them in one report
|
|
||||||
let baseVehicle = Vehicle.fromVin01Base(base.value);
|
|
||||||
let historyVehicle = Vehicle.fromVin01History(history.value);
|
|
||||||
|
|
||||||
historyVehicle.brand.name.normalized = baseVehicle.brand.name.normalized;
|
|
||||||
historyVehicle.model = baseVehicle.model;
|
|
||||||
|
|
||||||
for(let period of historyVehicle.ownershipPeriods) {
|
|
||||||
let basePeriod = baseVehicle.ownershipPeriods.find(p => p.from == period.from);
|
|
||||||
if(basePeriod) {
|
|
||||||
period.region = basePeriod.region;
|
|
||||||
period.registrationRegion = basePeriod.registrationRegion;
|
|
||||||
period.locality = basePeriod.locality;
|
|
||||||
|
|
||||||
if(basePeriod.street) {
|
|
||||||
period.street = basePeriod.street;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(basePeriod.building) {
|
|
||||||
period.building = basePeriod.building;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(basePeriod.inn) {
|
|
||||||
period.inn = basePeriod.inn;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(basePeriod.code) {
|
|
||||||
period.code = basePeriod.code;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Object.assign(historyVehicle.debugInfo, { vin01vin: new DebugInfo() });
|
|
||||||
Object.assign(historyVehicle.debugInfo, baseVehicle.debugInfo);
|
|
||||||
|
|
||||||
historyVehicle.number = number;
|
|
||||||
return historyVehicle;
|
|
||||||
}
|
|
||||||
} catch(ex) {
|
} catch(ex) {
|
||||||
ex.debugInfo = {
|
ex.debugInfo = {
|
||||||
vin01vin:DebugInfo.fromError(ex.message),
|
vin01vin:DebugInfo.fromError(ex.message),
|
||||||
@ -155,6 +85,79 @@ class Vin01Provider {
|
|||||||
throw ex;
|
throw ex;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static async getReportVin(vin, number, token) {
|
||||||
|
let checks = [Vin01Provider.runCheck('base', vin, token), Vin01Provider.runCheck('history', vin, token)];
|
||||||
|
let [base, history] = (await Promise.allSettled(checks)).map(Vin01Provider.checkErrors);
|
||||||
|
if(base.status == 'rejected' && history.status == 'rejected') {
|
||||||
|
console.log('Vin01 base error: ', base.reason.message);
|
||||||
|
console.log('Vin01 history error: ', history.reason.message);
|
||||||
|
let vehicle = new Vehicle();
|
||||||
|
vehicle.vin1 = Utils.cyrillicToLatin(vin);
|
||||||
|
vehicle.debugInfo = {
|
||||||
|
vin01vin: new DebugInfo(),
|
||||||
|
vin01history: DebugInfo.fromError(history.reason.message),
|
||||||
|
vin01base: DebugInfo.fromError(base.reason.message)
|
||||||
|
};
|
||||||
|
return vehicle;
|
||||||
|
} else if(base.status == 'rejected') {
|
||||||
|
console.log('vin01 found history');
|
||||||
|
let vehicle = Vehicle.fromVin01History(history.value);
|
||||||
|
vehicle.number = number;
|
||||||
|
Object.assign(vehicle.debugInfo, {
|
||||||
|
vin01vin: new DebugInfo(),
|
||||||
|
vin01base: DebugInfo.fromError(base.reason.message)
|
||||||
|
});
|
||||||
|
return vehicle;
|
||||||
|
} else if(history.status == 'rejected') {
|
||||||
|
console.log('vin01 found base info');
|
||||||
|
let vehicle = Vehicle.fromVin01Base(base.value);
|
||||||
|
vehicle.number = number;
|
||||||
|
Object.assign(vehicle.debugInfo, {
|
||||||
|
vin01vin: new DebugInfo(),
|
||||||
|
vin01history: DebugInfo.fromError(history.reason.message)
|
||||||
|
});
|
||||||
|
return vehicle;
|
||||||
|
} else {
|
||||||
|
// Both history and base reports were successfully received, merge them in one report
|
||||||
|
let baseVehicle = Vehicle.fromVin01Base(base.value);
|
||||||
|
let historyVehicle = Vehicle.fromVin01History(history.value);
|
||||||
|
|
||||||
|
historyVehicle.brand.name.normalized = baseVehicle.brand.name.normalized;
|
||||||
|
historyVehicle.model = baseVehicle.model;
|
||||||
|
|
||||||
|
for(let period of historyVehicle.ownershipPeriods) {
|
||||||
|
let basePeriod = baseVehicle.ownershipPeriods.find(p => p.from == period.from);
|
||||||
|
if(basePeriod) {
|
||||||
|
period.region = basePeriod.region;
|
||||||
|
period.registrationRegion = basePeriod.registrationRegion;
|
||||||
|
period.locality = basePeriod.locality;
|
||||||
|
|
||||||
|
if(basePeriod.street) {
|
||||||
|
period.street = basePeriod.street;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(basePeriod.building) {
|
||||||
|
period.building = basePeriod.building;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(basePeriod.inn) {
|
||||||
|
period.inn = basePeriod.inn;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(basePeriod.code) {
|
||||||
|
period.code = basePeriod.code;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Object.assign(historyVehicle.debugInfo, { vin01vin: new DebugInfo() });
|
||||||
|
Object.assign(historyVehicle.debugInfo, baseVehicle.debugInfo);
|
||||||
|
|
||||||
|
historyVehicle.number = number;
|
||||||
|
return historyVehicle;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default Vin01Provider;
|
export default Vin01Provider;
|
||||||
@ -290,10 +290,11 @@ router.post('/checkGbTg', async (req, res) => {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
const number = req.body.number.replace(/ /g, '').toUpperCase();
|
const number = req.body.number.replace(/ /g, '').toUpperCase();
|
||||||
|
const token = req.body.token;
|
||||||
|
|
||||||
tgProvider = new TGProvider();
|
tgProvider = new TGProvider();
|
||||||
await tgProvider.init();
|
await tgProvider.init();
|
||||||
let report = await tgProvider.getReport(number);
|
let report = await tgProvider.getReport(number, token);
|
||||||
await tgProvider.close();
|
await tgProvider.close();
|
||||||
|
|
||||||
if(!report?.generalInfo && !report?.insurance) {
|
if(!report?.generalInfo && !report?.insurance) {
|
||||||
@ -324,6 +325,10 @@ router.post('/checkGbTg', async (req, res) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(report.ownershipPeriods) {
|
||||||
|
updatedFields.ownershipPeriods = report.ownershipPeriods;
|
||||||
|
}
|
||||||
|
|
||||||
await collection.updateOne({ number }, { $set: updatedFields });
|
await collection.updateOne({ number }, { $set: updatedFields });
|
||||||
vehicle = await collection.findOne({ number });
|
vehicle = await collection.findOne({ number });
|
||||||
res.send({ success: true, data: Object.assign(vehicle, updatedFields) });
|
res.send({ success: true, data: Object.assign(vehicle, updatedFields) });
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user