Skip to content

Commit 678d606

Browse files
committed
Repo.update/delete_with_activity
1 parent 11e786a commit 678d606

File tree

2 files changed

+42
-18
lines changed

2 files changed

+42
-18
lines changed

lib/algora/contracts/contracts.ex

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -560,14 +560,9 @@ defmodule Algora.Contracts do
560560
defp mark_contract_as_paid(contract) do
561561
contract
562562
|> change(%{status: :paid})
563-
|> put_activity(contract, %{
564-
type: :contract_paid,
565-
meta: %{},
566-
template: "",
567-
trace_id: Nanoid.generate(),
568-
notify_users: []
563+
|> Repo.update_with_activity(%{
564+
type: :contract_paid
569565
})
570-
|> Repo.update()
571566
end
572567

573568
defp renew_contract(contract) do

lib/algora/repo.ex

Lines changed: 40 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -69,20 +69,49 @@ defmodule Algora.Repo do
6969
)
7070
end
7171

72-
@spec insert_with_activity(Ecto.Changeset.t() | Ecto.Multi.t(), struct()) ::
72+
@spec insert_with_activity(Ecto.Changeset.t(), struct()) ::
7373
{:ok, struct()} | {:error, Ecto.Changeset.t()}
7474
def insert_with_activity(changeset, activity) do
75-
response =
76-
Ecto.Multi.new()
77-
|> Ecto.Multi.insert(:target, changeset)
78-
|> Ecto.Multi.insert(:activity, fn %{target: target} ->
79-
Algora.Activities.Activity.build_activity(target, Map.put(activity, :id, target.id))
80-
end)
81-
|> Oban.insert(:notification, fn %{activity: activity, target: target} ->
82-
Algora.Activities.Notifier.changeset(activity, target)
83-
end)
84-
|> transaction()
75+
Ecto.Multi.new()
76+
|> Ecto.Multi.insert(:target, changeset)
77+
|> with_activity(activity)
78+
|> transaction()
79+
|> extract_target()
80+
end
81+
82+
@spec update_with_activity(Ecto.Changeset.t(), struct()) ::
83+
{:ok, struct()} | {:error, Ecto.Changeset.t()}
84+
def update_with_activity(changeset, activity) do
85+
Ecto.Multi.new()
86+
|> Ecto.Multi.update(:target, changeset)
87+
|> with_activity(activity)
88+
|> transaction()
89+
|> extract_target()
90+
end
91+
92+
@spec delete_with_activity(Ecto.Changeset.t(), struct()) ::
93+
{:ok, struct()} | {:error, Ecto.Changeset.t()}
94+
def delete_with_activity(changeset, activity) do
95+
Ecto.Multi.new()
96+
|> Ecto.Multi.delete(:target, changeset)
97+
|> with_activity(activity)
98+
|> transaction()
99+
|> extract_target()
100+
end
101+
102+
@spec with_activity(Ecto.Multi.t(), struct()) ::
103+
{:ok, struct()} | {:error, Ecto.Changeset.t()}
104+
def with_activity(multi, activity) do
105+
multi
106+
|> Ecto.Multi.insert(:activity, fn %{target: target} ->
107+
Algora.Activities.Activity.build_activity(target, Map.put(activity, :id, target.id))
108+
end)
109+
|> Oban.insert(:notification, fn %{activity: activity, target: target} ->
110+
Algora.Activities.Notifier.changeset(activity, target)
111+
end)
112+
end
85113

114+
defp extract_target(response) do
86115
case response do
87116
{:ok, %{target: target}} -> {:ok, target}
88117
{:error, %{target: target}} -> {:error, target}

0 commit comments

Comments
 (0)