# frozen_string_literal: true

class AddUniqueIndexToDrafts < ActiveRecord::Migration[6.0]
  def up
    execute <<~SQL
      DELETE FROM drafts d1
      USING (
        SELECT MAX(id) as id, draft_key, user_id
        FROM drafts
        GROUP BY draft_key, user_id
        HAVING COUNT(*) > 1
      ) d2
      WHERE
        d1.draft_key = d2.draft_key AND
        d1.user_id = d2.user_id AND
        d1.id <> d2.id
    SQL

    remove_index :drafts, %i[user_id draft_key]
    add_index :drafts, %i[user_id draft_key], unique: true
  end

  def down
    raise ActiveRecord::IrreversibleMigration
  end
end