# frozen_string_literal: true

class AddImageUploadIdToBadges < ActiveRecord::Migration[6.0]
  def change
    add_column :badges, :image_upload_id, :integer
    reversible do |dir|
      dir.up do
        DB.exec <<~SQL
          UPDATE badges b1
          SET image_upload_id = u.id
          FROM (
            SELECT id, (regexp_matches(b.image, '[a-f0-9]{40}'))[1] as sha1
            FROM badges b
            WHERE
              b.image IS NOT NULL AND
              b.image ~ '[a-f0-9]{40}'
          ) b2
          JOIN uploads u ON u.sha1 = b2.sha1
          WHERE
            b1.id = b2.id
        SQL
      end
    end
  end
end
