Built motion from commit 10af8726.|2.6.34
[motion2.git] / server / migrations / 2.4.0.js
1 'use strict';
2
3 var BPromise = require('bluebird');
4 var util = require('util');
5
6 var logger = require('../config/logger')('migration');
7
8 var Sequence = function() {};
9
10 Sequence.prototype.enqueue = function(fn) {
11   this.tail = this.tail ? this.tail.finally(fn) : fn();
12 };
13
14 var Migration = function(queryInterface) {
15   this.queryInterface = queryInterface;
16   this.sequence = new Sequence();
17 };
18
19 Migration.prototype.changeColumn = function(table, column, type) {
20   var _this = this;
21   this.sequence.enqueue(function() {
22     return _this.queryInterface
23       .changeColumn(table, column, type)
24       .then(function() {
25         logger.info('Changed column %s in table %s', column, table);
26       })
27       .catch(function(err) {
28         logger.info(JSON.stringify(err));
29       });
30   });
31 };
32
33 Migration.prototype.addColumn = function(table, column, type) {
34   var _this = this;
35   this.sequence.enqueue(function() {
36     return _this.queryInterface
37       .addColumn(table, column, type)
38       .then(function() {
39         logger.info('Added column %s to %s', column, table);
40       })
41       .catch(function(err) {
42         logger.info(JSON.stringify(err));
43       });
44   });
45 };
46
47 Migration.prototype.dropTable = function(table) {
48   var _this = this;
49   this.sequence.enqueue(function() {
50     return _this.queryInterface
51       .dropTable(table, {
52         force: true
53       })
54       .then(function() {
55         logger.info('table dropped %s', table);
56       })
57       .catch(function(err) {
58         logger.info(JSON.stringify(err));
59       });
60   });
61 };
62
63 Migration.prototype.addIndex = function(table, column, options) {
64   var _this = this;
65   this.sequence.enqueue(function() {
66     return _this.queryInterface
67       .addIndex(table, column, {
68         indexName: options.indexName,
69         indicesType: options.indicesType
70       })
71       .then(function() {
72         logger.info('addIndex %s %s %s [%s]', table, column.join(','), options.indexName, options.indicesType);
73       })
74       .catch(function(err) {
75         logger.info(JSON.stringify(err));
76       });
77   });
78 };
79
80 Migration.prototype.removeIndex = function(table, indexName) {
81   var _this = this;
82   this.sequence.enqueue(function() {
83     return _this.queryInterface
84       .removeIndex(table, indexName)
85       .then(function() {
86         logger.info('removeIndex %s %s', table, indexName);
87       })
88       .catch(function(err) {
89         logger.info(JSON.stringify(err));
90       });
91   });
92 };
93
94 Migration.prototype.query = function(sql) {
95   var _this = this;
96   this.sequence.enqueue(function() {
97     return _this.queryInterface.sequelize
98       .query(sql)
99       .then(function() {
100         logger.info('query %s', sql);
101       })
102       .catch(function(err) {
103         logger.info(JSON.stringify(err));
104       });
105   });
106 };
107
108 Migration.prototype.removeColumn = function(table, column) {
109   var _this = this;
110   this.sequence.enqueue(function() {
111     return _this.queryInterface
112       .removeColumn(table, column)
113       .then(function() {
114         logger.info('Removed column %s from %s', column, table);
115       })
116       .catch(function(err) {
117         logger.info(
118           util.inspect(err, {
119             showHidden: false,
120             depth: null
121           })
122         );
123       });
124   });
125 };
126
127 Migration.prototype.renameColumn = function(table, oldColumn, newColumn) {
128   var _this = this;
129   this.sequence.enqueue(function() {
130     return _this.queryInterface
131       .renameColumn(table, oldColumn, newColumn)
132       .then(function() {
133         logger.info('Renamed column from %s to %s on %s', oldColumn, newColumn, table);
134       })
135       .catch(function(err) {
136         logger.info(
137           util.inspect(err, {
138             showHidden: false,
139             depth: null
140           })
141         );
142       });
143   });
144 };
145
146 Migration.prototype.final = function(resolve) {
147   this.sequence.enqueue(function() {
148     return resolve();
149   });
150 };
151
152 module.exports = {
153   up: function(queryInterface, Sequelize) {
154     return new BPromise(function(resolve) {
155       var migration = new Migration(queryInterface);
156
157       // START USERS
158       migration.renameColumn('users', 'phoneBarEnableVideoRecording', 'phoneBarEnableScreenRecordingByAgent');
159
160       migration.addColumn('users', 'phoneBarEnableAutomaticScreenRecording', {
161         type: Sequelize.BOOLEAN,
162         defaultValue: false
163       });
164
165       migration.addColumn('users', 'screenrecording', {
166         type: Sequelize.BOOLEAN,
167         defaultValue: false
168       });
169       //END USERS
170
171       // START chat_messages
172       migration.addIndex("chat_messages", ["body"], {
173         indexName: "fti_chat_messages",
174         indicesType: "FULLTEXT"
175       });
176       // END chat_messages
177
178       // START mail_interactions
179       migration.addIndex("mail_interactions", ["subject", "to"], {
180         indexName: "fti_mail_interactions",
181         indicesType: "FULLTEXT"
182       });
183
184       migration.addColumn("mail_interactions", "lastMsgText", {
185         type: Sequelize.TEXT("tiny"),
186         after: "lastMsgBody"
187       });
188       // END mail_interactions
189
190       // START mail_messages
191       migration.addColumn("mail_messages", "plainBody", {
192         type: Sequelize.TEXT("medium"),
193         after: "body"
194       });
195
196       migration.addIndex("mail_messages", ["plainBody", "subject"], {
197         indexName: "fti_mail_messages",
198         indicesType: "FULLTEXT"
199       });
200       // END mail_messages
201
202       // START openchannel_messages
203       migration.addIndex("openchannel_messages", ["body"], {
204         indexName: "fti_openchannel_messages",
205         indicesType: "FULLTEXT"
206       });
207       // END openchannel_messages
208
209       // START sms_messages
210       migration.addIndex("sms_messages", ["body"], {
211         indexName: "fti_sms_messages",
212         indicesType: "FULLTEXT"
213       });
214       // END sms_messages
215       // START chat_applications
216       migration.query('ALTER TABLE chat_applications CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci');
217       // END chat_applications
218
219       // START fax_applications
220       migration.query('ALTER TABLE fax_applications CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci');
221       // END fax_applications
222
223       // START mail_applications
224       migration.query('ALTER TABLE mail_applications CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci');
225       // END mail_applications
226
227       // START openchannel_applications
228       migration.query('ALTER TABLE openchannel_applications CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci');
229       // END openchannel_applications
230
231       // START sms_applications
232       migration.query('ALTER TABLE sms_applications CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci');
233       // END sms_applications
234
235       // START FINAL
236       migration.final(resolve);
237       // END FINAL
238     });
239   },
240
241   down: function(queryInterface, Sequelize) {
242     // var migration = new Migration(queryInterface);
243   }
244 };