import { Router } from 'express'; const router = Router(); import { v4 as uuidv4 } from 'uuid'; import Utils from '../utils/utils.js'; const makeError = error => ({ success: false, error }); router.post('/', async (req, res) => { const { number, event } = req.body; try { if(!event.id) { event.id = uuidv4(); } let collection = req.db.collection('vehicles'); await collection.updateOne({ number }, { $push: { events: event } }); await collection.updateOne({ number }, { $set: { updatedDate: Date.now() } }); 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, updatedDate: Date.now() } }); } 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, updatedDate: Date.now() } }); 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); } }); export default router;