From 638e4a0b31dabe8fc0ea5f36025446978116453c Mon Sep 17 00:00:00 2001 From: lesion Date: Fri, 26 Jul 2019 23:52:18 +0200 Subject: [PATCH] support db migration at startup --- server/cli.js | 24 ++++++- .../migrations/20190605141112-create-user.js | 45 ------------ .../migrations/20190605141800-create-place.js | 33 --------- .../migrations/20190605141850-create-event.js | 68 ------------------- .../20190605142152-create-notification.js | 37 ---------- .../migrations/20190605142317-create-tag.js | 29 -------- ...0190605142409-create-event-notification.js | 41 ----------- .../20190605142434-create-comment.js | 38 ----------- .../20190605142619-create-setting.js | 28 -------- .../20190605160024-create-event-tag.js | 36 ---------- 10 files changed, 21 insertions(+), 358 deletions(-) delete mode 100644 server/migrations/20190605141112-create-user.js delete mode 100644 server/migrations/20190605141800-create-place.js delete mode 100644 server/migrations/20190605141850-create-event.js delete mode 100644 server/migrations/20190605142152-create-notification.js delete mode 100644 server/migrations/20190605142317-create-tag.js delete mode 100644 server/migrations/20190605142409-create-event-notification.js delete mode 100644 server/migrations/20190605142434-create-comment.js delete mode 100644 server/migrations/20190605142619-create-setting.js delete mode 100644 server/migrations/20190605160024-create-event-tag.js diff --git a/server/cli.js b/server/cli.js index 1655c9ac..451a52bd 100755 --- a/server/cli.js +++ b/server/cli.js @@ -164,6 +164,7 @@ async function start (options) { This is your first run? Run 'gancio setup'`) process.exit(-1) } + await upgrade(options) require('./index') } @@ -177,8 +178,25 @@ async function setup (options) { } async function upgrade (options) { - consola.warn('Not implemented yet but should be an easy task! PR welcome!') - process.exit(-1) + const Umzug = require('umzug') + const Sequelize = require('sequelize') + const config = require('config') + const db = new Sequelize(config.db) + const umzug = new Umzug({ + storage: 'sequelize', + storageOptions: { sequelize: db }, + migrations: { + wrap: fun => { + return () => fun(db.queryInterface, Sequelize) + }, + path: path.resolve(__dirname, 'migrations') + } + }) + const migrations = await umzug.up() + if (migrations.length) { + consola.info('Migrations executed: ', migrations.map(m => m.file)) + } + db.close() } consola.info(`${package.name} - v${package.version} - ${package.description}`) @@ -188,7 +206,7 @@ require('yargs') .option('config', { alias: 'c', describe: 'Configuration file', - default: '/gancio/config.json', + default: '/opt/gancio/config.json', }) .coerce('config', config_path => { const absolute_config_path = path.resolve(cwd, config_path) diff --git a/server/migrations/20190605141112-create-user.js b/server/migrations/20190605141112-create-user.js deleted file mode 100644 index 9f10631b..00000000 --- a/server/migrations/20190605141112-create-user.js +++ /dev/null @@ -1,45 +0,0 @@ -'use strict'; -module.exports = { - up: (queryInterface, Sequelize) => { - return queryInterface.createTable('users', { - id: { - allowNull: false, - autoIncrement: true, - primaryKey: true, - type: Sequelize.INTEGER - }, - email: { - type: Sequelize.STRING, - unique: true, - index: true, - allowNull: false - }, - description: { - type: Sequelize.TEXT - }, - password: { - type: Sequelize.STRING - }, - recover_code: { - type: Sequelize.STRING - }, - is_admin: { - type: Sequelize.BOOLEAN - }, - is_active: { - type: Sequelize.BOOLEAN - }, - createdAt: { - allowNull: false, - type: Sequelize.DATE - }, - updatedAt: { - allowNull: false, - type: Sequelize.DATE - } - }); - }, - down: (queryInterface, Sequelize) => { - return queryInterface.dropTable('users'); - } -}; \ No newline at end of file diff --git a/server/migrations/20190605141800-create-place.js b/server/migrations/20190605141800-create-place.js deleted file mode 100644 index ee73e440..00000000 --- a/server/migrations/20190605141800-create-place.js +++ /dev/null @@ -1,33 +0,0 @@ -'use strict'; -module.exports = { - up: (queryInterface, Sequelize) => { - return queryInterface.createTable('places', { - id: { - allowNull: false, - autoIncrement: true, - primaryKey: true, - type: Sequelize.INTEGER - }, - name: { - type: Sequelize.STRING - }, - address: { - type: Sequelize.STRING - }, - weigth: { - type: Sequelize.INTEGER - }, - createdAt: { - allowNull: false, - type: Sequelize.DATE - }, - updatedAt: { - allowNull: false, - type: Sequelize.DATE - } - }); - }, - down: (queryInterface, Sequelize) => { - return queryInterface.dropTable('places'); - } -}; \ No newline at end of file diff --git a/server/migrations/20190605141850-create-event.js b/server/migrations/20190605141850-create-event.js deleted file mode 100644 index 32a49036..00000000 --- a/server/migrations/20190605141850-create-event.js +++ /dev/null @@ -1,68 +0,0 @@ -'use strict' -module.exports = { - up: (queryInterface, Sequelize) => { - return queryInterface.createTable('events', { - id: { - allowNull: false, - autoIncrement: true, - primaryKey: true, - type: Sequelize.INTEGER - }, - title: { - type: Sequelize.STRING - }, - slug: { - type: Sequelize.STRING, - index: true - }, - description: { - type: Sequelize.TEXT - }, - multidate: { - type: Sequelize.BOOLEAN - }, - start_datetime: { - type: Sequelize.INTEGER, - index: true - }, - end_datetime: { - type: Sequelize.INTEGER, - index: true - }, - image_path: { - type: Sequelize.STRING - }, - is_visible: { - type: Sequelize.BOOLEAN - }, - activitypub_id: { - type: Sequelize.BIGINT - }, - userId: { - type: Sequelize.INTEGER, - references: { - model: 'users', - key: 'id' - } - }, - placeId: { - type: Sequelize.INTEGER, - references: { - model: 'places', - key: 'id' - } - }, - createdAt: { - allowNull: false, - type: Sequelize.DATE - }, - updatedAt: { - allowNull: false, - type: Sequelize.DATE - } - }) - }, - down: (queryInterface, Sequelize) => { - return queryInterface.dropTable('events') - } -} diff --git a/server/migrations/20190605142152-create-notification.js b/server/migrations/20190605142152-create-notification.js deleted file mode 100644 index 7ddd5129..00000000 --- a/server/migrations/20190605142152-create-notification.js +++ /dev/null @@ -1,37 +0,0 @@ -'use strict' -module.exports = { - up: (queryInterface, Sequelize) => { - return queryInterface.createTable('notifications', { - id: { - allowNull: false, - autoIncrement: true, - primaryKey: true, - type: Sequelize.INTEGER - }, - filters: { - type: Sequelize.JSON - }, - email: { - type: Sequelize.STRING - }, - remove_code: { - type: Sequelize.STRING - }, - type: { - type: Sequelize.ENUM, - values: ['mail', 'admin_email', 'mastodon'] - }, - createdAt: { - allowNull: false, - type: Sequelize.DATE - }, - updatedAt: { - allowNull: false, - type: Sequelize.DATE - } - }) - }, - down: (queryInterface, Sequelize) => { - return queryInterface.dropTable('notifications') - } -} diff --git a/server/migrations/20190605142317-create-tag.js b/server/migrations/20190605142317-create-tag.js deleted file mode 100644 index 82271aaf..00000000 --- a/server/migrations/20190605142317-create-tag.js +++ /dev/null @@ -1,29 +0,0 @@ -'use strict'; -module.exports = { - up: (queryInterface, Sequelize) => { - return queryInterface.createTable('tags', { - tag: { - type: Sequelize.STRING, - allowNull: false, - primaryKey: true - }, - weigth: { - type: Sequelize.INTEGER - }, - color: { - type: Sequelize.STRING - }, - createdAt: { - allowNull: false, - type: Sequelize.DATE - }, - updatedAt: { - allowNull: false, - type: Sequelize.DATE - } - }); - }, - down: (queryInterface, Sequelize) => { - return queryInterface.dropTable('tags'); - } -}; \ No newline at end of file diff --git a/server/migrations/20190605142409-create-event-notification.js b/server/migrations/20190605142409-create-event-notification.js deleted file mode 100644 index 8317821a..00000000 --- a/server/migrations/20190605142409-create-event-notification.js +++ /dev/null @@ -1,41 +0,0 @@ -module.exports = { - up: (queryInterface, Sequelize) => { - return queryInterface.createTable('event_notification', { - eventId: { - type: Sequelize.INTEGER, - references: { - model: 'events', - key: 'id' - }, - onDelete: 'cascade', - onUpdate: 'cascade' - }, - notificationId: { - type: Sequelize.INTEGER, - references: { - model: 'notifications', - key: 'id' - }, - onDelete: 'cascade', - onUpdate: 'cascade' - }, - status: { - type: Sequelize.ENUM, - values: ['new', 'sent', 'error'], - defaultValue: 'new', - index: true - }, - createdAt: { - allowNull: false, - type: Sequelize.DATE - }, - updatedAt: { - allowNull: false, - type: Sequelize.DATE - } - }) - }, - down: (queryInterface, Sequelize) => { - return queryInterface.dropTable('event_notification') - } -} diff --git a/server/migrations/20190605142434-create-comment.js b/server/migrations/20190605142434-create-comment.js deleted file mode 100644 index 120e0a62..00000000 --- a/server/migrations/20190605142434-create-comment.js +++ /dev/null @@ -1,38 +0,0 @@ -'use strict'; -module.exports = { - up: (queryInterface, Sequelize) => { - return queryInterface.createTable('comments', { - id: { - allowNull: false, - autoIncrement: true, - primaryKey: true, - type: Sequelize.INTEGER - }, - eventId: { - type: Sequelize.INTEGER, - references: { - model: 'events', - key: 'id' - } - }, - activitypub_id: { - type: Sequelize.BIGINT, - index: true, - }, - data: { - type: Sequelize.JSON - }, - createdAt: { - allowNull: false, - type: Sequelize.DATE - }, - updatedAt: { - allowNull: false, - type: Sequelize.DATE - } - }); - }, - down: (queryInterface, Sequelize) => { - return queryInterface.dropTable('comments'); - } -}; \ No newline at end of file diff --git a/server/migrations/20190605142619-create-setting.js b/server/migrations/20190605142619-create-setting.js deleted file mode 100644 index 463ae722..00000000 --- a/server/migrations/20190605142619-create-setting.js +++ /dev/null @@ -1,28 +0,0 @@ -'use strict' -module.exports = { - up: (queryInterface, Sequelize) => { - return queryInterface.createTable('settings', { - key: { - type: Sequelize.STRING, - primaryKey: true, - allowNull: false, - index: true - }, - value: { - type: Sequelize.JSON - }, - is_secret: Sequelize.BOOLEAN, - createdAt: { - allowNull: false, - type: Sequelize.DATE - }, - updatedAt: { - allowNull: false, - type: Sequelize.DATE - } - }) - }, - down: (queryInterface, Sequelize) => { - return queryInterface.dropTable('settings') - } -} diff --git a/server/migrations/20190605160024-create-event-tag.js b/server/migrations/20190605160024-create-event-tag.js deleted file mode 100644 index 5aa38217..00000000 --- a/server/migrations/20190605160024-create-event-tag.js +++ /dev/null @@ -1,36 +0,0 @@ -'use strict' -module.exports = { - up: (queryInterface, Sequelize) => { - return queryInterface.createTable('event_tags', { - eventId: { - type: Sequelize.INTEGER, - references: { - model: 'events', - key: 'id' - }, - onDelete: 'cascade', - onUpdate: 'cascade' - }, - tagTag: { - type: Sequelize.STRING, - references: { - model: 'tags', - key: 'tag' - }, - onDelete: 'cascade', - onUpdate: 'cascade' - }, - createdAt: { - allowNull: false, - type: Sequelize.DATE - }, - updatedAt: { - allowNull: false, - type: Sequelize.DATE - } - }) - }, - down: (queryInterface, Sequelize) => { - return queryInterface.dropTable('event_tags') - } -}