3 var BPromise = require('bluebird');
4 var util = require('util');
5 var logger = require('../config/logger')('migration');
6 var Sequence = function() {};
8 Sequence.prototype.enqueue = function(fn) {
9 this.tail = this.tail ? this.tail.finally(fn) : fn();
12 var Migration = function(queryInterface) {
13 this.queryInterface = queryInterface;
14 this.sequence = new Sequence();
17 Migration.prototype.changeColumn = function(table, column, type) {
19 this.sequence.enqueue(function() {
20 return _this.queryInterface
21 .changeColumn(table, column, type)
23 logger.info('Changed column %s in table %s', column, table);
25 .catch(function(err) {
26 logger.info(JSON.stringify(err));
31 Migration.prototype.addColumn = function(table, column, type) {
33 this.sequence.enqueue(function() {
34 return _this.queryInterface
35 .addColumn(table, column, type)
37 logger.info('Added column %s to %s', column, table);
39 .catch(function(err) {
40 logger.info(JSON.stringify(err));
45 Migration.prototype.dropTable = function(table) {
47 this.sequence.enqueue(function() {
48 return _this.queryInterface
53 logger.info('table dropped %s', table);
55 .catch(function(err) {
56 logger.info(JSON.stringify(err));
61 Migration.prototype.addIndex = function(table, column, indexName) {
63 this.sequence.enqueue(function() {
64 return _this.queryInterface
65 .addIndex(table, column, {
69 logger.info('addIndex %s %s %s', table, column.join(','), indexName);
71 .catch(function(err) {
72 logger.info(JSON.stringify(err));
77 Migration.prototype.removeIndex = function(table, indexName) {
79 this.sequence.enqueue(function() {
80 return _this.queryInterface
81 .removeIndex(table, indexName)
83 logger.info('removeIndex %s %s', table, indexName);
85 .catch(function(err) {
86 logger.info(JSON.stringify(err));
91 Migration.prototype.query = function(sql) {
93 this.sequence.enqueue(function() {
94 return _this.queryInterface.sequelize
97 logger.info('query %s', sql);
99 .catch(function(err) {
100 logger.info(JSON.stringify(err));
105 Migration.prototype.removeColumn = function(table, column) {
107 this.sequence.enqueue(function() {
108 return _this.queryInterface
109 .removeColumn(table, column)
111 logger.info('Removed column %s from %s', column, table);
113 .catch(function(err) {
124 Migration.prototype.renameColumn = function(table, oldColumn, newColumn) {
126 this.sequence.enqueue(function() {
127 return _this.queryInterface
128 .renameColumn(table, oldColumn, newColumn)
131 'Renamed column from %s to %s on %s',
137 .catch(function(err) {
148 Migration.prototype.final = function(resolve) {
149 this.sequence.enqueue(function() {
155 up: function(queryInterface, Sequelize) {
156 return new BPromise(function(resolve) {
157 var migration = new Migration(queryInterface);
159 // START change field canned answer to medium
160 migration.query('ALTER TABLE `tools_canned_answers` MODIFY COLUMN value mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL;');
161 // END change field canned answer to medium
162 // START chat_websites
163 migration.addColumn('chat_websites', 'waitForTheAssignedQueue', {
164 type: Sequelize.INTEGER,
173 // START mail_accounts
174 migration.addColumn('mail_accounts', 'waitForTheAssignedQueue', {
175 type: Sequelize.INTEGER,
184 // START sms_accounts
185 migration.addColumn('sms_accounts', 'waitForTheAssignedQueue', {
186 type: Sequelize.INTEGER,
195 // START openchannel_accounts
196 migration.addColumn('openchannel_accounts', 'waitForTheAssignedQueue', {
197 type: Sequelize.INTEGER,
204 // END openchannel_accounts
206 // START fax_accounts
207 migration.addColumn('fax_accounts', 'waitForTheAssignedQueue', {
208 type: Sequelize.INTEGER,
217 // START whatsapp_accounts
218 migration.addColumn('whatsapp_accounts', 'waitForTheAssignedQueue', {
219 type: Sequelize.INTEGER,
226 // END whatsapp_accounts
228 // START chat_interactions
229 migration.addColumn('chat_interactions', 'queueId', {
230 type: Sequelize.INTEGER,
233 // END chat_interactions
235 // START mail_interactions
236 migration.addColumn('mail_interactions', 'queueId', {
237 type: Sequelize.INTEGER,
240 // END mail_interactions
242 // START sms_interactions
243 migration.addColumn('sms_interactions', 'queueId', {
244 type: Sequelize.INTEGER,
247 // END sms_interactions
249 // START openchannel_interactions
250 migration.addColumn('openchannel_interactions', 'queueId', {
251 type: Sequelize.INTEGER,
254 // END openchannel_interactions
256 // START fax_interactions
257 migration.addColumn('fax_interactions', 'queueId', {
258 type: Sequelize.INTEGER,
261 // END fax_interactions
263 // START whatsapp_interactions
264 migration.addColumn('whatsapp_interactions', 'queueId', {
265 type: Sequelize.INTEGER,
268 // END whatsapp_interactions
271 migration.addColumn('users', 'messengerSoundNotification', {
272 type: Sequelize.BOOLEAN,
279 migration.final(resolve);
284 down: function( /* queryInterface, Sequelize */ ) {
285 // var migration = new Migration(queryInterface);