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" -> QuoteTask # "solicitation" -> SolicitationTask _ -> nil end if aggregate_module do case Aggregate.aggregate_state( WorkloadService.CommandedApp, aggregate_module, event.id ) do nil -> Logger.warning("TaskCompletedHandler: aggregate not found for #{event.id}") state -> MessageBus.publish( "workload_service.events.quote_task_completed", "quote_task_completed", state ) Logger.info("TaskCompletedHandler: published for #{event.id}") end end :ok rescue e -> Logger.error("TaskCompletedHandler: failed to process - #{inspect(e)}") :ok end end