Some checks failed
Build and Publish / build-release (push) Failing after 37s
50 lines
1.3 KiB
Elixir
50 lines
1.3 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" -> 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
|