Thursday, September 19, 2024 11:58:49 PM
> settings

Customize


Authenticate

> 20231025220103_public_ids.rb
# frozen_string_literal: true

class PublicIds < ActiveRecord::Migration[6.1]
  # !!!!!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
    enable_extension "hstore" unless extension_enabled?("hstore")
    enable_extension "uuid-ossp" unless extension_enabled?("uuid-ossp")

    rename_column :servers, :uuid, :public_id

    remove_foreign_key "command_configurations", "communities"
    remove_foreign_key "community_defaults", "communities"
    remove_foreign_key "cooldowns", "communities"
    remove_foreign_key "servers", "communities"
    remove_foreign_key "user_aliases", "communities"
    remove_foreign_key "user_defaults", "communities"
    remove_foreign_key "user_notification_routes", "communities", column: "destination_community_id"

    rename_table(:communities, :communities_old)

    create_table "communities" do |t|
      t.uuid "public_id", null: false
      t.string "community_id", null: false
      t.text "community_name"
      t.string "guild_id", null: false
      t.string "logging_channel_id"
      t.boolean "log_reconnect_event", default: false
      t.boolean "log_xm8_event", default: true
      t.boolean "log_discord_log_event", default: true
      t.boolean "player_mode_enabled", default: true
      t.json "territory_admin_ids", default: []
      t.json "dashboard_access_role_ids", default: []
      t.string "command_prefix"
      t.boolean "welcome_message_enabled", default: true
      t.text "welcome_message", default: ""
      t.timestamps

      t.index ["public_id"], unique: true
      t.index ["community_id"], unique: true
      t.index ["guild_id"], unique: true
    end

    # Migrate the old data over to the new table
    ESM::Community.reset_column_information
    data = exec_query("SELECT * FROM communities_old;")
    communities = data.map do |community|
      community["public_id"] = SecureRandom.uuid
      community["territory_admin_ids"] = community["territory_admin_ids"].to_a
      community["dashboard_access_role_ids"] = community["dashboard_access_role_ids"].to_a
      community.except("deleted_at")
    end

    ESM::Community.insert_all(communities) if communities.size > 0

    # Delete old table
    drop_table(:communities_old)

    add_foreign_key "command_configurations", "communities", on_delete: :cascade
    add_foreign_key "community_defaults", "communities", on_delete: :cascade
    add_foreign_key "cooldowns", "communities", on_delete: :cascade
    add_foreign_key "servers", "communities", on_delete: :cascade
    add_foreign_key "user_aliases", "communities", on_delete: :cascade
    add_foreign_key "user_defaults", "communities", on_delete: :cascade
    add_foreign_key "user_notification_routes", "communities", column: "destination_community_id", on_delete: :cascade
  end
end
All opinions represented herein are my own
- © 2024 itsthedevman
- build 3c15a1b