UNPKG

synt_backend

Version:

Synt light-weight node backend service

155 lines (147 loc) 3.83 kB
"use strict"; module.exports = { async up(queryInterface, Sequelize) { /** * Add altering commands here. * * Example: * await queryInterface.createTable('users', { id: Sequelize.INTEGER }); */ await queryInterface.sequelize.transaction(async (t) => { const [reminders] = await queryInterface.sequelize.query( `SELECT * FROM Reminders`, { transaction: t, } ); await queryInterface.removeColumn("Reminders", "message", { transaction: t, }); await queryInterface.addColumn( "Reminders", "LabelId", { type: Sequelize.INTEGER, allowNull: true, defaultValue: null, }, { transaction: t } ); await reminders.reduce( (res, reminder) => res .then(() => queryInterface.bulkInsert( "Labels", [ { createdAt: new Date(), updatedAt: new Date(), }, ], { transaction: t } ) ) .then((labelId) => Promise.all([ queryInterface.bulkInsert( "Translations", [ { LabelId: labelId, language: "en", value: reminder.message, createdAt: new Date(), updatedAt: new Date(), }, ], { transaction: t } ), queryInterface.bulkUpdate( "Reminders", { LabelId: labelId, }, { id: reminder.id, }, { transaction: t } ), ]) ), Promise.resolve() ); await queryInterface.changeColumn( "Reminders", "LabelId", { type: Sequelize.INTEGER, references: { model: "Labels", key: "id", }, allowNull: false, defaultValue: null, onUpdate: "CASCADE", onDelete: "CASCADE", }, { transaction: t } ); }); }, async down(queryInterface, Sequelize) { /** * Add reverting commands here. * * Example: * await queryInterface.dropTable('users'); */ await queryInterface.sequelize.transaction(async (t) => { const [reminders] = await queryInterface.sequelize.query( `SELECT dr.id, t.value FROM Reminders dr INNER JOIN Translations t on t.LabelId = dr.LabelId AND t.language = 'en'`, { transaction: t, } ); await queryInterface.addColumn( "Reminders", "message", { type: Sequelize.STRING, allowNull: true, }, { transaction: t } ); await reminders.reduce( (res, reminder) => res.then(() => queryInterface.bulkUpdate( "Reminders", { message: reminder.value ?? "No value", }, { id: reminder.id, }, { transaction: t } ) ), Promise.resolve() ); await Promise.all([ queryInterface.removeColumn("Reminders", "LabelId", { transaction: t, }), queryInterface.changeColumn( "Reminders", "message", { type: Sequelize.STRING, allowNull: false, }, { transaction: t } ), ]); }); }, };