Skip to content

Commit

Permalink
Merge pull request #146 from ottobar/main
Browse files Browse the repository at this point in the history
Use model_key for insert in strict mode and add initial_version_key
  • Loading branch information
izelnakri committed May 25, 2021
2 parents aefcce2 + 0465900 commit 2c8f2d6
Showing 1 changed file with 13 additions and 6 deletions.
19 changes: 13 additions & 6 deletions lib/paper_trail/multi.ex
Original file line number Diff line number Diff line change
Expand Up @@ -32,17 +32,19 @@ defmodule PaperTrail.Multi do
prefix: nil,
model_key: :model,
version_key: :version,
initial_version_key: :initial_version,
ecto_options: []
]
) do
model_key = options[:model_key] || :model
version_key = options[:version_key] || :version
initial_version_key = options[:initial_version_key] || :initial_version
ecto_options = options[:ecto_options] || []

case RepoClient.strict_mode() do
true ->
multi
|> Ecto.Multi.run(:initial_version, fn repo, %{} ->
|> Ecto.Multi.run(initial_version_key, fn repo, %{} ->
version_id = get_sequence_id("versions") + 1

changeset_data =
Expand All @@ -56,7 +58,7 @@ defmodule PaperTrail.Multi do
initial_version = make_version_struct(%{event: "insert"}, changeset_data, options)
repo.insert(initial_version)
end)
|> Ecto.Multi.run(model_key, fn repo, %{initial_version: initial_version} ->
|> Ecto.Multi.run(model_key, fn repo, %{^initial_version_key => initial_version} ->
updated_changeset =
changeset
|> change(%{
Expand All @@ -67,7 +69,10 @@ defmodule PaperTrail.Multi do
repo.insert(updated_changeset, ecto_options)
end)
|> Ecto.Multi.run(version_key, fn repo,
%{initial_version: initial_version, model: model} ->
%{
^initial_version_key => initial_version,
^model_key => model
} ->
target_version = make_version_struct(%{event: "insert"}, model, options) |> serialize()

Version.changeset(initial_version, target_version) |> repo.update
Expand All @@ -93,17 +98,19 @@ defmodule PaperTrail.Multi do
prefix: nil,
model_key: :model,
version_key: :version,
initial_version_key: :initial_version,
ecto_options: []
]
) do
model_key = options[:model_key] || :model
version_key = options[:version_key] || :version
initial_version_key = options[:initial_version_key] || :initial_version
ecto_options = options[:ecto_options] || []

case RepoClient.strict_mode() do
true ->
multi
|> Ecto.Multi.run(:initial_version, fn repo, %{} ->
|> Ecto.Multi.run(initial_version_key, fn repo, %{} ->
version_data =
changeset.data
|> Map.merge(%{
Expand All @@ -114,11 +121,11 @@ defmodule PaperTrail.Multi do
target_version = make_version_struct(%{event: "update"}, target_changeset, options)
repo.insert(target_version)
end)
|> Ecto.Multi.run(model_key, fn repo, %{initial_version: initial_version} ->
|> Ecto.Multi.run(model_key, fn repo, %{^initial_version_key => initial_version} ->
updated_changeset = changeset |> change(%{current_version_id: initial_version.id})
repo.update(updated_changeset, Keyword.take(options, [:returning]))
end)
|> Ecto.Multi.run(version_key, fn repo, %{initial_version: initial_version} ->
|> Ecto.Multi.run(version_key, fn repo, %{^initial_version_key => initial_version} ->
new_item_changes =
initial_version.item_changes
|> Map.merge(%{
Expand Down

0 comments on commit 2c8f2d6

Please sign in to comment.