class EnhanceRulesTableForSync < ActiveRecord::Migration[8.1] def change # Remove rule_sets relationship (we're skipping rule sets for Phase 1) if foreign_key_exists?(:rules, :rule_sets) remove_foreign_key :rules, :rule_sets end if column_exists?(:rules, :rule_set_id) remove_column :rules, :rule_set_id end change_table :rules do |t| # Add source field to track rule origin unless column_exists?(:rules, :source) t.string :source, limit: 100 end # Ensure core fields exist with proper types unless column_exists?(:rules, :rule_type) t.string :rule_type, null: false end unless column_exists?(:rules, :action) t.string :action, null: false end unless column_exists?(:rules, :conditions) t.json :conditions, null: false, default: {} end unless column_exists?(:rules, :metadata) t.json :metadata, default: {} end unless column_exists?(:rules, :priority) t.integer :priority end unless column_exists?(:rules, :expires_at) t.datetime :expires_at end unless column_exists?(:rules, :enabled) t.boolean :enabled, default: true, null: false end end # Add indexes for efficient sync queries add_index :rules, [:updated_at, :id], if_not_exists: true, name: "idx_rules_sync" add_index :rules, :enabled, if_not_exists: true add_index :rules, :expires_at, if_not_exists: true add_index :rules, :source, if_not_exists: true add_index :rules, :rule_type, if_not_exists: true add_index :rules, [:rule_type, :enabled], if_not_exists: true, name: "idx_rules_type_enabled" end end