Friday, September 20, 2024 12:15:32 AM
> settings

Customize


Authenticate

> 20230326003042_add_uuid_to_server.rb
# frozen_string_literal: true

class AddUuidToServer < ActiveRecord::Migration[6.1]
  # All of this just so uuid would be closer to the front...
  #
  # !!!!!IMPORTANT!!!!!
  #
  # Doing this type of migration will RESET the PK's auto-increment counter back to 0 on the new table
  # It MUST be set back to the highest number manually using this SQL:
  #
  #   ALTER SEQUENCE <table_name>_id_seq RESTART WITH <count>;
  #
  # Failure to do so will result in broken functionality that may or may not be apparent at the time.
  #
  def change
    # Delete old foreign keys
    remove_foreign_key :logs, :servers
    remove_foreign_key :servers, :communities
    remove_foreign_key :server_mods, :servers
    remove_foreign_key :server_rewards, :servers
    remove_foreign_key :server_settings, :servers
    remove_foreign_key :territories, :servers
    remove_foreign_key :user_gamble_stats, :servers
    remove_foreign_key :user_notification_preferences, :servers
    remove_foreign_key :user_notification_routes, :servers, column: :source_server_id

    # Rename old table
    rename_table(:servers, :servers_old)

    # Recreate the table with the changes
    # Dropped :deleted_at
    # Added :uuid
    # Added :server_visibility
    # Added :server_version
    create_table :servers do |t|
      t.uuid :uuid, null: false
      t.string :server_id, null: false
      t.integer :community_id, null: false
      t.text :server_key, null: true
      t.text :server_name
      t.integer :server_visibility, null: false, default: 1
      t.string :server_ip
      t.string :server_port
      t.string :server_version
      t.datetime :server_start_time
      t.datetime :disconnected_at
      t.timestamps
    end

    # Migrate the old data over to the new table
    ESM::Server.reset_column_information
    data = execute("SELECT * FROM servers_old;")
    data.each do |server|
      server["uuid"] = SecureRandom.uuid
      ESM::Server.create!(server.except("deleted_at"))
    end

    # Delete old table
    drop_table(:servers_old)

    # Recreate the indexes
    add_index :servers, :uuid, unique: true
    add_index :servers, :server_id, unique: true
    add_index :servers, :server_key, unique: true

    # Recreate the foreign keys
    add_foreign_key :logs, :servers
    add_foreign_key :servers, :communities
    add_foreign_key :server_mods, :servers
    add_foreign_key :server_rewards, :servers
    add_foreign_key :server_settings, :servers
    add_foreign_key :territories, :servers
    add_foreign_key :user_gamble_stats, :servers
    add_foreign_key :user_notification_preferences, :servers
  end
end
All opinions represented herein are my own
- © 2024 itsthedevman
- build 340fbb8