diff --git a/lib/workload_service/commands/quote_task.ex b/lib/workload_service/commands/quote_task.ex index 32caf69..9a194eb 100644 --- a/lib/workload_service/commands/quote_task.ex +++ b/lib/workload_service/commands/quote_task.ex @@ -50,4 +50,4 @@ defmodule WorkloadService.Commands.QuoteTask do struct(__MODULE__, attrs) end end -end \ No newline at end of file +end diff --git a/lib/workload_service/events/task.ex b/lib/workload_service/events/task.ex index 72a3ecf..c7b6532 100644 --- a/lib/workload_service/events/task.ex +++ b/lib/workload_service/events/task.ex @@ -1,39 +1,58 @@ defmodule WorkloadService.Events do @moduledoc """ All domain events for the workload service. + Contains helpers for common event functionality. """ - defmodule 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 - """ - @derive Jason.Encoder - defstruct [:id, :application_id, :task_info, :attachments] - end + alias WorkloadService.Aggregates.TaskId - defmodule SubmissionUpdated do - @moduledoc """ - Emitted when submission is updated (user provides response data). - """ - @derive Jason.Encoder - defstruct [:id, :submission, :attachments] - end + 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 | id: TaskId.new(org_id, type, task_id)} + end - defmodule SubmissionApproved do - @moduledoc """ - Emitted when submission is approved and ready to send. - """ - @derive Jason.Encoder - defstruct [:id] - end - - defmodule TaskCompleted do - @moduledoc """ - Emitted when task is completed and sent to policy-service. - Triggers RabbitMQ publish. - """ - @derive Jason.Encoder - defstruct [:id, :completed_by] + 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.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 \ No newline at end of file