102 lines
2.8 KiB
JavaScript
102 lines
2.8 KiB
JavaScript
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; |