Built motion from commit (unavailable).|2.5.14
[motion2.git] / server / migrations / 2.4.20.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                         
156                         var migration = new Migration(queryInterface);
157
158                         // START settings
159                         migration.addColumn('settings', 'googleSsoEnabled', {
160                 type: Sequelize.BOOLEAN,
161                 defaultValue: false
162                         });
163
164                         migration.query('UPDATE settings SET googleSsoEnabled = 1');
165                         // END settings
166
167                         // START FINAL
168                         migration.final(resolve);
169                         // END FINAL
170                 });
171         },
172
173         down: function (queryInterface, Sequelize) {
174                 // var migration = new Migration(queryInterface);
175         }
176 };