diff --git a/db/migrate/20250926220135_create_family_memberships.rb b/db/migrate/20250926220135_create_family_memberships.rb index 2f2e82d0..fa8e051a 100644 --- a/db/migrate/20250926220135_create_family_memberships.rb +++ b/db/migrate/20250926220135_create_family_memberships.rb @@ -11,8 +11,7 @@ class CreateFamilyMemberships < ActiveRecord::Migration[8.0] add_foreign_key :family_memberships, :families, validate: false add_foreign_key :family_memberships, :users, validate: false - add_index :family_memberships, :family_id add_index :family_memberships, :user_id, unique: true # One family per user - add_index :family_memberships, %i[family_id role] + add_index :family_memberships, %i[family_id role], name: 'index_family_memberships_on_family_and_role' end end diff --git a/db/migrate/20250926220158_create_family_invitations.rb b/db/migrate/20250926220158_create_family_invitations.rb index 226ae656..be841652 100644 --- a/db/migrate/20250926220158_create_family_invitations.rb +++ b/db/migrate/20250926220158_create_family_invitations.rb @@ -14,10 +14,13 @@ class CreateFamilyInvitations < ActiveRecord::Migration[8.0] add_foreign_key :family_invitations, :families, validate: false add_foreign_key :family_invitations, :users, column: :invited_by_id, validate: false - add_index :family_invitations, :family_id - add_index :family_invitations, :email add_index :family_invitations, :token, unique: true - add_index :family_invitations, :status - add_index :family_invitations, :expires_at + add_index :family_invitations, %i[family_id email], name: 'index_family_invitations_on_family_id_and_email' + add_index :family_invitations, %i[family_id status expires_at], + name: 'index_family_invitations_on_family_status_expires' + add_index :family_invitations, %i[status expires_at], + name: 'index_family_invitations_on_status_and_expires_at' + add_index :family_invitations, %i[status updated_at], + name: 'index_family_invitations_on_status_and_updated_at' end end diff --git a/db/migrate/20250928000001_add_family_performance_indexes.rb b/db/migrate/20250928000001_add_family_performance_indexes.rb index dc854a10..3022160d 100644 --- a/db/migrate/20250928000001_add_family_performance_indexes.rb +++ b/db/migrate/20250928000001_add_family_performance_indexes.rb @@ -19,13 +19,6 @@ class AddFamilyPerformanceIndexes < ActiveRecord::Migration[8.0] algorithm: :concurrently end - # Index for user email lookups in invitations (skip if exists) - unless index_exists?(:family_invitations, :email) - add_index :family_invitations, :email, - name: 'index_family_invitations_on_email', - 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') @@ -33,5 +26,13 @@ class AddFamilyPerformanceIndexes < ActiveRecord::Migration[8.0] 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 diff --git a/db/migrate/20250930150256_convert_family_tables_to_bigint.rb b/db/migrate/20250930150256_convert_family_tables_to_bigint.rb deleted file mode 100644 index 891bfa5c..00000000 --- a/db/migrate/20250930150256_convert_family_tables_to_bigint.rb +++ /dev/null @@ -1,56 +0,0 @@ -class ConvertFamilyTablesToBigint < ActiveRecord::Migration[8.0] - def up - # Drop dependent tables first - drop_table :family_invitations if table_exists?(:family_invitations) - drop_table :family_memberships if table_exists?(:family_memberships) - drop_table :families if table_exists?(:families) - - # Recreate families table with bigint - create_table :families do |t| - t.string :name, null: false, limit: 50 - t.bigint :creator_id, null: false - t.timestamps - end - - add_foreign_key :families, :users, column: :creator_id, validate: false - add_index :families, :creator_id - - # Recreate family_memberships table with bigint - create_table :family_memberships do |t| - t.bigint :family_id, null: false - t.bigint :user_id, null: false - t.integer :role, null: false, default: 1 # member - t.timestamps - end - - add_foreign_key :family_memberships, :families, validate: false - add_foreign_key :family_memberships, :users, validate: false - add_index :family_memberships, :family_id - add_index :family_memberships, :user_id, unique: true # One family per user - add_index :family_memberships, %i[family_id role] - - # Recreate family_invitations table with bigint - create_table :family_invitations do |t| - t.bigint :family_id, null: false - t.string :email, null: false - t.string :token, null: false - t.datetime :expires_at, null: false - t.bigint :invited_by_id, null: false - t.integer :status, null: false, default: 0 # pending - t.timestamps - end - - add_foreign_key :family_invitations, :families, validate: false - add_foreign_key :family_invitations, :users, column: :invited_by_id, validate: false - add_index :family_invitations, :family_id - add_index :family_invitations, :email - add_index :family_invitations, :token, unique: true - add_index :family_invitations, :status - add_index :family_invitations, :expires_at - end - - def down - # This migration is irreversible since we're changing primary key types - raise ActiveRecord::IrreversibleMigration - end -end