From 766c0c608a0bdee4002c329f00dd13cb7f8cdd39 Mon Sep 17 00:00:00 2001 From: dorianmercatante Date: Tue, 12 Dec 2023 15:41:19 +0100 Subject: [PATCH] feat: adedd old_unit as parameter in on_update function handler --- .gitignore | 1 + lib/arke/core/unit.ex | 5 +++-- lib/arke/query_manager.ex | 7 +++---- lib/arke/system.ex | 4 ++-- mix.exs | 2 +- 5 files changed, 10 insertions(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index c3ad29b..c262507 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,4 @@ arke-*.tar /tmp/ .elixir_ls/ .idea/ +.idea diff --git a/lib/arke/core/unit.ex b/lib/arke/core/unit.ex index b57a03e..c93ca36 100644 --- a/lib/arke/core/unit.ex +++ b/lib/arke/core/unit.ex @@ -66,8 +66,9 @@ defmodule Arke.Core.Unit do def load(arke, opts, persistence_fn) when is_list(opts), do: load(arke, Enum.into(opts, %{}), persistence_fn) - def load(%{metadata: %{project: project}} = arke, %{metadata: nil} = opts, persistence_fn), - do: load(arke, Map.replace(opts, :metadata, %{project: project}), persistence_fn) + def load(%{metadata: %{project: project}} = arke, %{metadata: nil} = opts, persistence_fn) do + load(arke, Map.put(opts, :metadata, %{project: project}), persistence_fn) + end def load(arke, opts, persistence_fn) do {id, opts} = Map.pop(opts, :id, nil) diff --git a/lib/arke/query_manager.ex b/lib/arke/query_manager.ex index c04be8a..113f41b 100644 --- a/lib/arke/query_manager.ex +++ b/lib/arke/query_manager.ex @@ -140,7 +140,6 @@ defmodule Arke.QueryManager do @spec create(project :: atom(), arke :: Arke.t(), args :: list()) :: func_return() def create(project, arke, args) do persistence_fn = @persistence[:arke_postgres][:create] - with %Unit{} = unit <- Unit.load(arke, args, :create), {:ok, unit} <- Validator.validate(unit, :create, project), {:ok, unit} <- ArkeManager.call_func(arke, :before_create, [arke, unit]), @@ -252,16 +251,16 @@ defmodule Arke.QueryManager do """ @spec update(Unit.t(), args :: list()) :: func_return() - def update(%{arke_id: arke_id, metadata: %{project: project}, data: data} = unit, args) do + def update(%{arke_id: arke_id, metadata: %{project: project}, data: data} = current_unit, args) do persistence_fn = @persistence[:arke_postgres][:update] arke = ArkeManager.get(arke_id, project) - with %Unit{} = unit <- Unit.update(unit, args), + with %Unit{} = unit <- Unit.update(current_unit, args), {:ok, unit} <- Validator.validate(unit, :update, project), {:ok, unit} <- ArkeManager.call_func(arke, :before_update, [arke, unit]), {:ok, unit} <- handle_link_parameters_unit(arke, unit), {:ok, unit} <- persistence_fn.(project, unit), - {:ok, unit} <- ArkeManager.call_func(arke, :on_update, [arke, unit]), + {:ok, unit} <- ArkeManager.call_func(arke, :on_update, [arke, current_unit, unit]), {:ok, unit} <- handle_link_parameters(unit, data), do: {:ok, unit}, else: ({:error, errors} -> {:error, errors}) diff --git a/lib/arke/system.ex b/lib/arke/system.ex index 49680c4..dc67dee 100644 --- a/lib/arke/system.ex +++ b/lib/arke/system.ex @@ -45,7 +45,7 @@ defmodule Arke.System do def before_create(arke, unit), do: {:ok, unit} def on_struct_encode(_, _, data, opts), do: {:ok, data} def before_struct_encode(_, unit), do: {:ok, unit} - def on_update(arke, unit), do: {:ok, unit} + def on_update(arke, old_unit, unit), do: {:ok, unit} def before_update(arke, unit), do: {:ok, unit} def on_delete(arke, unit), do: {:ok, unit} def before_delete(arke, unit), do: {:ok, unit} @@ -61,7 +61,7 @@ defmodule Arke.System do before_create: 2, before_struct_encode: 2, on_struct_encode: 4, - on_update: 2, + on_update: 3, before_update: 2, on_delete: 2, before_delete: 2, diff --git a/mix.exs b/mix.exs index cd7299f..3665cb1 100644 --- a/mix.exs +++ b/mix.exs @@ -1,7 +1,7 @@ defmodule Arke.MixProject do use Mix.Project - @version "0.1.24" + @version "0.1.25" @scm_url "https://github.com/arkemishub/arke" @site_url "https://arkehub.com"