init commit
This commit is contained in:
61
lib/workload_service/projections/task.ex
Normal file
61
lib/workload_service/projections/task.ex
Normal file
@@ -0,0 +1,61 @@
|
||||
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
|
||||
Reference in New Issue
Block a user