diff --git a/app/controllers/api/v1/FormDatabase.controller.js b/app/controllers/api/v1/FormDatabase.controller.js index 490db3d..5b079ba 100644 --- a/app/controllers/api/v1/FormDatabase.controller.js +++ b/app/controllers/api/v1/FormDatabase.controller.js @@ -37,7 +37,7 @@ class FormDatabase extends Controller { } } - await db.save() + await db.version_save(`Added to page "${page.Name}"`, req.user.id) req.user.allow(`database:${db.UUID}`); await req.user.save() @@ -124,8 +124,13 @@ class FormDatabase extends Controller { if ( !db ) return res.status(404).message('Database not found with that ID.').api({}) // if ( !db.accessible_by(req.user, 'update') ) return req.security.deny() - db.Name = req.body.Name - await db.save() + if ( req.body.Name !== db.Name ) { + db.Name = req.body.Name + await db.version_save(`Changed database name to "${req.body.Name}"`, req.user.id) + } else { + await db.save() + } + return res.api(db) } @@ -187,8 +192,14 @@ class FormDatabase extends Controller { } } - db.ColumnIds = update_columns.map(x => x.UUID) - await db.save() + const new_cols = update_columns.map(x => x.UUID) + const no_updates = (new_cols.length === db.ColumnIds.length) && (new_cols.every(val => db.ColumnIds.includes(val))); + if ( !no_updates ) { + db.ColumnIds = new_cols + await db.version_save('Updated columns', req.user.id) + } else { + await db.save() + } return res.api(update_columns) } @@ -248,6 +259,7 @@ class FormDatabase extends Controller { new_recs.push(dbe) } + await db.version_save('Updated data', req.user.id) return res.api(await this._set_indices(db, new_recs)) } @@ -269,6 +281,7 @@ class FormDatabase extends Controller { // if ( !db.accessible_by(req.user) ) return req.security.deny() await DBEntry.deleteMany({DatabaseId: db.UUID}) + await db.version_save('Deleted', req.user.id) await db.delete() return res.api({}) } diff --git a/app/models/api/Node.model.js b/app/models/api/Node.model.js index d315b87..fb6a01e 100644 --- a/app/models/api/Node.model.js +++ b/app/models/api/Node.model.js @@ -75,6 +75,12 @@ class Node extends VersionedModel { if ( group ) { data.associated_type_version_num = group.version_num } + } else if ( this.Type === 'database_ref' && this.Value?.Value ) { + const Database = this.models.get('api:db:Database') + const db = await Database.findOne({ Active: true, UUID: this.Value?.Value }) + if ( db ) { + data.associated_type_version_num = db.version_num + } } return data diff --git a/app/models/api/db/Database.model.js b/app/models/api/db/Database.model.js index c152fde..3251510 100644 --- a/app/models/api/db/Database.model.js +++ b/app/models/api/db/Database.model.js @@ -1,4 +1,4 @@ -const Model = require('flitter-orm/src/model/Model') +const VersionedModel = require('../../VersionedModel') const uuid = require('uuid/v4') const ColumnDef = require('./ColumnDef.model') const Page = require('../Page.model') @@ -10,10 +10,11 @@ const ActiveScope = require('../../scopes/Active.scope') * ------------------------------------------------------------- * Put some description here! */ -class Database extends Model { +class Database extends VersionedModel { static get schema() { // Return a flitter-orm schema here. return { + ...super.schema, Name: String, NodeId: String, PageId: String, @@ -52,7 +53,7 @@ class Database extends Model { async delete() { this.Active = false - await this.save() + await this.version_save(`Deleted`) } to_api_object() { @@ -61,6 +62,8 @@ class Database extends Model { uuid: this.UUID, page_id: this.PageId, column_ids: this.ColumnIds, + version_num: this.version_num, + version_message: this.version_message, } } }