const express = require('express'); const router = express.Router(); const { v4: uuidv4 } = require('uuid'); const Utils = require('../utils'); const makeError = error => ({ success: false, error }); router.post('/', async (req, res) => { const { number, event } = req.body; try { event.id = uuidv4(); let collection = req.db.collection('vehicles'); await collection.updateOne({ number }, { $push: { events: event } }); let vehicle = await collection.findOne({ number }); if(vehicle) { res.send({ success: true, data: vehicle }); } else { res.status(204).send(makeError('There is no vehicle with such plate number')); } } catch(ex) { res.send(makeError(ex.message)); console.error(ex); } }); router.delete('/', async (req, res) => { const { eventId } = req.body; try { let collection = req.db.collection('vehicles'); let vehicle = await collection.findOne({ 'events.id': eventId }); if(vehicle) { let index = vehicle.events.findIndex(e => e.id == eventId); if(index >= 0) { vehicle.events.splice(index, 1); await collection.updateOne({ number: vehicle.number }, { $set: { events: vehicle.events } }); } res.send({ success: true, data: vehicle }); } else { res.send(makeError('There is no vehicle with such event')); } } catch(ex) { res.send(makeError(ex.message)); console.error(ex); } }); router.put('/', async (req, res) => { const { event } = req.body; try { let collection = req.db.collection('vehicles'); let vehicle = await collection.findOne({ 'events.id': event.id }); if(vehicle) { let index = vehicle.events.findIndex(e => e.id == event.id); if(index >= 0) { vehicle.events[index] = event; await collection.updateOne({ number: vehicle.number }, { $set: { events: vehicle.events } }); res.send({ success: true, data: vehicle }); } else { res.send(makeError('Event not found')); } } else { res.send(makeError('There is no vehicle with such event')); } } catch(ex) { res.send(makeError(ex.message)); console.error(ex); } }); router.get('/', async (req, res) => { const { email } = req.user; try { let finalQuery = Utils.makeVehiclesSearchQuery(req.query, email); let collection = req.db.collection('vehicles'); let vehicles = await collection.find(finalQuery, { number: 1, events: 1 }).toArray(); let events = []; for(let vehicle of vehicles) { if(!vehicle.events) { continue; } for(let event of vehicle.events) { event.number = vehicle.number; } events = events.concat(vehicle.events); } res.send({ success: true, data: events }); } catch(ex) { res.send(makeError(ex.message)); console.error(ex); } }); module.exports = router;