priv/repo/migrations/20260505130200_create_relyra_metadata_revisions.exs

defmodule Relyra.Repo.Migrations.CreateRelyraMetadataRevisions do
  use Ecto.Migration

  def change do
    create table(:relyra_metadata_revisions, primary_key: false) do
      add :id, :binary_id, primary_key: true

      add :connection_record_id, references(:relyra_connections, type: :binary_id, on_delete: :delete_all),
        null: false

      add :metadata_source_id, references(:relyra_metadata_sources, type: :binary_id, on_delete: :nilify_all)
      add :source_kind, :string, null: false
      add :trigger, :string, null: false
      add :outcome, :string, null: false
      add :content_hash_sha256, :string
      add :effective_idp_entity_id, :text
      add :effective_idp_sso_url, :text
      add :certificate_fingerprints, {:array, :string}, null: false, default: []
      add :trust_summary, :map, null: false, default: %{}
      add :actor, :string
      add :cause, :string
      add :details, :map, null: false, default: %{}

      timestamps(type: :utc_datetime_usec, updated_at: false)
    end

    create index(:relyra_metadata_revisions, [:connection_record_id, :inserted_at])
    create index(:relyra_metadata_revisions, [:metadata_source_id])

    execute(
      """
      ALTER TABLE relyra_connections
      ADD CONSTRAINT relyra_connections_active_metadata_revision_id_fkey
      FOREIGN KEY (active_metadata_revision_id)
      REFERENCES relyra_metadata_revisions(id)
      ON DELETE SET NULL
      """,
      """
      ALTER TABLE relyra_connections
      DROP CONSTRAINT IF EXISTS relyra_connections_active_metadata_revision_id_fkey
      """
    )

    execute(
      """
      ALTER TABLE relyra_connections
      ADD CONSTRAINT relyra_connections_last_known_good_metadata_revision_id_fkey
      FOREIGN KEY (last_known_good_metadata_revision_id)
      REFERENCES relyra_metadata_revisions(id)
      ON DELETE SET NULL
      """,
      """
      ALTER TABLE relyra_connections
      DROP CONSTRAINT IF EXISTS relyra_connections_last_known_good_metadata_revision_id_fkey
      """
    )
  end
end