const express = require('express'); const router = express.Router(); const AvtocodProvider = require('../data_providers/avtocod'); const Vin01Provider = require('../data_providers/vin01'); const makeError = error => ({ success: false, error }); router.post('/check', async (req, res) => { const number = req.body.number.replace(/ /g, '').toUpperCase(); const googleIdToken = req.body.googleIdToken; const forceUpdate = req.body.forceUpdate.toLowerCase() == 'true'; const { login } = req.user; //console.log('TOKEN: ', req.body.googleIdToken); let collection = req.db.collection('vehicles'); let vehicles = await collection.find({ number }).toArray(); if(vehicles.length > 0 && !forceUpdate) { res.send({ success: true, data: vehicles[0] }); } else { try { let autocodPromise = AvtocodProvider.getReport(number); let all = [autocodPromise]; if(googleIdToken) { let vin01Promise = Vin01Provider.getVin(number, googleIdToken); all.push(vin01Promise); } let [autocod, vin01] = await Promise.allSettled(all); if(autocod.status == 'fulfilled') { let vehicle = autocod.value; vehicle.addedBy = login; if(vin01?.status == 'fulfilled') { vehicle.vin1 = vin01.value; } else { console.log(vin01.reason); } await collection.replaceOne({ number }, vehicle, { upsert: true }); res.status(201).send({ success: true, data: vehicle }); } else { throw Error(autocod.reason); } } catch(ex) { res.send(makeError(ex.message)); console.error(ex); } } }); router.get('/', async (req, res) => { const { limit, query } = req.query; console.log('limit:', limit); console.log('query:', query); let findQuery = {}; if(query) { findQuery.number = RegExp(query); } try { let collection = req.db.collection('vehicles'); let vehicles = await collection.find(findQuery).sort({ addedDate: -1 }).limit(parseInt(limit)).toArray(); res.send({ success: true, data: vehicles }); } catch(ex) { res.send(makeError('Error reading vehicles from DB')); console.error(ex); } }); module.exports = router;