Built motion from commit 20b39a97.|2.6.29
[motion2.git] / server / migrations / 2.6.29.js
1 'use strict';
2
3 var BPromise = require('bluebird');
4 var util = require('util');
5 var logger = require('../config/logger')('migration');
6 var Sequence = function() {};
7
8 Sequence.prototype.enqueue = function(fn) {
9   this.tail = this.tail ? this.tail.finally(fn) : fn();
10 };
11
12 var Migration = function(queryInterface) {
13   this.queryInterface = queryInterface;
14   this.sequence = new Sequence();
15 };
16
17 Migration.prototype.changeColumn = function(table, column, type) {
18   var _this = this;
19   this.sequence.enqueue(function() {
20     return _this.queryInterface
21       .changeColumn(table, column, type)
22       .then(function() {
23         logger.info('Changed column %s in table %s', column, table);
24       })
25       .catch(function(err) {
26         logger.info(JSON.stringify(err));
27       });
28   });
29 };
30
31 Migration.prototype.addColumn = function(table, column, type) {
32   var _this = this;
33   this.sequence.enqueue(function() {
34     return _this.queryInterface
35       .addColumn(table, column, type)
36       .then(function() {
37         logger.info('Added column %s to %s', column, table);
38       })
39       .catch(function(err) {
40         logger.info(JSON.stringify(err));
41       });
42   });
43 };
44
45 Migration.prototype.dropTable = function(table) {
46   var _this = this;
47   this.sequence.enqueue(function() {
48     return _this.queryInterface
49       .dropTable(table, {
50         force: true,
51       })
52       .then(function() {
53         logger.info('table dropped %s', table);
54       })
55       .catch(function(err) {
56         logger.info(JSON.stringify(err));
57       });
58   });
59 };
60
61 Migration.prototype.addIndex = function(table, column, indexName) {
62   var _this = this;
63   this.sequence.enqueue(function() {
64     return _this.queryInterface
65       .addIndex(table, column, {
66         indexName: indexName,
67       })
68       .then(function() {
69         logger.info('addIndex %s %s %s', table, column.join(','), indexName);
70       })
71       .catch(function(err) {
72         logger.info(JSON.stringify(err));
73       });
74   });
75 };
76
77 Migration.prototype.removeIndex = function(table, indexName) {
78   var _this = this;
79   this.sequence.enqueue(function() {
80     return _this.queryInterface
81       .removeIndex(table, indexName)
82       .then(function() {
83         logger.info('removeIndex %s %s', table, indexName);
84       })
85       .catch(function(err) {
86         logger.info(JSON.stringify(err));
87       });
88   });
89 };
90
91 Migration.prototype.query = function(sql) {
92   var _this = this;
93   this.sequence.enqueue(function() {
94     return _this.queryInterface.sequelize
95       .query(sql)
96       .then(function() {
97         logger.info('query %s', sql);
98       })
99       .catch(function(err) {
100         logger.info(JSON.stringify(err));
101       });
102   });
103 };
104
105 Migration.prototype.removeColumn = function(table, column) {
106   var _this = this;
107   this.sequence.enqueue(function() {
108     return _this.queryInterface
109       .removeColumn(table, column)
110       .then(function() {
111         logger.info('Removed column %s from %s', column, table);
112       })
113       .catch(function(err) {
114         logger.info(
115           util.inspect(err, {
116             showHidden: false,
117             depth: null,
118           })
119         );
120       });
121   });
122 };
123
124 Migration.prototype.renameColumn = function(table, oldColumn, newColumn) {
125   var _this = this;
126   this.sequence.enqueue(function() {
127     return _this.queryInterface
128       .renameColumn(table, oldColumn, newColumn)
129       .then(function() {
130         logger.info(
131           'Renamed column from %s to %s on %s',
132           oldColumn,
133           newColumn,
134           table
135         );
136       })
137       .catch(function(err) {
138         logger.info(
139           util.inspect(err, {
140             showHidden: false,
141             depth: null,
142           })
143         );
144       });
145   });
146 };
147
148 Migration.prototype.final = function(resolve) {
149   this.sequence.enqueue(function() {
150     return resolve();
151   });
152 };
153
154 const MOTV24448 = {
155   /**
156    * Apply up migration for MOTV2-4448
157    * @link https://xcally.atlassian.net/browse/MOTV2-4448
158    * @param {Migration} migration
159    * @returns {Promise<void>}
160    * @constructor
161    */
162   up: function(migration) {
163     return migration.query('ALTER TABLE `chat_websites` DROP INDEX `address`')
164   },
165   /**
166    * Apply down migration for MOTV2-4448
167    * @link https://xcally.atlassian.net/browse/MOTV2-4448
168    * @param {Migration} migration
169    * @returns {Promise<void>}
170    * @constructor
171    */
172   down: function(migration) {
173     return migration.query(
174       'ALTER TABLE `chat_websites` ADD CONSTRAINT address UNIQUE(address)'
175     ).
176     catch(function() {
177       migration.log(
178         "WARNING: can't add unique constraint to chat_websites.address: the table contains duplicate values"
179       )
180     });
181   },
182 }
183
184
185 module.exports = {
186   up: function(queryInterface /*, Sequelize */ ) {
187     return new BPromise(function(resolve) {
188       var migration = new Migration(queryInterface);
189       // Add your migration code here
190       MOTV24448.up(migration)
191
192       /**
193        * @see https://xcally.atlassian.net/browse/MOTV2-4430
194        */
195       migration.removeColumn('voice_extensions', 'alias');
196
197       // START FINAL
198       migration.final(resolve);
199       // END FINAL
200     });
201   },
202
203   down: function(queryInterface /*, Sequelize */ ) {
204     return new BPromise(function(resolve) {
205       var migration = new Migration(queryInterface);
206       MOTV24448.down(migration)
207       // START FINAL
208       migration.final(resolve);
209     });
210   },
211 };