Add VersionedModel base and version page changes
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
parent
dffb3d9efa
commit
3aab56b5ac
@ -0,0 +1,46 @@
|
|||||||
|
const Model = require('flitter-orm/src/model/Model');
|
||||||
|
const uuid = require('uuid/v4');
|
||||||
|
|
||||||
|
class VersionedModel extends Model {
|
||||||
|
static get schema() {
|
||||||
|
return {
|
||||||
|
version_archive: [Object],
|
||||||
|
version_num: { type: Number, default: 1 },
|
||||||
|
version_create_date: { type: Date, default: () => new Date },
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async version_save(message = undefined) {
|
||||||
|
await this.new_version(message)
|
||||||
|
return this.save()
|
||||||
|
}
|
||||||
|
|
||||||
|
async new_version(message = 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()
|
||||||
|
}
|
||||||
|
|
||||||
|
async cast_to_version_data() {
|
||||||
|
const schema = this.constructor.__schema
|
||||||
|
const shallow_object = {}
|
||||||
|
for ( const prop in schema.schema ) {
|
||||||
|
if ( prop in this ) {
|
||||||
|
shallow_object[prop] = this[prop]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = await this.__scope_limit_save(schema.cast_to_schema(shallow_object))
|
||||||
|
delete data.version_archive
|
||||||
|
return data
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = exports = VersionedModel
|
Loading…
Reference in new issue