From 40eb3bb1f26251bea2313da1b4c10fa8a84d91b3 Mon Sep 17 00:00:00 2001 From: garrettmills Date: Mon, 2 Nov 2020 12:31:05 -0600 Subject: [PATCH] Add version tracking for page nodes --- app/controllers/api/v1/Offline.controller.js | 2 +- app/controllers/api/v1/Page.controller.js | 11 +++++------ app/models/VersionedModel.js | 11 ++++++----- app/models/api/Node.model.js | 7 ++++--- 4 files changed, 16 insertions(+), 15 deletions(-) diff --git a/app/controllers/api/v1/Offline.controller.js b/app/controllers/api/v1/Offline.controller.js index 3ddc52f..8cb05b4 100644 --- a/app/controllers/api/v1/Offline.controller.js +++ b/app/controllers/api/v1/Offline.controller.js @@ -272,7 +272,7 @@ class OfflineController extends Controller { existing_node.UpdatedAt = new Date(rec.UpdatedAt) existing_node.UpdateUserId = req.user.id - await existing_node.save() + await existing_node.version_save('Updated from offline sync', req.user) uuid_mapping[rec.UUID] = existing_node.UUID } } else if ( !existing_node && online_page && !rec.deleted ) { diff --git a/app/controllers/api/v1/Page.controller.js b/app/controllers/api/v1/Page.controller.js index 9042669..4fc0709 100644 --- a/app/controllers/api/v1/Page.controller.js +++ b/app/controllers/api/v1/Page.controller.js @@ -119,7 +119,7 @@ class Page extends Controller { assoc_nodes[node.UUID].update_from_raw(node) assoc_nodes[node.UUID].UpdatedAt = new Date assoc_nodes[node.UUID].UpdateUserId = req.user._id - assoc_nodes[node.UUID].save() + await assoc_nodes[node.UUID].version_save(`Updated in page`, req.user.id) return res.api(assoc_nodes[node.UUID]) } else { const node_obj = new Node({ @@ -137,7 +137,7 @@ class Page extends Controller { } } - await node_obj.save() + await node_obj.version_save(`Added to page "${page.Name}"`) page.NodeIds.push(node_obj.UUID); await page.version_save(`Added ${node_obj.Type.split('_')[0]} node to page`, req.user.id); @@ -183,7 +183,6 @@ class Page extends Controller { CreatedUserId: req.user._id, UpdateUserId: req.user._id, }) - await node_obj.save() updated_nodes.push(node_obj) } @@ -193,7 +192,7 @@ class Page extends Controller { let delete_nodes = nodes for ( const node of updated_nodes ) { - await node.save() + await node.version_save(`Bulk updated in page "${page.Name}"`, req.user.id) delete_nodes = delete_nodes.filter(n => { return n.UUID !== node.UUID }) @@ -249,7 +248,7 @@ class Page extends Controller { UpdateUserId: req.user.id }) - await starter_node.save() + await starter_node.version_save(`Added to page "${new_page.Name}"`, req.user.id) new_page.NodeIds.push(starter_node.UUID) await new_page.version_save('Added paragraph node to page', req.user.id) } @@ -308,7 +307,7 @@ class Page extends Controller { UpdateUserId: req.user.id }) - await starter_node.save() + await starter_node.version_save(`Added to page "${new_page.Name}"`, req.user.id) new_page.NodeIds.push(starter_node.UUID) await new_page.version_save('Added paragraph node to page', req.user.id) } diff --git a/app/models/VersionedModel.js b/app/models/VersionedModel.js index b114ee3..a9839e1 100644 --- a/app/models/VersionedModel.js +++ b/app/models/VersionedModel.js @@ -17,17 +17,18 @@ class VersionedModel extends Model { } async new_version(message = undefined, user_id = undefined) { - const version_data = await this.cast_to_version_data() - version_data.version_UUID = uuid() - version_data.version_message = message - if ( !this.version_num ) this.version_num = 1 if ( !this.version_archive ) this.version_archive = [] this.version_num += 1 - this.version_archive.push(version_data) this.version_create_date = new Date() this.version_user_id = user_id + + const version_data = await this.cast_to_version_data() + version_data.version_UUID = uuid() + version_data.version_message = message + + this.version_archive.push(version_data) } async cast_to_version_data() { diff --git a/app/models/api/Node.model.js b/app/models/api/Node.model.js index 3aefc40..a6103b5 100644 --- a/app/models/api/Node.model.js +++ b/app/models/api/Node.model.js @@ -1,12 +1,12 @@ -const Model = require("flitter-orm/src/model/Model"); -const uuid = require('uuid/v4'); +const VersionedModel = require('../VersionedModel') +const uuid = require('uuid/v4') /* * Node Model * ------------------------------------------------------------- * Put some description here! */ -class Node extends Model { +class Node extends VersionedModel { static get services() { return [...super.services, 'models'] } @@ -14,6 +14,7 @@ class Node extends Model { static get schema() { // Return a flitter-orm schema here. return { + ...super.schema, UUID: { type: String, default: () => uuid() }, Type: String, Value: {