Update migrations

This commit is contained in:
Eugene Burmakin 2025-10-05 14:02:18 +02:00
parent 0b9a1005e5
commit c1cff10de3
4 changed files with 16 additions and 69 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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