Built motion from commit (unavailable).|2.5.14
[motion2.git] / server / migrations / 2.0.83.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, indexName) {
64         var _this = this;
65         this.sequence.enqueue(function () {
66                 return _this.queryInterface
67                         .addIndex(table, column, {
68                                 indexName: indexName
69                         })
70                         .then(function () {
71                                 logger.info('addIndex %s %s %s', table, column.join(','), indexName);
72                         })
73                         .catch(function (err) {
74                                 logger.info(JSON.stringify(err));
75                         });
76         });
77 };
78
79 Migration.prototype.removeIndex = function (table, indexName) {
80         var _this = this;
81         this.sequence.enqueue(function () {
82                 return _this.queryInterface
83                         .removeIndex(table, indexName)
84                         .then(function () {
85                                 logger.info('removeIndex %s %s', table, indexName);
86                         })
87                         .catch(function (err) {
88                                 logger.info(JSON.stringify(err));
89                         });
90         });
91 };
92
93 Migration.prototype.query = function (sql) {
94         var _this = this;
95         this.sequence.enqueue(function () {
96                 return _this.queryInterface.sequelize
97                         .query(sql)
98                         .then(function () {
99                                 logger.info('query %s', sql);
100                         })
101                         .catch(function (err) {
102                                 logger.info(JSON.stringify(err));
103                         });
104         });
105 };
106
107 Migration.prototype.removeColumn = function (table, column) {
108         var _this = this;
109         this.sequence.enqueue(function () {
110                 return _this.queryInterface
111                         .removeColumn(table, column)
112                         .then(function () {
113                                 logger.info('Removed column %s from %s', column, table);
114                         })
115                         .catch(function (err) {
116                                 logger.info(
117                                         util.inspect(err, {
118                                                 showHidden: false,
119                                                 depth: null
120                                         })
121                                 );
122                         });
123         });
124 };
125
126 Migration.prototype.renameColumn = function (table, oldColumn, newColumn) {
127         var _this = this;
128         this.sequence.enqueue(function () {
129                 return _this.queryInterface
130                         .renameColumn(table, oldColumn, newColumn)
131                         .then(function () {
132                                 logger.info('Renamed column from %s to %s on %s', oldColumn, newColumn, table);
133                         })
134                         .catch(function (err) {
135                                 logger.info(
136                                         util.inspect(err, {
137                                                 showHidden: false,
138                                                 depth: null
139                                         })
140                                 );
141                         });
142         });
143 };
144
145 Migration.prototype.final = function (resolve) {
146         this.sequence.enqueue(function () {
147                 return resolve();
148         });
149 };
150
151 module.exports = {
152         up: function (queryInterface, Sequelize) {
153                 return new BPromise(function (resolve) {
154                         var migration = new Migration(queryInterface);
155
156             // START CM_HOPPER
157             migration.addColumn('cm_hopper', 'OwnerId', {
158                 type: Sequelize.INTEGER(11)
159             });
160             migration.query('ALTER TABLE cm_hopper ADD CONSTRAINT cm_hopper_ibfk_6 FOREIGN KEY (OwnerId) REFERENCES users(id) ON UPDATE CASCADE ON DELETE SET NULL');
161             // END CM_HOPPER
162
163             // START CM_CONTACTS
164                         migration.addColumn('cm_contacts', 'fb_data', {
165                                 type: Sequelize.STRING
166             });
167             // START CM_CONTACTS
168
169                         // START sms_accounts
170             migration.changeColumn('sms_accounts', 'type', {
171                 type: Sequelize.ENUM('twilio', 'skebby', 'connectel', 'clicksend', 'plivo', 'clickatell', 'csc', 'infobip')
172             });
173
174             migration.addColumn('sms_accounts', 'baseUrl', {
175                             type: Sequelize.STRING
176                     });
177                         // END sms_accounts
178                         
179                         // START report_queue
180             migration.addColumn('report_queue', 'queuecallerenterreason', {
181                                 type: Sequelize.INTEGER,
182                                 defaultValue: 0
183                         });
184             // END report_queue
185
186                         // START FINAL
187                         migration.final(resolve);
188                         // END FINAL
189                 });
190         },
191
192         down: function (queryInterface, Sequelize) {
193                 // var migration = new Migration(queryInterface);
194         }
195 };