57 lines
1.7 KiB
Ruby
57 lines
1.7 KiB
Ruby
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
|