OurBigBook logoOurBigBook Docs OurBigBook logoOurBigBook.comSite Source code
web/migrations/21000101000039-user-add-pending-email-columns.js
const columns = ['pendingEmail', 'emailChangeCode']

module.exports = {
  up: async (queryInterface, Sequelize) => queryInterface.sequelize.transaction(async transaction => {
    for (const column of columns) {
      await queryInterface.addColumn('User', column, {
        type: Sequelize.DataTypes.STRING(column === 'emailChangeCode' ? 1024 : 255),
        allowNull: true,
      }, { transaction })
    }
  }),
  down: async (queryInterface) => {
    const sequelize = queryInterface.sequelize
    const sqlite = sequelize.options.dialect === 'sqlite'
    if (sqlite) await sequelize.query('PRAGMA foreign_keys = OFF')
    try {
      await sequelize.transaction(async transaction => {
        const [schema] = sqlite ? await sequelize.query(
          `SELECT sql FROM sqlite_master WHERE tbl_name = 'User' AND type IN ('index', 'trigger') AND sql IS NOT NULL`,
          { transaction },
        ) : [[]]
        for (const column of columns) {
          await queryInterface.removeColumn('User', column, { transaction })
        }
        for (const { sql } of schema) await sequelize.query(sql, { transaction })
      })
    } finally {
      if (sqlite) await sequelize.query('PRAGMA foreign_keys = ON')
    }
  },
}