publish aggregate when task is complete
All checks were successful
Build and Publish / build-release (push) Successful in 1m26s
All checks were successful
Build and Publish / build-release (push) Successful in 1m26s
This commit is contained in:
51
lib/workload_service/handlers/task_completed_handler.ex
Normal file
51
lib/workload_service/handlers/task_completed_handler.ex
Normal file
@@ -0,0 +1,51 @@
|
||||
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
|
||||
Reference in New Issue
Block a user