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('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('accounts', { 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('locations', { 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('contacts', { 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('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('inventory_items', { 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('price_lists', { 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('price_list_items', { 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('account_price_lists', { 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('carts', { 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('cart_items', { 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('order_items', { 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('shipments', { 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('quotes', { 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('quote_items', { 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('sample_requests', { 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('saved_lists', { 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('saved_list_items', { 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( 'users', 'app_roleId', { type: Sequelize.DataTypes.UUID, references: { model: 'roles', key: 'id', }, }, { 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( 'permissions', 'name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'accounts', 'account_name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'accounts', 'account_type', { type: Sequelize.DataTypes.ENUM, values: ['restaurant','caterer','hotel','corporate','other'], }, { transaction } ); await queryInterface.addColumn( 'accounts', 'account_number', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'accounts', 'tax_exempt_number', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'accounts', 'is_tax_exempt', { type: Sequelize.DataTypes.BOOLEAN, defaultValue: false, allowNull: false, }, { transaction } ); await queryInterface.addColumn( 'accounts', 'credit_status', { type: Sequelize.DataTypes.ENUM, values: ['good','hold','delinquent'], }, { transaction } ); await queryInterface.addColumn( 'accounts', 'credit_limit', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'accounts', 'default_price_listId', { type: Sequelize.DataTypes.UUID, references: { model: 'price_lists', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'accounts', 'assigned_sales_repId', { type: Sequelize.DataTypes.UUID, references: { model: 'users', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'accounts', 'notes', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'accounts', 'is_active', { type: Sequelize.DataTypes.BOOLEAN, defaultValue: false, allowNull: false, }, { transaction } ); await queryInterface.addColumn( 'locations', 'accountId', { type: Sequelize.DataTypes.UUID, references: { model: 'accounts', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'locations', 'location_name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'locations', 'location_type', { type: Sequelize.DataTypes.ENUM, values: ['billing','shipping','both'], }, { transaction } ); await queryInterface.addColumn( 'locations', 'address_line_1', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'locations', 'address_line_2', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'locations', 'city', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'locations', 'state', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'locations', 'postal_code', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'locations', 'country', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'locations', 'delivery_instructions', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'locations', 'default_contactId', { type: Sequelize.DataTypes.UUID, references: { model: 'contacts', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'locations', 'is_active', { type: Sequelize.DataTypes.BOOLEAN, defaultValue: false, allowNull: false, }, { transaction } ); await queryInterface.addColumn( 'contacts', 'accountId', { type: Sequelize.DataTypes.UUID, references: { model: 'accounts', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'contacts', 'locationId', { type: Sequelize.DataTypes.UUID, references: { model: 'locations', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'contacts', 'contact_name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'contacts', 'email', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'contacts', 'phone', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'contacts', 'role_title', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'contacts', 'is_primary', { type: Sequelize.DataTypes.BOOLEAN, defaultValue: false, allowNull: false, }, { transaction } ); await queryInterface.addColumn( 'contacts', 'can_place_orders', { type: Sequelize.DataTypes.BOOLEAN, defaultValue: false, allowNull: false, }, { transaction } ); await queryInterface.addColumn( 'contacts', 'can_see_invoices', { type: Sequelize.DataTypes.BOOLEAN, defaultValue: false, allowNull: false, }, { transaction } ); await queryInterface.addColumn( 'contacts', 'is_active', { type: Sequelize.DataTypes.BOOLEAN, defaultValue: false, allowNull: false, }, { transaction } ); await queryInterface.addColumn( 'product_categories', 'category_name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'product_categories', 'category_description', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'product_categories', 'parent_categoryId', { type: Sequelize.DataTypes.UUID, references: { model: 'product_categories', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'product_categories', 'is_active', { type: Sequelize.DataTypes.BOOLEAN, defaultValue: false, allowNull: false, }, { transaction } ); await queryInterface.addColumn( 'products', 'sku', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'products', 'product_name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'products', 'brand', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'products', 'categoryId', { type: Sequelize.DataTypes.UUID, references: { model: 'product_categories', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'products', 'short_description', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'products', 'long_description', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'products', 'pack_size', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'products', 'units_per_case', { type: Sequelize.DataTypes.INTEGER, }, { transaction } ); await queryInterface.addColumn( 'products', 'unit_weight_lbs', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'products', 'case_weight_lbs', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'products', 'uom', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'products', 'moq_cases', { type: Sequelize.DataTypes.INTEGER, }, { transaction } ); await queryInterface.addColumn( 'products', 'temperature_zone', { type: Sequelize.DataTypes.ENUM, values: ['ambient','refrigerated','frozen'], }, { transaction } ); await queryInterface.addColumn( 'products', 'product_status', { type: Sequelize.DataTypes.ENUM, values: ['active','discontinued','seasonal','out_of_stock'], }, { transaction } ); await queryInterface.addColumn( 'products', 'allergens', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'products', 'certifications', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'products', 'is_sample_eligible', { type: Sequelize.DataTypes.BOOLEAN, defaultValue: false, allowNull: false, }, { transaction } ); await queryInterface.addColumn( 'inventory_items', 'productId', { type: Sequelize.DataTypes.UUID, references: { model: 'products', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'inventory_items', 'warehouse_name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'inventory_items', 'on_hand_cases', { type: Sequelize.DataTypes.INTEGER, }, { transaction } ); await queryInterface.addColumn( 'inventory_items', 'allocated_cases', { type: Sequelize.DataTypes.INTEGER, }, { transaction } ); await queryInterface.addColumn( 'inventory_items', 'available_cases', { type: Sequelize.DataTypes.INTEGER, }, { transaction } ); await queryInterface.addColumn( 'inventory_items', 'last_sync_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'price_lists', 'price_list_name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'price_lists', 'price_list_type', { type: Sequelize.DataTypes.ENUM, values: ['contract','promo','standard'], }, { transaction } ); await queryInterface.addColumn( 'price_lists', 'effective_start', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'price_lists', 'effective_end', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'price_lists', 'is_active', { type: Sequelize.DataTypes.BOOLEAN, defaultValue: false, allowNull: false, }, { transaction } ); await queryInterface.addColumn( 'price_lists', 'notes', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'price_list_items', 'price_listId', { type: Sequelize.DataTypes.UUID, references: { model: 'price_lists', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'price_list_items', 'productId', { type: Sequelize.DataTypes.UUID, references: { model: 'products', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'price_list_items', 'case_price', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'price_list_items', 'unit_price', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'price_list_items', 'min_case_qty', { type: Sequelize.DataTypes.INTEGER, }, { transaction } ); await queryInterface.addColumn( 'price_list_items', 'effective_start', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'price_list_items', 'effective_end', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'account_price_lists', 'accountId', { type: Sequelize.DataTypes.UUID, references: { model: 'accounts', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'account_price_lists', 'price_listId', { type: Sequelize.DataTypes.UUID, references: { model: 'price_lists', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'account_price_lists', 'effective_start', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'account_price_lists', 'effective_end', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'account_price_lists', 'is_primary', { type: Sequelize.DataTypes.BOOLEAN, defaultValue: false, allowNull: false, }, { transaction } ); await queryInterface.addColumn( 'carts', 'accountId', { type: Sequelize.DataTypes.UUID, references: { model: 'accounts', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'carts', 'locationId', { type: Sequelize.DataTypes.UUID, references: { model: 'locations', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'carts', 'buyerId', { type: Sequelize.DataTypes.UUID, references: { model: 'users', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'carts', 'cart_status', { type: Sequelize.DataTypes.ENUM, values: ['active','submitted','abandoned'], }, { transaction } ); await queryInterface.addColumn( 'carts', 'po_number', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'carts', 'requested_delivery_date', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'carts', 'buyer_notes', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'cart_items', 'cartId', { type: Sequelize.DataTypes.UUID, references: { model: 'carts', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'cart_items', 'productId', { type: Sequelize.DataTypes.UUID, references: { model: 'products', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'cart_items', 'quantity_cases', { type: Sequelize.DataTypes.INTEGER, }, { transaction } ); await queryInterface.addColumn( 'cart_items', 'unit_price', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'cart_items', 'case_price', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'cart_items', 'line_notes', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'orders', 'order_number', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'orders', 'accountId', { type: Sequelize.DataTypes.UUID, references: { model: 'accounts', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'orders', 'locationId', { type: Sequelize.DataTypes.UUID, references: { model: 'locations', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'orders', 'buyerId', { type: Sequelize.DataTypes.UUID, references: { model: 'users', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'orders', 'po_number', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'orders', 'ordered_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'orders', 'requested_delivery_date', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'orders', 'promised_delivery_date', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'orders', 'order_status', { type: Sequelize.DataTypes.ENUM, values: ['draft','submitted','approved','picking','shipped','delivered','cancelled'], }, { transaction } ); await queryInterface.addColumn( 'orders', 'payment_terms', { type: Sequelize.DataTypes.ENUM, values: ['net_15','net_30','net_45','prepaid'], }, { transaction } ); await queryInterface.addColumn( 'orders', 'subtotal', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'orders', 'tax_total', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'orders', 'shipping_total', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'orders', 'order_total', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'orders', 'buyer_notes', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'orders', 'internal_notes', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'order_items', 'orderId', { type: Sequelize.DataTypes.UUID, references: { model: 'orders', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'order_items', 'productId', { type: Sequelize.DataTypes.UUID, references: { model: 'products', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'order_items', 'quantity_cases', { type: Sequelize.DataTypes.INTEGER, }, { transaction } ); await queryInterface.addColumn( 'order_items', 'case_price', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'order_items', 'line_total', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'order_items', 'fulfillment_status', { type: Sequelize.DataTypes.ENUM, values: ['pending','allocated','picked','shipped','backordered','cancelled'], }, { transaction } ); await queryInterface.addColumn( 'order_items', 'line_notes', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'shipments', 'orderId', { type: Sequelize.DataTypes.UUID, references: { model: 'orders', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'shipments', 'shipment_number', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'shipments', 'carrier', { type: Sequelize.DataTypes.ENUM, values: ['company_truck','ups','fedex','other'], }, { transaction } ); await queryInterface.addColumn( 'shipments', 'tracking_number', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'shipments', 'shipped_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'shipments', 'delivered_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'shipments', 'shipment_status', { type: Sequelize.DataTypes.ENUM, values: ['preparing','shipped','delivered','exception'], }, { transaction } ); await queryInterface.addColumn( 'quotes', 'quote_number', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'quotes', 'accountId', { type: Sequelize.DataTypes.UUID, references: { model: 'accounts', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'quotes', 'locationId', { type: Sequelize.DataTypes.UUID, references: { model: 'locations', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'quotes', 'requested_byId', { type: Sequelize.DataTypes.UUID, references: { model: 'users', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'quotes', 'ownerId', { type: Sequelize.DataTypes.UUID, references: { model: 'users', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'quotes', 'requested_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'quotes', 'expires_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'quotes', 'quote_status', { type: Sequelize.DataTypes.ENUM, values: ['requested','in_review','sent','accepted','declined','expired'], }, { transaction } ); await queryInterface.addColumn( 'quotes', 'quote_total', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'quotes', 'notes', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'quote_items', 'quoteId', { type: Sequelize.DataTypes.UUID, references: { model: 'quotes', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'quote_items', 'productId', { type: Sequelize.DataTypes.UUID, references: { model: 'products', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'quote_items', 'quantity_cases', { type: Sequelize.DataTypes.INTEGER, }, { transaction } ); await queryInterface.addColumn( 'quote_items', 'case_price', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'quote_items', 'line_total', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'quote_items', 'line_notes', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'sample_requests', 'sample_request_number', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'sample_requests', 'accountId', { type: Sequelize.DataTypes.UUID, references: { model: 'accounts', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'sample_requests', 'locationId', { type: Sequelize.DataTypes.UUID, references: { model: 'locations', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'sample_requests', 'requested_byId', { type: Sequelize.DataTypes.UUID, references: { model: 'users', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'sample_requests', 'productId', { type: Sequelize.DataTypes.UUID, references: { model: 'products', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'sample_requests', 'sample_quantity', { type: Sequelize.DataTypes.INTEGER, }, { transaction } ); await queryInterface.addColumn( 'sample_requests', 'requested_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'sample_requests', 'needed_by', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'sample_requests', 'sample_status', { type: Sequelize.DataTypes.ENUM, values: ['requested','approved','shipped','delivered','declined','cancelled'], }, { transaction } ); await queryInterface.addColumn( 'sample_requests', 'notes', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'saved_lists', 'accountId', { type: Sequelize.DataTypes.UUID, references: { model: 'accounts', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'saved_lists', 'ownerId', { type: Sequelize.DataTypes.UUID, references: { model: 'users', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'saved_lists', 'list_name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'saved_lists', 'list_type', { type: Sequelize.DataTypes.ENUM, values: ['reorder','favorites','par','seasonal'], }, { transaction } ); await queryInterface.addColumn( 'saved_lists', 'notes', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'saved_list_items', 'saved_listId', { type: Sequelize.DataTypes.UUID, references: { model: 'saved_lists', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'saved_list_items', 'productId', { type: Sequelize.DataTypes.UUID, references: { model: 'products', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'saved_list_items', 'default_quantity_cases', { type: Sequelize.DataTypes.INTEGER, }, { transaction } ); await queryInterface.addColumn( 'saved_list_items', 'notes', { type: Sequelize.DataTypes.TEXT, }, { 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( 'saved_list_items', 'notes', { transaction } ); await queryInterface.removeColumn( 'saved_list_items', 'default_quantity_cases', { transaction } ); await queryInterface.removeColumn( 'saved_list_items', 'productId', { transaction } ); await queryInterface.removeColumn( 'saved_list_items', 'saved_listId', { transaction } ); await queryInterface.removeColumn( 'saved_lists', 'notes', { transaction } ); await queryInterface.removeColumn( 'saved_lists', 'list_type', { transaction } ); await queryInterface.removeColumn( 'saved_lists', 'list_name', { transaction } ); await queryInterface.removeColumn( 'saved_lists', 'ownerId', { transaction } ); await queryInterface.removeColumn( 'saved_lists', 'accountId', { transaction } ); await queryInterface.removeColumn( 'sample_requests', 'notes', { transaction } ); await queryInterface.removeColumn( 'sample_requests', 'sample_status', { transaction } ); await queryInterface.removeColumn( 'sample_requests', 'needed_by', { transaction } ); await queryInterface.removeColumn( 'sample_requests', 'requested_at', { transaction } ); await queryInterface.removeColumn( 'sample_requests', 'sample_quantity', { transaction } ); await queryInterface.removeColumn( 'sample_requests', 'productId', { transaction } ); await queryInterface.removeColumn( 'sample_requests', 'requested_byId', { transaction } ); await queryInterface.removeColumn( 'sample_requests', 'locationId', { transaction } ); await queryInterface.removeColumn( 'sample_requests', 'accountId', { transaction } ); await queryInterface.removeColumn( 'sample_requests', 'sample_request_number', { transaction } ); await queryInterface.removeColumn( 'quote_items', 'line_notes', { transaction } ); await queryInterface.removeColumn( 'quote_items', 'line_total', { transaction } ); await queryInterface.removeColumn( 'quote_items', 'case_price', { transaction } ); await queryInterface.removeColumn( 'quote_items', 'quantity_cases', { transaction } ); await queryInterface.removeColumn( 'quote_items', 'productId', { transaction } ); await queryInterface.removeColumn( 'quote_items', 'quoteId', { transaction } ); await queryInterface.removeColumn( 'quotes', 'notes', { transaction } ); await queryInterface.removeColumn( 'quotes', 'quote_total', { transaction } ); await queryInterface.removeColumn( 'quotes', 'quote_status', { transaction } ); await queryInterface.removeColumn( 'quotes', 'expires_at', { transaction } ); await queryInterface.removeColumn( 'quotes', 'requested_at', { transaction } ); await queryInterface.removeColumn( 'quotes', 'ownerId', { transaction } ); await queryInterface.removeColumn( 'quotes', 'requested_byId', { transaction } ); await queryInterface.removeColumn( 'quotes', 'locationId', { transaction } ); await queryInterface.removeColumn( 'quotes', 'accountId', { transaction } ); await queryInterface.removeColumn( 'quotes', 'quote_number', { transaction } ); await queryInterface.removeColumn( 'shipments', 'shipment_status', { transaction } ); await queryInterface.removeColumn( 'shipments', 'delivered_at', { transaction } ); await queryInterface.removeColumn( 'shipments', 'shipped_at', { transaction } ); await queryInterface.removeColumn( 'shipments', 'tracking_number', { transaction } ); await queryInterface.removeColumn( 'shipments', 'carrier', { transaction } ); await queryInterface.removeColumn( 'shipments', 'shipment_number', { transaction } ); await queryInterface.removeColumn( 'shipments', 'orderId', { transaction } ); await queryInterface.removeColumn( 'order_items', 'line_notes', { transaction } ); await queryInterface.removeColumn( 'order_items', 'fulfillment_status', { transaction } ); await queryInterface.removeColumn( 'order_items', 'line_total', { transaction } ); await queryInterface.removeColumn( 'order_items', 'case_price', { transaction } ); await queryInterface.removeColumn( 'order_items', 'quantity_cases', { transaction } ); await queryInterface.removeColumn( 'order_items', 'productId', { transaction } ); await queryInterface.removeColumn( 'order_items', 'orderId', { transaction } ); await queryInterface.removeColumn( 'orders', 'internal_notes', { transaction } ); await queryInterface.removeColumn( 'orders', 'buyer_notes', { transaction } ); await queryInterface.removeColumn( 'orders', 'order_total', { transaction } ); await queryInterface.removeColumn( 'orders', 'shipping_total', { transaction } ); await queryInterface.removeColumn( 'orders', 'tax_total', { transaction } ); await queryInterface.removeColumn( 'orders', 'subtotal', { transaction } ); await queryInterface.removeColumn( 'orders', 'payment_terms', { transaction } ); await queryInterface.removeColumn( 'orders', 'order_status', { transaction } ); await queryInterface.removeColumn( 'orders', 'promised_delivery_date', { transaction } ); await queryInterface.removeColumn( 'orders', 'requested_delivery_date', { transaction } ); await queryInterface.removeColumn( 'orders', 'ordered_at', { transaction } ); await queryInterface.removeColumn( 'orders', 'po_number', { transaction } ); await queryInterface.removeColumn( 'orders', 'buyerId', { transaction } ); await queryInterface.removeColumn( 'orders', 'locationId', { transaction } ); await queryInterface.removeColumn( 'orders', 'accountId', { transaction } ); await queryInterface.removeColumn( 'orders', 'order_number', { transaction } ); await queryInterface.removeColumn( 'cart_items', 'line_notes', { transaction } ); await queryInterface.removeColumn( 'cart_items', 'case_price', { transaction } ); await queryInterface.removeColumn( 'cart_items', 'unit_price', { transaction } ); await queryInterface.removeColumn( 'cart_items', 'quantity_cases', { transaction } ); await queryInterface.removeColumn( 'cart_items', 'productId', { transaction } ); await queryInterface.removeColumn( 'cart_items', 'cartId', { transaction } ); await queryInterface.removeColumn( 'carts', 'buyer_notes', { transaction } ); await queryInterface.removeColumn( 'carts', 'requested_delivery_date', { transaction } ); await queryInterface.removeColumn( 'carts', 'po_number', { transaction } ); await queryInterface.removeColumn( 'carts', 'cart_status', { transaction } ); await queryInterface.removeColumn( 'carts', 'buyerId', { transaction } ); await queryInterface.removeColumn( 'carts', 'locationId', { transaction } ); await queryInterface.removeColumn( 'carts', 'accountId', { transaction } ); await queryInterface.removeColumn( 'account_price_lists', 'is_primary', { transaction } ); await queryInterface.removeColumn( 'account_price_lists', 'effective_end', { transaction } ); await queryInterface.removeColumn( 'account_price_lists', 'effective_start', { transaction } ); await queryInterface.removeColumn( 'account_price_lists', 'price_listId', { transaction } ); await queryInterface.removeColumn( 'account_price_lists', 'accountId', { transaction } ); await queryInterface.removeColumn( 'price_list_items', 'effective_end', { transaction } ); await queryInterface.removeColumn( 'price_list_items', 'effective_start', { transaction } ); await queryInterface.removeColumn( 'price_list_items', 'min_case_qty', { transaction } ); await queryInterface.removeColumn( 'price_list_items', 'unit_price', { transaction } ); await queryInterface.removeColumn( 'price_list_items', 'case_price', { transaction } ); await queryInterface.removeColumn( 'price_list_items', 'productId', { transaction } ); await queryInterface.removeColumn( 'price_list_items', 'price_listId', { transaction } ); await queryInterface.removeColumn( 'price_lists', 'notes', { transaction } ); await queryInterface.removeColumn( 'price_lists', 'is_active', { transaction } ); await queryInterface.removeColumn( 'price_lists', 'effective_end', { transaction } ); await queryInterface.removeColumn( 'price_lists', 'effective_start', { transaction } ); await queryInterface.removeColumn( 'price_lists', 'price_list_type', { transaction } ); await queryInterface.removeColumn( 'price_lists', 'price_list_name', { transaction } ); await queryInterface.removeColumn( 'inventory_items', 'last_sync_at', { transaction } ); await queryInterface.removeColumn( 'inventory_items', 'available_cases', { transaction } ); await queryInterface.removeColumn( 'inventory_items', 'allocated_cases', { transaction } ); await queryInterface.removeColumn( 'inventory_items', 'on_hand_cases', { transaction } ); await queryInterface.removeColumn( 'inventory_items', 'warehouse_name', { transaction } ); await queryInterface.removeColumn( 'inventory_items', 'productId', { transaction } ); await queryInterface.removeColumn( 'products', 'is_sample_eligible', { transaction } ); await queryInterface.removeColumn( 'products', 'certifications', { transaction } ); await queryInterface.removeColumn( 'products', 'allergens', { transaction } ); await queryInterface.removeColumn( 'products', 'product_status', { transaction } ); await queryInterface.removeColumn( 'products', 'temperature_zone', { transaction } ); await queryInterface.removeColumn( 'products', 'moq_cases', { transaction } ); await queryInterface.removeColumn( 'products', 'uom', { transaction } ); await queryInterface.removeColumn( 'products', 'case_weight_lbs', { transaction } ); await queryInterface.removeColumn( 'products', 'unit_weight_lbs', { transaction } ); await queryInterface.removeColumn( 'products', 'units_per_case', { transaction } ); await queryInterface.removeColumn( 'products', 'pack_size', { transaction } ); await queryInterface.removeColumn( 'products', 'long_description', { transaction } ); await queryInterface.removeColumn( 'products', 'short_description', { transaction } ); await queryInterface.removeColumn( 'products', 'categoryId', { transaction } ); await queryInterface.removeColumn( 'products', 'brand', { transaction } ); await queryInterface.removeColumn( 'products', 'product_name', { transaction } ); await queryInterface.removeColumn( 'products', 'sku', { transaction } ); await queryInterface.removeColumn( 'product_categories', 'is_active', { transaction } ); await queryInterface.removeColumn( 'product_categories', 'parent_categoryId', { transaction } ); await queryInterface.removeColumn( 'product_categories', 'category_description', { transaction } ); await queryInterface.removeColumn( 'product_categories', 'category_name', { transaction } ); await queryInterface.removeColumn( 'contacts', 'is_active', { transaction } ); await queryInterface.removeColumn( 'contacts', 'can_see_invoices', { transaction } ); await queryInterface.removeColumn( 'contacts', 'can_place_orders', { transaction } ); await queryInterface.removeColumn( 'contacts', 'is_primary', { transaction } ); await queryInterface.removeColumn( 'contacts', 'role_title', { transaction } ); await queryInterface.removeColumn( 'contacts', 'phone', { transaction } ); await queryInterface.removeColumn( 'contacts', 'email', { transaction } ); await queryInterface.removeColumn( 'contacts', 'contact_name', { transaction } ); await queryInterface.removeColumn( 'contacts', 'locationId', { transaction } ); await queryInterface.removeColumn( 'contacts', 'accountId', { transaction } ); await queryInterface.removeColumn( 'locations', 'is_active', { transaction } ); await queryInterface.removeColumn( 'locations', 'default_contactId', { transaction } ); await queryInterface.removeColumn( 'locations', 'delivery_instructions', { transaction } ); await queryInterface.removeColumn( 'locations', 'country', { transaction } ); await queryInterface.removeColumn( 'locations', 'postal_code', { transaction } ); await queryInterface.removeColumn( 'locations', 'state', { transaction } ); await queryInterface.removeColumn( 'locations', 'city', { transaction } ); await queryInterface.removeColumn( 'locations', 'address_line_2', { transaction } ); await queryInterface.removeColumn( 'locations', 'address_line_1', { transaction } ); await queryInterface.removeColumn( 'locations', 'location_type', { transaction } ); await queryInterface.removeColumn( 'locations', 'location_name', { transaction } ); await queryInterface.removeColumn( 'locations', 'accountId', { transaction } ); await queryInterface.removeColumn( 'accounts', 'is_active', { transaction } ); await queryInterface.removeColumn( 'accounts', 'notes', { transaction } ); await queryInterface.removeColumn( 'accounts', 'assigned_sales_repId', { transaction } ); await queryInterface.removeColumn( 'accounts', 'default_price_listId', { transaction } ); await queryInterface.removeColumn( 'accounts', 'credit_limit', { transaction } ); await queryInterface.removeColumn( 'accounts', 'credit_status', { transaction } ); await queryInterface.removeColumn( 'accounts', 'is_tax_exempt', { transaction } ); await queryInterface.removeColumn( 'accounts', 'tax_exempt_number', { transaction } ); await queryInterface.removeColumn( 'accounts', 'account_number', { transaction } ); await queryInterface.removeColumn( 'accounts', 'account_type', { transaction } ); await queryInterface.removeColumn( 'accounts', 'account_name', { transaction } ); await queryInterface.removeColumn( 'permissions', 'name', { transaction } ); await queryInterface.removeColumn( 'roles', 'role_customization', { transaction } ); await queryInterface.removeColumn( 'roles', 'name', { transaction } ); await queryInterface.removeColumn( 'users', 'app_roleId', { 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('saved_list_items', { transaction }); await queryInterface.dropTable('saved_lists', { transaction }); await queryInterface.dropTable('sample_requests', { transaction }); await queryInterface.dropTable('quote_items', { transaction }); await queryInterface.dropTable('quotes', { transaction }); await queryInterface.dropTable('shipments', { transaction }); await queryInterface.dropTable('order_items', { transaction }); await queryInterface.dropTable('orders', { transaction }); await queryInterface.dropTable('cart_items', { transaction }); await queryInterface.dropTable('carts', { transaction }); await queryInterface.dropTable('account_price_lists', { transaction }); await queryInterface.dropTable('price_list_items', { transaction }); await queryInterface.dropTable('price_lists', { transaction }); await queryInterface.dropTable('inventory_items', { transaction }); await queryInterface.dropTable('products', { transaction }); await queryInterface.dropTable('product_categories', { transaction }); await queryInterface.dropTable('contacts', { transaction }); await queryInterface.dropTable('locations', { transaction }); await queryInterface.dropTable('accounts', { transaction }); await queryInterface.dropTable('permissions', { transaction }); await queryInterface.dropTable('roles', { transaction }); await queryInterface.dropTable('users', { transaction }); await transaction.commit(); } catch (err) { await transaction.rollback(); throw err; } } };