module.exports = { /** * @param {QueryInterface} queryInterface * @param {Sequelize} Sequelize * @returns {Promise} */ async up(queryInterface, Sequelize) { /** * @type {Transaction} */ const transaction = await queryInterface.sequelize.transaction(); try { await queryInterface.createTable( 'users', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }, ); await queryInterface.createTable( 'metrics', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }, ); await queryInterface.createTable( 'npn_registry', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }, ); await queryInterface.createTable( 'orders', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }, ); await queryInterface.createTable( 'plans', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }, ); await queryInterface.createTable( 'product_categories', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }, ); await queryInterface.createTable( 'profiles', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }, ); await queryInterface.createTable( 'quick_links', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }, ); await queryInterface.createTable( 'resource_categories', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }, ); await queryInterface.createTable( 'resource_subcategories', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }, ); await queryInterface.createTable( 'resources', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }, ); await queryInterface.createTable( 'store_products', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }, ); await queryInterface.createTable( 'subscriptions', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }, ); await queryInterface.createTable( 'verifications', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }, ); await queryInterface.createTable( 'roles', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }, ); await queryInterface.createTable( 'permissions', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }, ); await queryInterface.createTable( 'agencies', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }, ); await queryInterface.addColumn( 'users', 'firstName', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'users', 'lastName', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'users', 'phoneNumber', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'users', 'email', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'users', 'disabled', { type: Sequelize.DataTypes.BOOLEAN, defaultValue: false, allowNull: false, }, { transaction }, ); await queryInterface.addColumn( 'users', 'password', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'users', 'emailVerified', { type: Sequelize.DataTypes.BOOLEAN, defaultValue: false, allowNull: false, }, { transaction }, ); await queryInterface.addColumn( 'users', 'emailVerificationToken', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'users', 'emailVerificationTokenExpiresAt', { type: Sequelize.DataTypes.DATE, }, { transaction }, ); await queryInterface.addColumn( 'users', 'passwordResetToken', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'users', 'passwordResetTokenExpiresAt', { type: Sequelize.DataTypes.DATE, }, { transaction }, ); await queryInterface.addColumn( 'users', 'provider', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'metrics', 'total_users', { type: Sequelize.DataTypes.INTEGER, }, { transaction }, ); await queryInterface.addColumn( 'metrics', 'new_agencies', { type: Sequelize.DataTypes.INTEGER, }, { transaction }, ); await queryInterface.addColumn( 'metrics', 'new_subscriptions', { type: Sequelize.DataTypes.INTEGER, }, { transaction }, ); await queryInterface.addColumn( 'metrics', 'resource_views', { type: Sequelize.DataTypes.INTEGER, }, { transaction }, ); await queryInterface.addColumn( 'metrics', 'revenue', { type: Sequelize.DataTypes.DECIMAL, }, { transaction }, ); await queryInterface.addColumn( 'npn_registry', 'npn_number', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'npn_registry', 'first_name', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'npn_registry', 'last_name', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'npn_registry', 'status', { type: Sequelize.DataTypes.ENUM, values: ['active', 'inactive'], }, { transaction }, ); await queryInterface.addColumn( 'orders', 'agencyId', { type: Sequelize.DataTypes.UUID, references: { model: 'agencies', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'orders', 'productId', { type: Sequelize.DataTypes.UUID, references: { model: 'store_products', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'orders', 'status', { type: Sequelize.DataTypes.ENUM, values: ['pending', 'paid', 'canceled'], }, { transaction }, ); await queryInterface.addColumn( 'orders', 'order_date', { type: Sequelize.DataTypes.DATE, }, { transaction }, ); await queryInterface.addColumn( 'plans', 'name', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'plans', 'description', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'plans', 'seat_count', { type: Sequelize.DataTypes.INTEGER, }, { transaction }, ); await queryInterface.addColumn( 'plans', 'price_cents', { type: Sequelize.DataTypes.DECIMAL, }, { transaction }, ); await queryInterface.addColumn( 'plans', 'setup_fee_cents', { type: Sequelize.DataTypes.DECIMAL, }, { transaction }, ); await queryInterface.addColumn( 'plans', 'is_active', { type: Sequelize.DataTypes.BOOLEAN, defaultValue: false, allowNull: false, }, { transaction }, ); await queryInterface.addColumn( 'plans', 'sort_order', { type: Sequelize.DataTypes.INTEGER, }, { transaction }, ); await queryInterface.addColumn( 'product_categories', 'name', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'profiles', 'first_name', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'profiles', 'last_name', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'profiles', 'role', { type: Sequelize.DataTypes.ENUM, values: [ 'SuperAdmin', 'AgencyOwner', 'Agent', 'SupportModerator', 'Read-OnlyViewer', ], }, { transaction }, ); await queryInterface.addColumn( 'profiles', 'agencyId', { type: Sequelize.DataTypes.UUID, references: { model: 'agencies', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'profiles', 'is_verified', { type: Sequelize.DataTypes.BOOLEAN, defaultValue: false, allowNull: false, }, { transaction }, ); await queryInterface.addColumn( 'profiles', 'stripe_customer_id', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'quick_links', 'title', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'quick_links', 'url', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'quick_links', 'role', { type: Sequelize.DataTypes.ENUM, values: ['SuperAdmin', 'AgencyOwner', 'Agent'], }, { transaction }, ); await queryInterface.addColumn( 'quick_links', 'sort_order', { type: Sequelize.DataTypes.INTEGER, }, { transaction }, ); await queryInterface.addColumn( 'resource_categories', 'name', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'resource_subcategories', 'name', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'resource_subcategories', 'categoryId', { type: Sequelize.DataTypes.UUID, references: { model: 'resource_categories', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'resources', 'title', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'resources', 'subcategoryId', { type: Sequelize.DataTypes.UUID, references: { model: 'resource_subcategories', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'resources', 'content', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'store_products', 'name', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'store_products', 'categoryId', { type: Sequelize.DataTypes.UUID, references: { model: 'product_categories', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'store_products', 'price', { type: Sequelize.DataTypes.DECIMAL, }, { transaction }, ); await queryInterface.addColumn( 'subscriptions', 'agencyId', { type: Sequelize.DataTypes.UUID, references: { model: 'agencies', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'subscriptions', 'planId', { type: Sequelize.DataTypes.UUID, references: { model: 'plans', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'subscriptions', 'status', { type: Sequelize.DataTypes.ENUM, values: ['active', 'canceled', 'trialing', 'incomplete'], }, { transaction }, ); await queryInterface.addColumn( 'subscriptions', 'current_period_start', { type: Sequelize.DataTypes.DATE, }, { transaction }, ); await queryInterface.addColumn( 'subscriptions', 'current_period_end', { type: Sequelize.DataTypes.DATE, }, { transaction }, ); await queryInterface.addColumn( 'subscriptions', 'stripe_subscription_id', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'verifications', 'userId', { type: Sequelize.DataTypes.UUID, references: { model: 'profiles', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'verifications', 'agencyId', { type: Sequelize.DataTypes.UUID, references: { model: 'agencies', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'verifications', 'status', { type: Sequelize.DataTypes.ENUM, values: ['pending', 'approved', 'denied'], }, { transaction }, ); await queryInterface.addColumn( 'verifications', 'document_type', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'permissions', 'name', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'roles', 'name', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'roles', 'role_customization', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'users', 'app_roleId', { type: Sequelize.DataTypes.UUID, references: { model: 'roles', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'agencies', 'name', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'roles', 'globalAccess', { type: Sequelize.DataTypes.BOOLEAN, defaultValue: false, allowNull: false, }, { transaction }, ); await queryInterface.addColumn( 'users', 'agenciesId', { type: Sequelize.DataTypes.UUID, references: { model: 'agencies', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'metrics', 'agenciesId', { type: Sequelize.DataTypes.UUID, references: { model: 'agencies', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'npn_registry', 'agenciesId', { type: Sequelize.DataTypes.UUID, references: { model: 'agencies', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'orders', 'agenciesId', { type: Sequelize.DataTypes.UUID, references: { model: 'agencies', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'plans', 'agenciesId', { type: Sequelize.DataTypes.UUID, references: { model: 'agencies', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'product_categories', 'agenciesId', { type: Sequelize.DataTypes.UUID, references: { model: 'agencies', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'profiles', 'agenciesId', { type: Sequelize.DataTypes.UUID, references: { model: 'agencies', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'quick_links', 'agenciesId', { type: Sequelize.DataTypes.UUID, references: { model: 'agencies', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'resource_categories', 'agenciesId', { type: Sequelize.DataTypes.UUID, references: { model: 'agencies', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'resource_subcategories', 'agenciesId', { type: Sequelize.DataTypes.UUID, references: { model: 'agencies', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'resources', 'agenciesId', { type: Sequelize.DataTypes.UUID, references: { model: 'agencies', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'store_products', 'agenciesId', { type: Sequelize.DataTypes.UUID, references: { model: 'agencies', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'subscriptions', 'agenciesId', { type: Sequelize.DataTypes.UUID, references: { model: 'agencies', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'verifications', 'agenciesId', { type: Sequelize.DataTypes.UUID, references: { model: 'agencies', key: 'id', }, }, { transaction }, ); await transaction.commit(); } catch (err) { await transaction.rollback(); throw err; } }, /** * @param {QueryInterface} queryInterface * @param {Sequelize} Sequelize * @returns {Promise} */ async down(queryInterface, Sequelize) { /** * @type {Transaction} */ const transaction = await queryInterface.sequelize.transaction(); try { await queryInterface.removeColumn('verifications', 'agenciesId', { transaction, }); await queryInterface.removeColumn('subscriptions', 'agenciesId', { transaction, }); await queryInterface.removeColumn('store_products', 'agenciesId', { transaction, }); await queryInterface.removeColumn('resources', 'agenciesId', { transaction, }); await queryInterface.removeColumn( 'resource_subcategories', 'agenciesId', { transaction }, ); await queryInterface.removeColumn('resource_categories', 'agenciesId', { transaction, }); await queryInterface.removeColumn('quick_links', 'agenciesId', { transaction, }); await queryInterface.removeColumn('profiles', 'agenciesId', { transaction, }); await queryInterface.removeColumn('product_categories', 'agenciesId', { transaction, }); await queryInterface.removeColumn('plans', 'agenciesId', { transaction }); await queryInterface.removeColumn('orders', 'agenciesId', { transaction, }); await queryInterface.removeColumn('npn_registry', 'agenciesId', { transaction, }); await queryInterface.removeColumn('metrics', 'agenciesId', { transaction, }); await queryInterface.removeColumn('users', 'agenciesId', { transaction }); await queryInterface.removeColumn('roles', 'globalAccess', { transaction, }); await queryInterface.removeColumn('agencies', 'name', { transaction }); await queryInterface.removeColumn('users', 'app_roleId', { transaction }); await queryInterface.removeColumn('roles', 'role_customization', { transaction, }); await queryInterface.removeColumn('roles', 'name', { transaction }); await queryInterface.removeColumn('permissions', 'name', { transaction }); await queryInterface.removeColumn('verifications', 'document_type', { transaction, }); await queryInterface.removeColumn('verifications', 'status', { transaction, }); await queryInterface.removeColumn('verifications', 'agencyId', { transaction, }); await queryInterface.removeColumn('verifications', 'userId', { transaction, }); await queryInterface.removeColumn( 'subscriptions', 'stripe_subscription_id', { transaction }, ); await queryInterface.removeColumn('subscriptions', 'current_period_end', { transaction, }); await queryInterface.removeColumn( 'subscriptions', 'current_period_start', { transaction }, ); await queryInterface.removeColumn('subscriptions', 'status', { transaction, }); await queryInterface.removeColumn('subscriptions', 'planId', { transaction, }); await queryInterface.removeColumn('subscriptions', 'agencyId', { transaction, }); await queryInterface.removeColumn('store_products', 'price', { transaction, }); await queryInterface.removeColumn('store_products', 'categoryId', { transaction, }); await queryInterface.removeColumn('store_products', 'name', { transaction, }); await queryInterface.removeColumn('resources', 'content', { transaction, }); await queryInterface.removeColumn('resources', 'subcategoryId', { transaction, }); await queryInterface.removeColumn('resources', 'title', { transaction }); await queryInterface.removeColumn( 'resource_subcategories', 'categoryId', { transaction }, ); await queryInterface.removeColumn('resource_subcategories', 'name', { transaction, }); await queryInterface.removeColumn('resource_categories', 'name', { transaction, }); await queryInterface.removeColumn('quick_links', 'sort_order', { transaction, }); await queryInterface.removeColumn('quick_links', 'role', { transaction }); await queryInterface.removeColumn('quick_links', 'url', { transaction }); await queryInterface.removeColumn('quick_links', 'title', { transaction, }); await queryInterface.removeColumn('profiles', 'stripe_customer_id', { transaction, }); await queryInterface.removeColumn('profiles', 'is_verified', { transaction, }); await queryInterface.removeColumn('profiles', 'agencyId', { transaction, }); await queryInterface.removeColumn('profiles', 'role', { transaction }); await queryInterface.removeColumn('profiles', 'last_name', { transaction, }); await queryInterface.removeColumn('profiles', 'first_name', { transaction, }); await queryInterface.removeColumn('product_categories', 'name', { transaction, }); await queryInterface.removeColumn('plans', 'sort_order', { transaction }); await queryInterface.removeColumn('plans', 'is_active', { transaction }); await queryInterface.removeColumn('plans', 'setup_fee_cents', { transaction, }); await queryInterface.removeColumn('plans', 'price_cents', { transaction, }); await queryInterface.removeColumn('plans', 'seat_count', { transaction }); await queryInterface.removeColumn('plans', 'description', { transaction, }); await queryInterface.removeColumn('plans', 'name', { transaction }); await queryInterface.removeColumn('orders', 'order_date', { transaction, }); await queryInterface.removeColumn('orders', 'status', { transaction }); await queryInterface.removeColumn('orders', 'productId', { transaction }); await queryInterface.removeColumn('orders', 'agencyId', { transaction }); await queryInterface.removeColumn('npn_registry', 'status', { transaction, }); await queryInterface.removeColumn('npn_registry', 'last_name', { transaction, }); await queryInterface.removeColumn('npn_registry', 'first_name', { transaction, }); await queryInterface.removeColumn('npn_registry', 'npn_number', { transaction, }); await queryInterface.removeColumn('metrics', 'revenue', { transaction }); await queryInterface.removeColumn('metrics', 'resource_views', { transaction, }); await queryInterface.removeColumn('metrics', 'new_subscriptions', { transaction, }); await queryInterface.removeColumn('metrics', 'new_agencies', { transaction, }); await queryInterface.removeColumn('metrics', 'total_users', { transaction, }); await queryInterface.removeColumn('users', 'provider', { transaction }); await queryInterface.removeColumn( 'users', 'passwordResetTokenExpiresAt', { transaction }, ); await queryInterface.removeColumn('users', 'passwordResetToken', { transaction, }); await queryInterface.removeColumn( 'users', 'emailVerificationTokenExpiresAt', { transaction }, ); await queryInterface.removeColumn('users', 'emailVerificationToken', { transaction, }); await queryInterface.removeColumn('users', 'emailVerified', { transaction, }); await queryInterface.removeColumn('users', 'password', { transaction }); await queryInterface.removeColumn('users', 'disabled', { transaction }); await queryInterface.removeColumn('users', 'email', { transaction }); await queryInterface.removeColumn('users', 'phoneNumber', { transaction, }); await queryInterface.removeColumn('users', 'lastName', { transaction }); await queryInterface.removeColumn('users', 'firstName', { transaction }); await queryInterface.dropTable('agencies', { transaction }); await queryInterface.dropTable('permissions', { transaction }); await queryInterface.dropTable('roles', { transaction }); await queryInterface.dropTable('verifications', { transaction }); await queryInterface.dropTable('subscriptions', { transaction }); await queryInterface.dropTable('store_products', { transaction }); await queryInterface.dropTable('resources', { transaction }); await queryInterface.dropTable('resource_subcategories', { transaction }); await queryInterface.dropTable('resource_categories', { transaction }); await queryInterface.dropTable('quick_links', { transaction }); await queryInterface.dropTable('profiles', { transaction }); await queryInterface.dropTable('product_categories', { transaction }); await queryInterface.dropTable('plans', { transaction }); await queryInterface.dropTable('orders', { transaction }); await queryInterface.dropTable('npn_registry', { transaction }); await queryInterface.dropTable('metrics', { transaction }); await queryInterface.dropTable('users', { transaction }); await transaction.commit(); } catch (err) { await transaction.rollback(); throw err; } }, };