diff --git a/models/db.js b/models/db.js index 4874647..cda2c32 100644 --- a/models/db.js +++ b/models/db.js @@ -1,7 +1,4 @@ -//'use strict'; - -//var mongoose = require('mongoose'); -//const sqlite3 = require('sqlite3').verbose(); +const Umzug = require('umzug'); function sequel_log(a,b,c) { console.log(a); @@ -81,13 +78,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 +95,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 +105,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 +118,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 +139,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 +173,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 +182,7 @@ module.exports = { opacity: Sequelize.DECIMAL, payload_alternatives: Sequelize.TEXT, - + /*payload_alternatives: [{ mime: String, payload_uri: String, @@ -194,12 +191,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 +217,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",