Skip to content

Commit e4ce765

Browse files
committed
add Repo.insert_with_activity/2
1 parent 593d30a commit e4ce765

File tree

3 files changed

+29
-2
lines changed

3 files changed

+29
-2
lines changed

lib/algora/contracts/contracts.ex

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -584,11 +584,14 @@ defmodule Algora.Contracts do
584584
hourly_rate: contract.hourly_rate,
585585
hours_per_week: contract.hours_per_week
586586
})
587-
|> put_activity(contract, %{
587+
# |> put_activity(contract, %{
588+
# type: :contract_renewed,
589+
# trace_id: Nanoid.generate()
590+
# })
591+
|> Repo.insert_with_activity(%{
588592
type: :contract_renewed,
589593
trace_id: Nanoid.generate()
590594
})
591-
|> Repo.insert()
592595
end
593596

594597
def calculate_transfer_amount(contract) do

lib/algora/repo.ex

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,4 +68,25 @@ defmodule Algora.Repo do
6868
opts
6969
)
7070
end
71+
72+
@spec insert_with_activity(Ecto.Changeset.t() | Ecto.Multi.t(), struct()) ::
73+
{:ok, struct()} | {:error, Ecto.Changeset.t()}
74+
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()
85+
86+
case response do
87+
{:ok, %{target: target}} -> {:ok, target}
88+
{:error, %{target: target}} -> {:error, target}
89+
{:error, error} -> {:error, error}
90+
end
91+
end
7192
end

test/algora/contracts_test.exs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
defmodule Algora.ContractsTest do
22
use Algora.DataCase
3+
use Oban.Testing, repo: Algora.Repo
34

45
import Algora.Factory
56
import Money.Sigil
@@ -265,6 +266,8 @@ defmodule Algora.ContractsTest do
265266

266267
assert Activities.all_for_user(contract_a_0.contractor_id) !=
267268
Activities.all_for_user(contract_b_0.contractor_id)
269+
270+
assert_enqueued(worker: Activities.Notifier, worker: "Algora.Activities.Notifier")
268271
end
269272

270273
test "prepayment fails when payment method is invalid" do

0 commit comments

Comments
 (0)