diff --git a/models/vehicle.js b/models/vehicle.js index d2be0b8..cf0c301 100644 --- a/models/vehicle.js +++ b/models/vehicle.js @@ -22,6 +22,7 @@ class Vehicle { addedBy ownershipPeriods events + notes static fromAvtocod(report) { //console.log(JSON.stringify(report)); @@ -62,6 +63,7 @@ class Vehicle { v.addedDate = Date.now(); v.updatedDate = v.addedDate; v.events = []; + v.notes = []; v.debugInfo = { autocod: new DebugInfo() }; return v; @@ -100,6 +102,7 @@ class Vehicle { v.addedDate = Date.now(); v.updatedDate = v.addedDate; v.events = []; + v.notes = []; v.debugInfo = { vin01history: new DebugInfo() }; return v; @@ -156,10 +159,33 @@ class Vehicle { v.addedDate = Date.now(); v.updatedDate = v.addedDate; v.events = []; + v.notes = []; v.debugInfo = { vin01base: new DebugInfo() }; return v; } + + mergeNotes(newNotes) { + if(this.notes) { + let map = new Map(); + this.notes.forEach(item => map.set(item.id, item)); + newNotes.forEach(item => map.set(item.id, item)); + this.notes = [...map.values()]; + } else { + this.notes = newNotes; + } + } + + mergeEvents(newEvents) { + if(this.events) { + let map = new Map(); + this.events.forEach(item => map.set(item.id, item)); + newEvents.forEach(item => map.set(item.id, item)); + this.events = [...map.values()]; + } else { + this.events = newEvents; + } + } } module.exports = Vehicle; diff --git a/routes/events.js b/routes/events.js index 3c46a5d..a402ddb 100644 --- a/routes/events.js +++ b/routes/events.js @@ -9,7 +9,9 @@ router.post('/', async (req, res) => { const { number, event } = req.body; try { - event.id = uuidv4(); + 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() } }); diff --git a/routes/vehicles.js b/routes/vehicles.js index 1f96fa9..0fc43cf 100644 --- a/routes/vehicles.js +++ b/routes/vehicles.js @@ -15,8 +15,7 @@ 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 { googleIdToken, forceUpdate, notes, events } = req.body; const { email } = req.user; console.log(`=== checking number: ${number} ====================================`); @@ -97,6 +96,16 @@ router.post('/check', async (req, res) => { vehicle.addedDate = vehicles[0].addedDate; vehicle.events = vehicles[0].events; vehicle.osagoContracts = vehicles[0].osagoContracts; + vehicle.notes = vehicles[0].notes; + } + + // Merge new notes/events with old ones + if(notes) { + vehicle.mergeNotes(notes); + } + + if(events) { + vehicle.mergeEvents(events); } await collection.replaceOne({ number }, vehicle, { upsert: true });