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('organizations', { 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('events', { 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('venues', { 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('vendors', { 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('event_venues', { 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('event_vendors', { 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('tasks', { 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('schedule_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('guest_groups', { 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('guests', { 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('budget_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('budget_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('notes', { 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('files_library', { 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('activity_logs', { 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( 'users', 'organizationsId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', 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( 'roles', 'globalAccess', { type: Sequelize.DataTypes.BOOLEAN, defaultValue: false, allowNull: false, }, { transaction } ); await queryInterface.addColumn( 'permissions', 'name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'organizations', 'name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'events', 'organizationId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'events', 'name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'events', 'event_type', { type: Sequelize.DataTypes.ENUM, values: ['wedding','corporate','birthday','conference','festival','fundraiser','private_party','other'], }, { transaction } ); await queryInterface.addColumn( 'events', 'status', { type: Sequelize.DataTypes.ENUM, values: ['draft','planning','confirmed','in_progress','completed','cancelled'], }, { transaction } ); await queryInterface.addColumn( 'events', 'start_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'events', 'end_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'events', 'timezone', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'events', 'location_name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'events', 'address_line1', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'events', 'address_line2', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'events', 'city', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'events', 'state_region', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'events', 'postal_code', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'events', 'country', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'events', 'ownerId', { type: Sequelize.DataTypes.UUID, references: { model: 'users', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'events', 'expected_guest_count', { type: Sequelize.DataTypes.INTEGER, }, { transaction } ); await queryInterface.addColumn( 'events', 'budget_total', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'events', 'budget_currency_rate', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'events', 'currency_code', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'events', 'public_slug', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'events', 'client_portal_enabled', { type: Sequelize.DataTypes.BOOLEAN, defaultValue: false, allowNull: false, }, { transaction } ); await queryInterface.addColumn( 'events', 'locked_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'events', 'color_label', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'events', 'description', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'venues', 'organizationId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'venues', 'name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'venues', 'venue_type', { type: Sequelize.DataTypes.ENUM, values: ['hotel','banquet_hall','restaurant','outdoor','conference_center','private_home','club','church','other'], }, { transaction } ); await queryInterface.addColumn( 'venues', 'website', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'venues', 'email', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'venues', 'phone', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'venues', 'address_line1', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'venues', 'address_line2', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'venues', 'city', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'venues', 'state_region', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'venues', 'postal_code', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'venues', 'country', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'venues', 'capacity', { type: Sequelize.DataTypes.INTEGER, }, { transaction } ); await queryInterface.addColumn( 'venues', 'parking_available', { type: Sequelize.DataTypes.BOOLEAN, defaultValue: false, allowNull: false, }, { transaction } ); await queryInterface.addColumn( 'venues', 'accessible', { type: Sequelize.DataTypes.BOOLEAN, defaultValue: false, allowNull: false, }, { transaction } ); await queryInterface.addColumn( 'venues', 'base_rental_fee', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'venues', 'currency_code', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'venues', 'notes', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'vendors', 'organizationId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'vendors', 'name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'vendors', 'vendor_type', { type: Sequelize.DataTypes.ENUM, values: ['catering','photography','videography','music','dj','florist','rentals','lighting','av','decor','planner','security','transportation','bakery','makeup_hair','other'], }, { transaction } ); await queryInterface.addColumn( 'vendors', 'website', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'vendors', 'email', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'vendors', 'phone', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'vendors', 'tax_identifier', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'vendors', 'status', { type: Sequelize.DataTypes.ENUM, values: ['prospect','requested_quote','quoted','booked','declined','cancelled'], }, { transaction } ); await queryInterface.addColumn( 'vendors', 'estimated_cost', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'vendors', 'deposit_amount', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'vendors', 'deposit_due_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'vendors', 'final_payment_due_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'vendors', 'currency_code', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'vendors', 'notes', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'event_venues', 'eventId', { type: Sequelize.DataTypes.UUID, references: { model: 'events', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'event_venues', 'venueId', { type: Sequelize.DataTypes.UUID, references: { model: 'venues', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'event_venues', 'status', { type: Sequelize.DataTypes.ENUM, values: ['considering','requested','reserved','confirmed','cancelled'], }, { transaction } ); await queryInterface.addColumn( 'event_venues', 'load_in_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'event_venues', 'load_out_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'event_venues', 'rental_fee', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'event_venues', 'deposit_amount', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'event_venues', 'deposit_due_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'event_venues', 'final_payment_due_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'event_venues', 'currency_code', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'event_venues', 'room_names', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'event_venues', 'notes', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'event_venues', 'organizationsId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'event_vendors', 'eventId', { type: Sequelize.DataTypes.UUID, references: { model: 'events', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'event_vendors', 'vendorId', { type: Sequelize.DataTypes.UUID, references: { model: 'vendors', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'event_vendors', 'status', { type: Sequelize.DataTypes.ENUM, values: ['not_contacted','contacted','quoted','booked','in_progress','completed','cancelled'], }, { transaction } ); await queryInterface.addColumn( 'event_vendors', 'service_description', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'event_vendors', 'quoted_amount', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'event_vendors', 'agreed_amount', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'event_vendors', 'deposit_amount', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'event_vendors', 'deposit_due_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'event_vendors', 'final_payment_due_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'event_vendors', 'currency_code', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'event_vendors', 'notes', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'event_vendors', 'organizationsId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'contacts', 'organizationId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'contacts', 'full_name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'contacts', 'company_name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'contacts', 'job_title', { 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', 'alternate_phone', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'contacts', 'contact_type', { type: Sequelize.DataTypes.ENUM, values: ['venue','vendor','client','guest','other'], }, { transaction } ); await queryInterface.addColumn( 'contacts', 'vendorId', { type: Sequelize.DataTypes.UUID, references: { model: 'vendors', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'contacts', 'venueId', { type: Sequelize.DataTypes.UUID, references: { model: 'venues', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'contacts', 'notes', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'tasks', 'eventId', { type: Sequelize.DataTypes.UUID, references: { model: 'events', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'tasks', 'title', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'tasks', 'status', { type: Sequelize.DataTypes.ENUM, values: ['todo','in_progress','blocked','done','cancelled'], }, { transaction } ); await queryInterface.addColumn( 'tasks', 'priority', { type: Sequelize.DataTypes.ENUM, values: ['low','medium','high','urgent'], }, { transaction } ); await queryInterface.addColumn( 'tasks', 'assigneeId', { type: Sequelize.DataTypes.UUID, references: { model: 'users', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'tasks', 'reporterId', { type: Sequelize.DataTypes.UUID, references: { model: 'users', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'tasks', 'due_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'tasks', 'start_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'tasks', 'completed_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'tasks', 'sort_order', { type: Sequelize.DataTypes.INTEGER, }, { transaction } ); await queryInterface.addColumn( 'tasks', 'estimated_hours', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'tasks', 'actual_hours', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'tasks', 'description', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'tasks', 'organizationsId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'schedule_items', 'eventId', { type: Sequelize.DataTypes.UUID, references: { model: 'events', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'schedule_items', 'title', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'schedule_items', 'item_type', { type: Sequelize.DataTypes.ENUM, values: ['setup','ceremony','reception','speech','meal','performance','break','tear_down','other'], }, { transaction } ); await queryInterface.addColumn( 'schedule_items', 'start_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'schedule_items', 'end_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'schedule_items', 'ownerId', { type: Sequelize.DataTypes.UUID, references: { model: 'users', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'schedule_items', 'venueId', { type: Sequelize.DataTypes.UUID, references: { model: 'venues', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'schedule_items', 'vendorId', { type: Sequelize.DataTypes.UUID, references: { model: 'vendors', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'schedule_items', 'location_detail', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'schedule_items', 'status', { type: Sequelize.DataTypes.ENUM, values: ['planned','confirmed','in_progress','completed','cancelled'], }, { transaction } ); await queryInterface.addColumn( 'schedule_items', 'sort_order', { type: Sequelize.DataTypes.INTEGER, }, { transaction } ); await queryInterface.addColumn( 'schedule_items', 'notes', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'schedule_items', 'organizationsId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'guest_groups', 'eventId', { type: Sequelize.DataTypes.UUID, references: { model: 'events', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'guest_groups', 'name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'guest_groups', 'group_type', { type: Sequelize.DataTypes.ENUM, values: ['family','friends','coworkers','vip','vendors','other'], }, { transaction } ); await queryInterface.addColumn( 'guest_groups', 'notes', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'guest_groups', 'organizationsId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'guests', 'eventId', { type: Sequelize.DataTypes.UUID, references: { model: 'events', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'guests', 'guest_groupId', { type: Sequelize.DataTypes.UUID, references: { model: 'guest_groups', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'guests', 'full_name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'guests', 'email', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'guests', 'phone', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'guests', 'rsvp_status', { type: Sequelize.DataTypes.ENUM, values: ['not_invited','invited','yes','no','maybe','waitlist'], }, { transaction } ); await queryInterface.addColumn( 'guests', 'party_size', { type: Sequelize.DataTypes.INTEGER, }, { transaction } ); await queryInterface.addColumn( 'guests', 'meal_preference', { type: Sequelize.DataTypes.ENUM, values: ['no_preference','vegetarian','vegan','pescatarian','gluten_free','kosher','halal','other'], }, { transaction } ); await queryInterface.addColumn( 'guests', 'dietary_notes', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'guests', 'plus_one_allowed', { type: Sequelize.DataTypes.BOOLEAN, defaultValue: false, allowNull: false, }, { transaction } ); await queryInterface.addColumn( 'guests', 'plus_one_name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'guests', 'address_line1', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'guests', 'address_line2', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'guests', 'city', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'guests', 'state_region', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'guests', 'postal_code', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'guests', 'country', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'guests', 'invite_delivery', { type: Sequelize.DataTypes.ENUM, values: ['email','sms','postal_mail','hand_delivered'], }, { transaction } ); await queryInterface.addColumn( 'guests', 'invited_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'guests', 'responded_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'guests', 'notes', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'guests', 'organizationsId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'budget_categories', 'organizationId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'budget_categories', 'name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'budget_categories', 'description', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'budget_items', 'eventId', { type: Sequelize.DataTypes.UUID, references: { model: 'events', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'budget_items', 'categoryId', { type: Sequelize.DataTypes.UUID, references: { model: 'budget_categories', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'budget_items', 'title', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'budget_items', 'status', { type: Sequelize.DataTypes.ENUM, values: ['planned','approved','committed','paid','cancelled'], }, { transaction } ); await queryInterface.addColumn( 'budget_items', 'estimated_amount', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'budget_items', 'quoted_amount', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'budget_items', 'actual_amount', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'budget_items', 'tax_amount', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'budget_items', 'discount_amount', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'budget_items', 'currency_code', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'budget_items', 'due_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'budget_items', 'paid_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'budget_items', 'vendorId', { type: Sequelize.DataTypes.UUID, references: { model: 'vendors', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'budget_items', 'venueId', { type: Sequelize.DataTypes.UUID, references: { model: 'venues', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'budget_items', 'payment_method', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'budget_items', 'reference_code', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'budget_items', 'notes', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'budget_items', 'organizationsId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'notes', 'eventId', { type: Sequelize.DataTypes.UUID, references: { model: 'events', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'notes', 'subject_type', { type: Sequelize.DataTypes.ENUM, values: ['event','task','vendor','venue','guest','budget_item','schedule_item'], }, { transaction } ); await queryInterface.addColumn( 'notes', 'subject_key', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'notes', 'title', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'notes', 'body', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'notes', 'authorId', { type: Sequelize.DataTypes.UUID, references: { model: 'users', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'notes', 'pinned_until', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'notes', 'is_private', { type: Sequelize.DataTypes.BOOLEAN, defaultValue: false, allowNull: false, }, { transaction } ); await queryInterface.addColumn( 'notes', 'organizationsId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'files_library', 'organizationId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'files_library', 'eventId', { type: Sequelize.DataTypes.UUID, references: { model: 'events', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'files_library', 'title', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'files_library', 'file_type', { type: Sequelize.DataTypes.ENUM, values: ['contract','invoice','proposal','run_of_show','floorplan','photo','other'], }, { transaction } ); await queryInterface.addColumn( 'files_library', 'uploaded_byId', { type: Sequelize.DataTypes.UUID, references: { model: 'users', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'files_library', 'uploaded_at', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'files_library', 'notes', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'activity_logs', 'organizationId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'activity_logs', 'eventId', { type: Sequelize.DataTypes.UUID, references: { model: 'events', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'activity_logs', 'actorId', { type: Sequelize.DataTypes.UUID, references: { model: 'users', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'activity_logs', 'action', { type: Sequelize.DataTypes.ENUM, values: ['created','updated','deleted','status_changed','assigned','commented','uploaded_file','sent_invite','rsvp_updated','payment_recorded'], }, { transaction } ); await queryInterface.addColumn( 'activity_logs', 'entity_name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'activity_logs', 'entity_key', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'activity_logs', 'message', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'activity_logs', 'occurred_at', { type: Sequelize.DataTypes.DATE, }, { 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( 'activity_logs', 'occurred_at', { transaction } ); await queryInterface.removeColumn( 'activity_logs', 'message', { transaction } ); await queryInterface.removeColumn( 'activity_logs', 'entity_key', { transaction } ); await queryInterface.removeColumn( 'activity_logs', 'entity_name', { transaction } ); await queryInterface.removeColumn( 'activity_logs', 'action', { transaction } ); await queryInterface.removeColumn( 'activity_logs', 'actorId', { transaction } ); await queryInterface.removeColumn( 'activity_logs', 'eventId', { transaction } ); await queryInterface.removeColumn( 'activity_logs', 'organizationId', { transaction } ); await queryInterface.removeColumn( 'files_library', 'notes', { transaction } ); await queryInterface.removeColumn( 'files_library', 'uploaded_at', { transaction } ); await queryInterface.removeColumn( 'files_library', 'uploaded_byId', { transaction } ); await queryInterface.removeColumn( 'files_library', 'file_type', { transaction } ); await queryInterface.removeColumn( 'files_library', 'title', { transaction } ); await queryInterface.removeColumn( 'files_library', 'eventId', { transaction } ); await queryInterface.removeColumn( 'files_library', 'organizationId', { transaction } ); await queryInterface.removeColumn( 'notes', 'organizationsId', { transaction } ); await queryInterface.removeColumn( 'notes', 'is_private', { transaction } ); await queryInterface.removeColumn( 'notes', 'pinned_until', { transaction } ); await queryInterface.removeColumn( 'notes', 'authorId', { transaction } ); await queryInterface.removeColumn( 'notes', 'body', { transaction } ); await queryInterface.removeColumn( 'notes', 'title', { transaction } ); await queryInterface.removeColumn( 'notes', 'subject_key', { transaction } ); await queryInterface.removeColumn( 'notes', 'subject_type', { transaction } ); await queryInterface.removeColumn( 'notes', 'eventId', { transaction } ); await queryInterface.removeColumn( 'budget_items', 'organizationsId', { transaction } ); await queryInterface.removeColumn( 'budget_items', 'notes', { transaction } ); await queryInterface.removeColumn( 'budget_items', 'reference_code', { transaction } ); await queryInterface.removeColumn( 'budget_items', 'payment_method', { transaction } ); await queryInterface.removeColumn( 'budget_items', 'venueId', { transaction } ); await queryInterface.removeColumn( 'budget_items', 'vendorId', { transaction } ); await queryInterface.removeColumn( 'budget_items', 'paid_at', { transaction } ); await queryInterface.removeColumn( 'budget_items', 'due_at', { transaction } ); await queryInterface.removeColumn( 'budget_items', 'currency_code', { transaction } ); await queryInterface.removeColumn( 'budget_items', 'discount_amount', { transaction } ); await queryInterface.removeColumn( 'budget_items', 'tax_amount', { transaction } ); await queryInterface.removeColumn( 'budget_items', 'actual_amount', { transaction } ); await queryInterface.removeColumn( 'budget_items', 'quoted_amount', { transaction } ); await queryInterface.removeColumn( 'budget_items', 'estimated_amount', { transaction } ); await queryInterface.removeColumn( 'budget_items', 'status', { transaction } ); await queryInterface.removeColumn( 'budget_items', 'title', { transaction } ); await queryInterface.removeColumn( 'budget_items', 'categoryId', { transaction } ); await queryInterface.removeColumn( 'budget_items', 'eventId', { transaction } ); await queryInterface.removeColumn( 'budget_categories', 'description', { transaction } ); await queryInterface.removeColumn( 'budget_categories', 'name', { transaction } ); await queryInterface.removeColumn( 'budget_categories', 'organizationId', { transaction } ); await queryInterface.removeColumn( 'guests', 'organizationsId', { transaction } ); await queryInterface.removeColumn( 'guests', 'notes', { transaction } ); await queryInterface.removeColumn( 'guests', 'responded_at', { transaction } ); await queryInterface.removeColumn( 'guests', 'invited_at', { transaction } ); await queryInterface.removeColumn( 'guests', 'invite_delivery', { transaction } ); await queryInterface.removeColumn( 'guests', 'country', { transaction } ); await queryInterface.removeColumn( 'guests', 'postal_code', { transaction } ); await queryInterface.removeColumn( 'guests', 'state_region', { transaction } ); await queryInterface.removeColumn( 'guests', 'city', { transaction } ); await queryInterface.removeColumn( 'guests', 'address_line2', { transaction } ); await queryInterface.removeColumn( 'guests', 'address_line1', { transaction } ); await queryInterface.removeColumn( 'guests', 'plus_one_name', { transaction } ); await queryInterface.removeColumn( 'guests', 'plus_one_allowed', { transaction } ); await queryInterface.removeColumn( 'guests', 'dietary_notes', { transaction } ); await queryInterface.removeColumn( 'guests', 'meal_preference', { transaction } ); await queryInterface.removeColumn( 'guests', 'party_size', { transaction } ); await queryInterface.removeColumn( 'guests', 'rsvp_status', { transaction } ); await queryInterface.removeColumn( 'guests', 'phone', { transaction } ); await queryInterface.removeColumn( 'guests', 'email', { transaction } ); await queryInterface.removeColumn( 'guests', 'full_name', { transaction } ); await queryInterface.removeColumn( 'guests', 'guest_groupId', { transaction } ); await queryInterface.removeColumn( 'guests', 'eventId', { transaction } ); await queryInterface.removeColumn( 'guest_groups', 'organizationsId', { transaction } ); await queryInterface.removeColumn( 'guest_groups', 'notes', { transaction } ); await queryInterface.removeColumn( 'guest_groups', 'group_type', { transaction } ); await queryInterface.removeColumn( 'guest_groups', 'name', { transaction } ); await queryInterface.removeColumn( 'guest_groups', 'eventId', { transaction } ); await queryInterface.removeColumn( 'schedule_items', 'organizationsId', { transaction } ); await queryInterface.removeColumn( 'schedule_items', 'notes', { transaction } ); await queryInterface.removeColumn( 'schedule_items', 'sort_order', { transaction } ); await queryInterface.removeColumn( 'schedule_items', 'status', { transaction } ); await queryInterface.removeColumn( 'schedule_items', 'location_detail', { transaction } ); await queryInterface.removeColumn( 'schedule_items', 'vendorId', { transaction } ); await queryInterface.removeColumn( 'schedule_items', 'venueId', { transaction } ); await queryInterface.removeColumn( 'schedule_items', 'ownerId', { transaction } ); await queryInterface.removeColumn( 'schedule_items', 'end_at', { transaction } ); await queryInterface.removeColumn( 'schedule_items', 'start_at', { transaction } ); await queryInterface.removeColumn( 'schedule_items', 'item_type', { transaction } ); await queryInterface.removeColumn( 'schedule_items', 'title', { transaction } ); await queryInterface.removeColumn( 'schedule_items', 'eventId', { transaction } ); await queryInterface.removeColumn( 'tasks', 'organizationsId', { transaction } ); await queryInterface.removeColumn( 'tasks', 'description', { transaction } ); await queryInterface.removeColumn( 'tasks', 'actual_hours', { transaction } ); await queryInterface.removeColumn( 'tasks', 'estimated_hours', { transaction } ); await queryInterface.removeColumn( 'tasks', 'sort_order', { transaction } ); await queryInterface.removeColumn( 'tasks', 'completed_at', { transaction } ); await queryInterface.removeColumn( 'tasks', 'start_at', { transaction } ); await queryInterface.removeColumn( 'tasks', 'due_at', { transaction } ); await queryInterface.removeColumn( 'tasks', 'reporterId', { transaction } ); await queryInterface.removeColumn( 'tasks', 'assigneeId', { transaction } ); await queryInterface.removeColumn( 'tasks', 'priority', { transaction } ); await queryInterface.removeColumn( 'tasks', 'status', { transaction } ); await queryInterface.removeColumn( 'tasks', 'title', { transaction } ); await queryInterface.removeColumn( 'tasks', 'eventId', { transaction } ); await queryInterface.removeColumn( 'contacts', 'notes', { transaction } ); await queryInterface.removeColumn( 'contacts', 'venueId', { transaction } ); await queryInterface.removeColumn( 'contacts', 'vendorId', { transaction } ); await queryInterface.removeColumn( 'contacts', 'contact_type', { transaction } ); await queryInterface.removeColumn( 'contacts', 'alternate_phone', { transaction } ); await queryInterface.removeColumn( 'contacts', 'phone', { transaction } ); await queryInterface.removeColumn( 'contacts', 'email', { transaction } ); await queryInterface.removeColumn( 'contacts', 'job_title', { transaction } ); await queryInterface.removeColumn( 'contacts', 'company_name', { transaction } ); await queryInterface.removeColumn( 'contacts', 'full_name', { transaction } ); await queryInterface.removeColumn( 'contacts', 'organizationId', { transaction } ); await queryInterface.removeColumn( 'event_vendors', 'organizationsId', { transaction } ); await queryInterface.removeColumn( 'event_vendors', 'notes', { transaction } ); await queryInterface.removeColumn( 'event_vendors', 'currency_code', { transaction } ); await queryInterface.removeColumn( 'event_vendors', 'final_payment_due_at', { transaction } ); await queryInterface.removeColumn( 'event_vendors', 'deposit_due_at', { transaction } ); await queryInterface.removeColumn( 'event_vendors', 'deposit_amount', { transaction } ); await queryInterface.removeColumn( 'event_vendors', 'agreed_amount', { transaction } ); await queryInterface.removeColumn( 'event_vendors', 'quoted_amount', { transaction } ); await queryInterface.removeColumn( 'event_vendors', 'service_description', { transaction } ); await queryInterface.removeColumn( 'event_vendors', 'status', { transaction } ); await queryInterface.removeColumn( 'event_vendors', 'vendorId', { transaction } ); await queryInterface.removeColumn( 'event_vendors', 'eventId', { transaction } ); await queryInterface.removeColumn( 'event_venues', 'organizationsId', { transaction } ); await queryInterface.removeColumn( 'event_venues', 'notes', { transaction } ); await queryInterface.removeColumn( 'event_venues', 'room_names', { transaction } ); await queryInterface.removeColumn( 'event_venues', 'currency_code', { transaction } ); await queryInterface.removeColumn( 'event_venues', 'final_payment_due_at', { transaction } ); await queryInterface.removeColumn( 'event_venues', 'deposit_due_at', { transaction } ); await queryInterface.removeColumn( 'event_venues', 'deposit_amount', { transaction } ); await queryInterface.removeColumn( 'event_venues', 'rental_fee', { transaction } ); await queryInterface.removeColumn( 'event_venues', 'load_out_at', { transaction } ); await queryInterface.removeColumn( 'event_venues', 'load_in_at', { transaction } ); await queryInterface.removeColumn( 'event_venues', 'status', { transaction } ); await queryInterface.removeColumn( 'event_venues', 'venueId', { transaction } ); await queryInterface.removeColumn( 'event_venues', 'eventId', { transaction } ); await queryInterface.removeColumn( 'vendors', 'notes', { transaction } ); await queryInterface.removeColumn( 'vendors', 'currency_code', { transaction } ); await queryInterface.removeColumn( 'vendors', 'final_payment_due_at', { transaction } ); await queryInterface.removeColumn( 'vendors', 'deposit_due_at', { transaction } ); await queryInterface.removeColumn( 'vendors', 'deposit_amount', { transaction } ); await queryInterface.removeColumn( 'vendors', 'estimated_cost', { transaction } ); await queryInterface.removeColumn( 'vendors', 'status', { transaction } ); await queryInterface.removeColumn( 'vendors', 'tax_identifier', { transaction } ); await queryInterface.removeColumn( 'vendors', 'phone', { transaction } ); await queryInterface.removeColumn( 'vendors', 'email', { transaction } ); await queryInterface.removeColumn( 'vendors', 'website', { transaction } ); await queryInterface.removeColumn( 'vendors', 'vendor_type', { transaction } ); await queryInterface.removeColumn( 'vendors', 'name', { transaction } ); await queryInterface.removeColumn( 'vendors', 'organizationId', { transaction } ); await queryInterface.removeColumn( 'venues', 'notes', { transaction } ); await queryInterface.removeColumn( 'venues', 'currency_code', { transaction } ); await queryInterface.removeColumn( 'venues', 'base_rental_fee', { transaction } ); await queryInterface.removeColumn( 'venues', 'accessible', { transaction } ); await queryInterface.removeColumn( 'venues', 'parking_available', { transaction } ); await queryInterface.removeColumn( 'venues', 'capacity', { transaction } ); await queryInterface.removeColumn( 'venues', 'country', { transaction } ); await queryInterface.removeColumn( 'venues', 'postal_code', { transaction } ); await queryInterface.removeColumn( 'venues', 'state_region', { transaction } ); await queryInterface.removeColumn( 'venues', 'city', { transaction } ); await queryInterface.removeColumn( 'venues', 'address_line2', { transaction } ); await queryInterface.removeColumn( 'venues', 'address_line1', { transaction } ); await queryInterface.removeColumn( 'venues', 'phone', { transaction } ); await queryInterface.removeColumn( 'venues', 'email', { transaction } ); await queryInterface.removeColumn( 'venues', 'website', { transaction } ); await queryInterface.removeColumn( 'venues', 'venue_type', { transaction } ); await queryInterface.removeColumn( 'venues', 'name', { transaction } ); await queryInterface.removeColumn( 'venues', 'organizationId', { transaction } ); await queryInterface.removeColumn( 'events', 'description', { transaction } ); await queryInterface.removeColumn( 'events', 'color_label', { transaction } ); await queryInterface.removeColumn( 'events', 'locked_at', { transaction } ); await queryInterface.removeColumn( 'events', 'client_portal_enabled', { transaction } ); await queryInterface.removeColumn( 'events', 'public_slug', { transaction } ); await queryInterface.removeColumn( 'events', 'currency_code', { transaction } ); await queryInterface.removeColumn( 'events', 'budget_currency_rate', { transaction } ); await queryInterface.removeColumn( 'events', 'budget_total', { transaction } ); await queryInterface.removeColumn( 'events', 'expected_guest_count', { transaction } ); await queryInterface.removeColumn( 'events', 'ownerId', { transaction } ); await queryInterface.removeColumn( 'events', 'country', { transaction } ); await queryInterface.removeColumn( 'events', 'postal_code', { transaction } ); await queryInterface.removeColumn( 'events', 'state_region', { transaction } ); await queryInterface.removeColumn( 'events', 'city', { transaction } ); await queryInterface.removeColumn( 'events', 'address_line2', { transaction } ); await queryInterface.removeColumn( 'events', 'address_line1', { transaction } ); await queryInterface.removeColumn( 'events', 'location_name', { transaction } ); await queryInterface.removeColumn( 'events', 'timezone', { transaction } ); await queryInterface.removeColumn( 'events', 'end_at', { transaction } ); await queryInterface.removeColumn( 'events', 'start_at', { transaction } ); await queryInterface.removeColumn( 'events', 'status', { transaction } ); await queryInterface.removeColumn( 'events', 'event_type', { transaction } ); await queryInterface.removeColumn( 'events', 'name', { transaction } ); await queryInterface.removeColumn( 'events', 'organizationId', { transaction } ); await queryInterface.removeColumn( 'organizations', 'name', { transaction } ); await queryInterface.removeColumn( 'permissions', 'name', { transaction } ); await queryInterface.removeColumn( 'roles', 'globalAccess', { transaction } ); await queryInterface.removeColumn( 'roles', 'role_customization', { transaction } ); await queryInterface.removeColumn( 'roles', 'name', { transaction } ); await queryInterface.removeColumn( 'users', 'organizationsId', { 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('activity_logs', { transaction }); await queryInterface.dropTable('files_library', { transaction }); await queryInterface.dropTable('notes', { transaction }); await queryInterface.dropTable('budget_items', { transaction }); await queryInterface.dropTable('budget_categories', { transaction }); await queryInterface.dropTable('guests', { transaction }); await queryInterface.dropTable('guest_groups', { transaction }); await queryInterface.dropTable('schedule_items', { transaction }); await queryInterface.dropTable('tasks', { transaction }); await queryInterface.dropTable('contacts', { transaction }); await queryInterface.dropTable('event_vendors', { transaction }); await queryInterface.dropTable('event_venues', { transaction }); await queryInterface.dropTable('vendors', { transaction }); await queryInterface.dropTable('venues', { transaction }); await queryInterface.dropTable('events', { transaction }); await queryInterface.dropTable('organizations', { 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; } } };