Files
workload-service/lib/workload_service/handlers/task_completed_handler.ex
HaimKortovich 7e76badab0
All checks were successful
Build and Publish / build-release (push) Successful in 1m28s
add solicitation task and validations
2026-04-23 10:33:08 -05:00

62 lines
1.7 KiB
Elixir

defmodule WorkloadService.Handlers.TaskCompletedHandler do
use Commanded.Event.Handler,
application: WorkloadService.CommandedApp,
name: "TaskCompletedHandler"
require Logger
alias WorkloadService.Events.TaskCompleted
alias Commanded.Aggregates.Aggregate
alias WorkloadService.MessageBus
alias WorkloadService.Aggregates.{
QuoteTask,
SolicitationTask
}
def handle(%TaskCompleted{} = event, _metadata) do
aggregate_module =
case event.id.type do
"quote" -> {:ok, QuoteTask}
"solicitation" -> {:ok, SolicitationTask}
_ -> {:error, "aggregate module not found for event type #{event.id}"}
end
case aggregate_module do
{:error, reason} ->
{:error, reason}
{:ok, module} ->
case Aggregate.aggregate_state(
WorkloadService.CommandedApp,
module,
to_string(event.id)
) do
nil ->
Logger.warning("TaskCompletedHandler: aggregate not found for #{event.id}")
state ->
exchange =
case event.id.type do
"quote" -> "workload_service.events.quote_task_completed"
"solicitation" -> "workload_service.events.solicitation_task_completed"
end
routing_key =
case event.id.type do
"quote" -> "quote_task.completed"
"solicitation" -> "solicitation_task.completed"
end
MessageBus.publish(
exchange,
routing_key,
state
)
Logger.info("TaskCompletedHandler: published for #{event.id}")
end
end
end
end