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" -> 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, 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 end end