···11+defmodule Sower.Repo.Migrations.AddStateToDeployments do
22+ use Ecto.Migration
33+44+ def up do
55+ alter table(:deployments) do
66+ add :state, :string
77+ end
88+99+ # Backfill existing rows
1010+ execute """
1111+ UPDATE deployments
1212+ SET state = CASE
1313+ WHEN result IS NOT NULL THEN 'completed'
1414+ WHEN last_dispatched_at IS NOT NULL THEN 'dispatched'
1515+ ELSE 'created'
1616+ END
1717+ """
1818+1919+ alter table(:deployments) do
2020+ modify :state, :string, null: false
2121+ end
2222+2323+ end
2424+2525+ def down do
2626+ alter table(:deployments) do
2727+ remove :state
2828+ end
2929+ end
3030+end