Current section
Files
Jump to
Current section
Files
lib/kaffy/resource_callbacks.ex
defmodule Kaffy.ResourceCallbacks do
@moduledoc false
alias Kaffy.Utils
def create_callbacks(resource, changes) do
changeset = Kaffy.ResourceAdmin.create_changeset(resource, changes)
Kaffy.Utils.repo().transaction(fn repo ->
result =
with {:ok, changeset} <- before_create(resource, changeset),
{:ok, changeset} <- before_save(resource, changeset),
{:ok, entry} <- Kaffy.Utils.repo().insert(changeset),
{:ok, entry} <- after_save(resource, entry),
do: after_create(resource, entry)
case result do
{:ok, entry} -> entry
{:error, changeset} -> repo.rollback(changeset)
{:error, entry, error} -> repo.rollback({entry, error})
end
end)
end
def update_callbacks(resource, entry, changes) do
changeset = Kaffy.ResourceAdmin.update_changeset(resource, entry, changes)
Kaffy.Utils.repo().transaction(fn repo ->
result =
with {:ok, changeset} <- before_update(resource, changeset),
{:ok, changeset} <- before_save(resource, changeset),
{:ok, entry} <- Kaffy.Utils.repo().update(changeset),
{:ok, entry} <- after_save(resource, entry),
do: after_update(resource, entry)
case result do
{:ok, entry} -> entry
{:error, changeset} -> repo.rollback(changeset)
{:error, entry, error} -> repo.rollback({entry, error})
end
end)
end
def delete_callbacks(resource, entry) do
Kaffy.Utils.repo().transaction(fn repo ->
result =
with {:ok, changeset} <- before_delete(resource, entry),
{:ok, entry} <- Kaffy.Utils.repo().delete(changeset),
do: after_delete(resource, entry)
case result do
{:ok, entry} -> entry
{:error, changeset} -> repo.rollback(changeset)
{:error, entry, error} -> repo.rollback({entry, error})
end
end)
end
defp before_create(resource, changeset) do
Utils.get_assigned_value_or_default(
resource,
:before_create,
{:ok, changeset},
[changeset],
false
)
end
defp after_create(resource, entry) do
Utils.get_assigned_value_or_default(resource, :after_create, {:ok, entry}, [entry], false)
end
defp before_update(resource, changeset) do
Utils.get_assigned_value_or_default(
resource,
:before_update,
{:ok, changeset},
[changeset],
false
)
end
defp before_save(resource, changeset) do
Utils.get_assigned_value_or_default(
resource,
:before_save,
{:ok, changeset},
[changeset],
false
)
end
defp after_save(resource, entry) do
Utils.get_assigned_value_or_default(resource, :after_save, {:ok, entry}, [entry], false)
end
defp after_update(resource, entry) do
Utils.get_assigned_value_or_default(resource, :after_update, {:ok, entry}, [entry], false)
end
defp before_delete(resource, entry) do
changeset = Kaffy.ResourceAdmin.update_changeset(resource, entry, %{})
Utils.get_assigned_value_or_default(
resource,
:before_delete,
{:ok, changeset},
[changeset],
false
)
end
defp after_delete(resource, entry) do
# changeset = Kaffy.ResourceAdmin.update_changeset(resource, entry, %{})
Utils.get_assigned_value_or_default(
resource,
:after_delete,
{:ok, entry},
[entry],
false
)
end
end