Skip to main content

priv/test_repo/migrations/20260801000000_continuum_v0_3.exs

defmodule Continuum.Test.Repo.Migrations.ContinuumV03 do
  use Ecto.Migration

  # v0.3 run-row deltas: parent/child linkage (PR 5) and continue-as-new chain
  # linkage (PR 6). Lineage columns are nullable; every run gets a
  # correlation_id, defaulting to its own id until it continues as new.
  def up do
    alter table(:continuum_runs) do
      add(:parent_run_id, :uuid)
      add(:parent_command_id, :bytea)
      add(:correlation_id, :uuid)
      add(:continued_from_run_id, :uuid)
    end

    execute("UPDATE continuum_runs SET correlation_id = id WHERE correlation_id IS NULL")

    create(
      index(:continuum_runs, [:parent_run_id],
        where: "parent_run_id IS NOT NULL",
        name: :continuum_runs_parent_idx
      )
    )

    create(
      index(:continuum_runs, [:correlation_id],
        where: "correlation_id IS NOT NULL",
        name: :continuum_runs_correlation_idx
      )
    )

    create(
      index(:continuum_runs, [:continued_from_run_id],
        where: "continued_from_run_id IS NOT NULL",
        name: :continuum_runs_continued_from_idx
      )
    )
  end

  def down do
    drop_if_exists(index(:continuum_runs, [:parent_run_id], name: :continuum_runs_parent_idx))

    drop_if_exists(
      index(:continuum_runs, [:correlation_id], name: :continuum_runs_correlation_idx)
    )

    drop_if_exists(
      index(:continuum_runs, [:continued_from_run_id], name: :continuum_runs_continued_from_idx)
    )

    alter table(:continuum_runs) do
      remove(:parent_run_id)
      remove(:parent_command_id)
      remove(:correlation_id)
      remove(:continued_from_run_id)
    end
  end
end