Current section
Files
Jump to
Current section
Files
lib/ex_state/ecto/migration.ex
defmodule ExState.Ecto.Migration do
use Ecto.Migration
def up(opts \\ []) do
if Keyword.get(opts, :install_pgcrypto, false) do
execute("CREATE EXTENSION IF NOT EXISTS pgcrypto")
end
create table(:workflows, primary_key: false) do
add_uuid_primary_key()
add(:name, :string, null: false)
add(:state, :string, null: false)
add(:is_complete, :boolean, null: false, default: false)
add(:lock_version, :integer, default: 1)
timestamps()
end
create table(:workflow_steps, primary_key: false) do
add_uuid_primary_key()
add(:state, :string, null: false)
add(:name, :string, null: false)
add(:order, :integer, null: false)
add(:decision, :string)
add(:participant, :string)
add(:is_complete, :boolean, null: false, default: false)
add(:workflow_id, references(:workflows, type: :uuid, on_delete: :delete_all), null: false)
add(:completed_at, :utc_datetime_usec)
add(:completed_metadata, :map)
timestamps()
end
create(unique_index(:workflow_steps, [:workflow_id, :state, :name]))
create(index(:workflow_steps, [:participant]))
end
defp add_uuid_primary_key do
add(:id, :uuid, primary_key: true, default: {:fragment, "gen_random_uuid()"})
end
end