init commit
This commit is contained in:
61
lib/workload_service/projectors/task_projector.ex
Normal file
61
lib/workload_service/projectors/task_projector.ex
Normal file
@@ -0,0 +1,61 @@
|
||||
defmodule WorkloadService.Projectors.TaskProjector do
|
||||
use Commanded.Projections.Ecto,
|
||||
application: WorkloadService.CommandedApp,
|
||||
repo: WorkloadService.Repo,
|
||||
name: "TaskProjector"
|
||||
|
||||
alias WorkloadService.Aggregates.TaskId
|
||||
alias WorkloadService.Events
|
||||
alias WorkloadService.Projections.Task
|
||||
import Ecto.Query
|
||||
|
||||
project(%Events.TaskCreated{} = e, _meta, fn multi ->
|
||||
task_id = TaskId.parse!(to_string(e.id))
|
||||
%{org_id: org_id} = task_id
|
||||
|
||||
Ecto.Multi.insert(multi, :task, %Task{
|
||||
id: to_string(e.id),
|
||||
org_id: org_id,
|
||||
application_id: e.application_id,
|
||||
provider_id: e.provider_id,
|
||||
provider_name: e.provider_name,
|
||||
task_info: e.task_info,
|
||||
attachments: e.attachments || [],
|
||||
status: "created"
|
||||
})
|
||||
end)
|
||||
|
||||
project(%Events.SubmissionUpdated{} = e, _meta, fn multi ->
|
||||
multi
|
||||
|> Ecto.Multi.run(:fetch, fn repo, _ ->
|
||||
{:ok, repo.get(Task, to_string(e.id))}
|
||||
end)
|
||||
|> Ecto.Multi.update(:task, fn %{fetch: task} ->
|
||||
Ecto.Changeset.change(task, %{
|
||||
status: "draft",
|
||||
submission: e.submission,
|
||||
attachments: e.attachments || []
|
||||
})
|
||||
end)
|
||||
end)
|
||||
|
||||
project(%Events.SubmissionApproved{} = e, _meta, fn multi ->
|
||||
multi
|
||||
|> Ecto.Multi.run(:fetch, fn repo, _ ->
|
||||
{:ok, repo.get(Task, to_string(e.id))}
|
||||
end)
|
||||
|> Ecto.Multi.update(:task, fn %{fetch: task} ->
|
||||
Ecto.Changeset.change(task, %{status: "approved"})
|
||||
end)
|
||||
end)
|
||||
|
||||
project(%Events.TaskCompleted{} = e, _meta, fn multi ->
|
||||
multi
|
||||
|> Ecto.Multi.run(:fetch, fn repo, _ ->
|
||||
{:ok, repo.get(Task, to_string(e.id))}
|
||||
end)
|
||||
|> Ecto.Multi.update(:task, fn %{fetch: task} ->
|
||||
Ecto.Changeset.change(task, %{status: "completed"})
|
||||
end)
|
||||
end)
|
||||
end
|
||||
Reference in New Issue
Block a user