All checks were successful
Build and Publish / build-release (push) Successful in 1m23s
53 lines
1.2 KiB
Elixir
53 lines
1.2 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],
|
|
sortable: [:inserted_at, :updated_at, :status]}
|
|
|
|
@primary_key {:id, :string, []}
|
|
schema "tasks" do
|
|
field(:org_id, :string)
|
|
field(:application_id, :string)
|
|
field(:task_info, :map)
|
|
field(:submission, :map)
|
|
field(:attachments, {:array, :string})
|
|
field(:status, :string)
|
|
|
|
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,
|
|
:task_info,
|
|
:submission,
|
|
:attachments,
|
|
:status
|
|
])
|
|
|> validate_required([
|
|
:id,
|
|
:org_id,
|
|
:application_id,
|
|
:status
|
|
])
|
|
|> validate_inclusion(:status, @statuses)
|
|
end
|
|
end |