AutoCatBackend/routes/events.js
2020-09-11 19:24:31 +03:00

72 lines
2.0 KiB
JavaScript

const express = require('express');
const router = express.Router();
const { v4: uuidv4 } = require('uuid');
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);
}
});
module.exports = router;