init commit

This commit is contained in:
2026-04-16 14:20:58 -05:00
commit cc973cc11c
51 changed files with 2447 additions and 0 deletions

View 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