# frozen_string_literal: true
class CreateUserApiKeyClients < ActiveRecord::Migration[7.1]
  def up
    create_table :user_api_key_clients do |t|
      t.string :client_id, null: false
      t.string :application_name, null: false
      t.string :public_key
      t.string :auth_redirect

      t.timestamps
    end

    add_index :user_api_key_clients, %i[client_id], unique: true

    execute "INSERT INTO user_api_key_clients (client_id, application_name, created_at, updated_at)
             SELECT client_id, application_name, created_at, updated_at
             FROM user_api_keys"

    add_column :user_api_keys, :user_api_key_client_id, :bigint, null: true
    add_index :user_api_keys, :user_api_key_client_id

    execute "UPDATE user_api_keys keys
             SET user_api_key_client_id = clients.id
             FROM user_api_key_clients clients
             WHERE clients.client_id = keys.client_id"

    change_column_null :user_api_keys, :client_id, true
    change_column_null :user_api_keys, :application_name, true
  end

  def down
    execute "UPDATE user_api_keys keys
             SET client_id = clients.client_id,
                 application_name = clients.application_name
             FROM user_api_key_clients clients
             WHERE clients.id = keys.user_api_key_client_id"

    remove_column :user_api_keys, :user_api_key_client_id
    change_column_null :user_api_keys, :client_id, false
    change_column_null :user_api_keys, :application_name, false

    remove_index :user_api_key_clients, :client_id
    drop_table :user_api_key_clients
  end
end