From f71081b15b90685d074504fd1f36181a331e9e1f Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Mon, 16 Jul 2018 12:30:41 +0200 Subject: [PATCH 1/2] Adding migration support and delete cascade migration for space references --- models/db.js | 63 ++++++++++----- models/migrations/01-spaces-delete-cascade.js | 80 +++++++++++++++++++ package.json | 1 + 3 files changed, 123 insertions(+), 21 deletions(-) create mode 100644 models/migrations/01-spaces-delete-cascade.js diff --git a/models/db.js b/models/db.js index 4874647..b6f0dbd 100644 --- a/models/db.js +++ b/models/db.js @@ -1,5 +1,6 @@ //'use strict'; +var Umzug = require('umzug'); //var mongoose = require('mongoose'); //const sqlite3 = require('sqlite3').verbose(); @@ -81,13 +82,13 @@ module.exports = { height: Sequelize.INTEGER, background_color: Sequelize.STRING, background_uri: Sequelize.STRING, - + created_at: {type: Sequelize.DATE, defaultValue: Sequelize.NOW}, updated_at: {type: Sequelize.DATE, defaultValue: Sequelize.NOW}, thumbnail_url: Sequelize.STRING, thumbnail_updated_at: {type: Sequelize.DATE} }), - + Membership: sequelize.define('membership', { _id: {type: Sequelize.STRING, primaryKey: true}, space_id: Sequelize.STRING, @@ -98,7 +99,7 @@ module.exports = { created_at: {type: Sequelize.DATE, defaultValue: Sequelize.NOW}, updated_at: {type: Sequelize.DATE, defaultValue: Sequelize.NOW} }), - + Message: sequelize.define('message', { _id: {type: Sequelize.STRING, primaryKey: true}, space_id: Sequelize.STRING, @@ -108,7 +109,7 @@ module.exports = { created_at: {type: Sequelize.DATE, defaultValue: Sequelize.NOW}, updated_at: {type: Sequelize.DATE, defaultValue: Sequelize.NOW} }), - + Artifact: sequelize.define('artifact', { _id: {type: Sequelize.STRING, primaryKey: true}, space_id: Sequelize.STRING, @@ -121,7 +122,7 @@ module.exports = { last_update_editor_name: Sequelize.STRING, description: Sequelize.TEXT, state: {type: Sequelize.STRING, default: "idle"}, - + //linked_to: Sequelize.STRING, title: Sequelize.STRING, tags: Sequelize.TEXT, @@ -142,16 +143,16 @@ module.exports = { //}], control_points: Sequelize.TEXT, - + group: Sequelize.STRING, locked: {type: Sequelize.BOOLEAN, default: false}, - + payload_uri: Sequelize.STRING, payload_thumbnail_web_uri: Sequelize.STRING, payload_thumbnail_medium_uri: Sequelize.STRING, payload_thumbnail_big_uri: Sequelize.STRING, payload_size: Sequelize.INTEGER, // file size in bytes - + fill_color: {type: Sequelize.STRING, default: "transparent"}, stroke_color: {type: Sequelize.STRING, default: "#000000"}, text_color: Sequelize.STRING, @@ -176,7 +177,7 @@ module.exports = { border_radius: Sequelize.INTEGER, align: {type: Sequelize.STRING, default: "left"}, valign: {type: Sequelize.STRING, default: "top"}, - + brightness: Sequelize.DECIMAL, contrast: Sequelize.DECIMAL, saturation: Sequelize.DECIMAL, @@ -185,7 +186,7 @@ module.exports = { opacity: Sequelize.DECIMAL, payload_alternatives: Sequelize.TEXT, - + /*payload_alternatives: [{ mime: String, payload_uri: String, @@ -194,12 +195,12 @@ module.exports = { payload_thumbnail_big_uri: String, payload_size: Number }],*/ - + created_at: {type: Sequelize.DATE, defaultValue: Sequelize.NOW}, updated_at: {type: Sequelize.DATE, defaultValue: Sequelize.NOW} }), - - init: function() { + + init: async function() { User = this.User; Session = this.Session; Space = this.Space; @@ -220,49 +221,69 @@ module.exports = { }, as: 'user' }); - + Membership.belongsTo(Space, { foreignKey: { name: 'space_id' }, as: 'space' }); - + Artifact.belongsTo(User, { foreignKey: { name: 'user_id' }, as: 'user' }); - + Artifact.belongsTo(Space, { foreignKey: { name: 'space_id' }, as: 'space' }); - + Message.belongsTo(User, { foreignKey: { name: 'user_id' }, as: 'user' }); - + Message.belongsTo(Space, { foreignKey: { name: 'space_id' }, as: 'space' }); - - sequelize.sync(); + + await sequelize.sync(); + + var umzug = new Umzug({ + storage: 'sequelize', + storageOptions: { + sequelize: sequelize + }, + migrations: { + params: [ + sequelize.getQueryInterface(), + Sequelize + ], + path: './models/migrations', + pattern: /\.js$/ + } + }); + + umzug.up().then(function(migrations) { + console.log('Migration complete up!'); + }); + }, getUserRoleInSpace: (originalSpace, user, cb) => { originalSpace.path = []; console.log("getUserRoleInSpace",originalSpace._id,user._id,user.home_folder_id); - + if (originalSpace._id == user.home_folder_id || (originalSpace.creator_id && originalSpace.creator_id == user._id)) { cb("admin"); } else { diff --git a/models/migrations/01-spaces-delete-cascade.js b/models/migrations/01-spaces-delete-cascade.js new file mode 100644 index 0000000..a1c2f46 --- /dev/null +++ b/models/migrations/01-spaces-delete-cascade.js @@ -0,0 +1,80 @@ +'use strict'; + +module.exports = { + up: function(migration, DataTypes) { + return [ + migration.changeColumn('memberships', 'space_id', + { + type: DataTypes.STRING, + references: { + model: 'spaces', + key: '_id' + }, + onDelete: 'CASCADE', + onUpdate: 'CASCADE' + } + ), + migration.changeColumn('artifacts', 'space_id', + { + type: DataTypes.STRING, + references: { + model: 'spaces', + key: '_id' + }, + onDelete: 'CASCADE', + onUpdate: 'CASCADE' + } + ), + migration.changeColumn('messages', 'space_id', + { + type: DataTypes.STRING, + references: { + model: 'spaces', + key: '_id' + }, + onDelete: 'CASCADE', + onUpdate: 'CASCADE' + } + ) + ] + }, + + down: function(migration, DataTypes) { + return [ + migration.changeColumn('memberships', 'space_id', + { + type: DataTypes.STRING, + references: { + model: 'spaces', + key: '_id' + }, + onDelete: 'CASCADE', + onUpdate: 'NO ACTION' + } + ), + , + migration.changeColumn('artifacts', 'space_id', + { + type: DataTypes.STRING, + references: { + model: 'spaces', + key: '_id' + }, + onDelete: 'CASCADE', + onUpdate: 'NO ACTION' + } + ), + migration.changeColumn('messages', 'space_id', + { + type: DataTypes.STRING, + references: { + model: 'spaces', + key: '_id' + }, + onDelete: 'CASCADE', + onUpdate: 'NO ACTION' + } + ) + ] + } +}; diff --git a/package.json b/package.json index 2dae5c8..e77faba 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,7 @@ "slug": "0.9.1", "sqlite3": "^4.0.0", "swig": "1.4.2", + "umzug": "^2.1.0", "underscore": "1.8.3", "uuid": "^3.2.1", "validator": "7.0.0", From 2974caab1d293bd0356887cbbf31fbd310a0f74b Mon Sep 17 00:00:00 2001 From: "Lukas F. Hartmann" Date: Tue, 17 Jul 2018 12:16:24 +0200 Subject: [PATCH 2/2] minor cleanup --- models/db.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/models/db.js b/models/db.js index b6f0dbd..cda2c32 100644 --- a/models/db.js +++ b/models/db.js @@ -1,8 +1,4 @@ -//'use strict'; - -var Umzug = require('umzug'); -//var mongoose = require('mongoose'); -//const sqlite3 = require('sqlite3').verbose(); +const Umzug = require('umzug'); function sequel_log(a,b,c) { console.log(a);