# frozen_string_literal: true class AddFamilyPerformanceIndexes < ActiveRecord::Migration[8.0] disable_ddl_transaction! def change # Index for family invitations queries unless index_exists?(:family_invitations, %i[family_id status expires_at], name: 'index_family_invitations_on_family_status_expires') add_index :family_invitations, %i[family_id status expires_at], name: 'index_family_invitations_on_family_status_expires', algorithm: :concurrently end # Index for family membership queries by role unless index_exists?(:family_memberships, %i[family_id role], name: 'index_family_memberships_on_family_and_role') add_index :family_memberships, %i[family_id role], name: 'index_family_memberships_on_family_and_role', algorithm: :concurrently end # Composite index for active invitations unless index_exists?(:family_invitations, %i[status expires_at], name: 'index_family_invitations_on_status_and_expires_at') add_index :family_invitations, %i[status expires_at], name: 'index_family_invitations_on_status_and_expires_at', algorithm: :concurrently end # Cleanup job support for status and updated_at unless index_exists?(:family_invitations, %i[status updated_at], name: 'index_family_invitations_on_status_and_updated_at') add_index :family_invitations, %i[status updated_at], name: 'index_family_invitations_on_status_and_updated_at', algorithm: :concurrently end end end