defmodule Mobilizon.Storage.Repo.Migrations.AddMetadataToParticipant do
  use Ecto.Migration

  def up do
    drop_if_exists(unique_index(:participants, [:event_id, :actor_id]))

    alter table(:participants) do
      add(:metadata, :map)
    end

    flush()

    execute(
      "CREATE UNIQUE INDEX participants_metadata_confirmation_token_index ON participants((metadata->>'confirmation_token'))"
    )
  end

  def down do
    create_if_not_exists(unique_index(:participants, [:event_id, :actor_id]))

    execute("DROP INDEX IF EXISTS participants_metadata_confirmation_token_index")

    alter table(:participants) do
      remove(:metadata, :map)
    end
  end
end