diff --git a/priv/repo/migrations/20260419222624_add_kind_to_grid_tasks.exs b/priv/repo/migrations/20260419222624_add_kind_to_grid_tasks.exs new file mode 100644 index 00000000..8de82280 --- /dev/null +++ b/priv/repo/migrations/20260419222624_add_kind_to_grid_tasks.exs @@ -0,0 +1,24 @@ +defmodule Microwaveprop.Repo.Migrations.AddKindToGridTasks do + use Ecto.Migration + + # `kind` splits the queue between forecast-hour work (the 18 f01..f18 rows + # Rust has owned since Phase 2) and analysis-hour work (f00, which Elixir + # still runs because it carries the native-level duct merge, NEXRAD, and + # commercial-link enrichment). Stream A of the Phase 3 migration plan + # ports those enrichments to Rust and flips f00 onto this queue too. + # Forecast rows default to 'forecast' so existing producers keep working + # during the transition. + def change do + alter table(:grid_tasks) do + add :kind, :string, null: false, default: "forecast" + end + + create index(:grid_tasks, [:status, :kind]) + + # Replace (run_time, forecast_hour) uniqueness with a three-column key so + # an analysis row and a forecast row for f00 can coexist during the + # cutover. Post-cutover the analysis row replaces f00 outright. + drop_if_exists unique_index(:grid_tasks, [:run_time, :forecast_hour]) + create unique_index(:grid_tasks, [:run_time, :forecast_hour, :kind]) + end +end