'use strict'; module.exports = { up: async (queryInterface, Sequelize) => { await queryInterface.createTable("authentication_providers", { id: { type: Sequelize.UUID, allowNull: false, primaryKey: true, }, name: { type: Sequelize.STRING, allowNull: false, }, providerId: { type: Sequelize.STRING, unique: true, allowNull: false, }, enabled: { type: Sequelize.BOOLEAN, allowNull: false, defaultValue: true }, teamId: { type: Sequelize.UUID, allowNull: false, references: { model: "teams" } }, createdAt: { type: Sequelize.DATE, allowNull: false, }, }); await queryInterface.createTable("user_authentications", { id: { type: Sequelize.UUID, allowNull: false, primaryKey: true, }, userId: { type: Sequelize.UUID, allowNull: false, references: { model: "users" } }, authenticationProviderId: { type: Sequelize.UUID, allowNull: false, references: { model: "authentication_providers" } }, accessToken: { type: Sequelize.BLOB, allowNull: true, }, refreshToken: { type: Sequelize.BLOB, allowNull: true, }, scopes: { type: Sequelize.ARRAY(Sequelize.STRING), allowNull: true, }, providerId: { type: Sequelize.STRING, unique: true, allowNull: false, }, createdAt: { type: Sequelize.DATE, allowNull: false, }, updatedAt: { type: Sequelize.DATE, allowNull: false, }, }); await queryInterface.removeColumn("users", "slackAccessToken") await queryInterface.addIndex("authentication_providers", ["providerId"]); await queryInterface.addIndex("user_authentications", ["providerId"]); }, down: async (queryInterface, Sequelize) => { await queryInterface.dropTable("user_authentications"); await queryInterface.dropTable("authentication_providers"); await queryInterface.addColumn("users", "slackAccessToken", { type: 'bytea', allowNull: true, }); } };