Files
workload-service/lib/workload_service/events/task.ex
HaimKortovich c81b1673d4
Some checks failed
Build and Publish / build-release (push) Has been cancelled
add auth
2026-05-15 10:19:57 -05:00

76 lines
2.1 KiB
Elixir

defmodule WorkloadService.Events do
@moduledoc """
All domain events for the workload service.
Contains helpers for common event functionality.
"""
alias WorkloadService.Aggregates.TaskId
alias WorkloadService.Aggregates.ApplicationId
defmacro __using__(_opts) do
quote do
defimpl Commanded.Serialization.JsonDecoder do
def decode(%{id: %{org_id: org_id, type: type, task_id: task_id}} = event) do
event = %{event | id: TaskId.new(org_id, type, task_id)}
if Map.has_key?(event, :application_id) && is_map(event.application_id) do
%{event | application_id: ApplicationId.parse!(event.application_id)}
else
event
end
end
def decode(event), do: event
end
end
end
end
defmodule WorkloadService.Events.TaskCreated do
@moduledoc """
Emitted when a new task is created (quote or solicitation).
ID format: "org_id:type:task_id" (e.g., "test:quote:uuid") - TaskId struct
"""
use WorkloadService.Events
@derive Jason.Encoder
defstruct [:id, :application_id, :task_info, :attachments]
end
defmodule WorkloadService.Events.SubmissionUpdated do
@moduledoc """
Emitted when submission is updated (user provides response data).
"""
use WorkloadService.Events
@derive Jason.Encoder
defstruct [:id, :submission, :attachments]
end
defmodule WorkloadService.Events.SubmissionApproved do
@moduledoc """
Emitted when submission is approved and ready to send.
"""
use WorkloadService.Events
@derive Jason.Encoder
defstruct [:id]
end
defmodule WorkloadService.Events.ApprovalRequested do
@moduledoc """
Emitted when a user requests approval for their submission.
This transitions the task from 'draft' to 'approval_requested'.
"""
use WorkloadService.Events
@derive Jason.Encoder
defstruct [:id]
end
defmodule WorkloadService.Events.TaskCompleted do
@moduledoc """
Emitted when task is completed and sent to policy-service.
Triggers RabbitMQ publish.
"""
use WorkloadService.Events
@derive Jason.Encoder
defstruct [:id, :completed_by]
end