AutoCatBackend/routes/vehicles.js
2020-06-01 12:14:21 +03:00

73 lines
2.0 KiB
JavaScript

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;