Files
workload-service/lib/workload_service/projections/task.ex
2026-04-16 14:20:58 -05:00

61 lines
1.4 KiB
Elixir

defmodule WorkloadService.Projections.Task do
@moduledoc """
Ecto schema for the task read model.
ID format: "org_id:type:task_id" (e.g., "test:quote:uuid")
"""
use Ecto.Schema
import Ecto.Changeset
@derive {Flop.Schema,
filterable: [:status, :org_id, :application_id, :provider_id],
sortable: [:inserted_at, :updated_at, :status]}
@primary_key {:id, :string, []}
schema "tasks" do
field(:org_id, :string)
field(:application_id, :string)
field(:provider_id, :string)
field(:provider_name, :string)
field(:task_info, :map)
field(:submission, :map)
field(:attachments, {:array, :string})
field(:status, :string)
field(:version, :integer, default: 1)
timestamps(type: :utc_datetime)
end
@statuses ["created", "draft", "approved", "completed"]
def status_changeset(task, attrs) do
task
|> cast(attrs, [:status, :task_info, :submission, :attachments, :updated_at])
|> validate_inclusion(:status, @statuses)
end
def create_changeset(task, attrs) do
task
|> cast(attrs, [
:id,
:org_id,
:application_id,
:provider_id,
:provider_name,
:task_info,
:submission,
:attachments,
:status,
:version
])
|> validate_required([
:id,
:org_id,
:application_id,
:provider_id,
:provider_name,
:status
])
|> validate_inclusion(:status, @statuses)
end
end