commit 4ec7ad27f3d9fe7a6ce93c3cd9b64e8cd57645de
parent 593d7300f1efc8aaced80dea9ccdb8133031e6d8
Author: srfsh <dev@srf.sh>
Date: Tue, 15 Nov 2022 00:58:37 +0300
Zenflows.VF.EconomicResource.{Domain,Type,Resolv}: introducte previous call
This is one step forward the implementation of trace.
Diffstat:
4 files changed, 29 insertions(+), 1 deletion(-)
diff --git a/src/zenflows/vf/economic_resource/domain.ex b/src/zenflows/vf/economic_resource/domain.ex
@@ -22,6 +22,7 @@ alias Ecto.{Changeset, Multi}
alias Zenflows.DB.{Page, Repo, Schema}
alias Zenflows.VF.{
Action,
+ EconomicEvent,
EconomicResource,
EconomicResource.Query,
Measure,
@@ -58,6 +59,18 @@ def all!(page \\ Page.new()) do
value
end
+@spec previous(EconomicResource.t() | Schema.id()) :: [EconomicEvent.t()]
+def previous(_, _ \\ Page.new())
+def previous(%EconomicResource{id: id}, page), do: previous(id, page)
+def previous(id, page) do
+ Query.previous(id)
+ |> Page.all(page)
+ |> Enum.sort(&(
+ &1.previous_event_id == nil
+ or &1.id == &2.previous_event_id
+ or &1.id <= &2.id))
+end
+
@spec classifications() :: [String.t()]
def classifications() do
import Ecto.Query
diff --git a/src/zenflows/vf/economic_resource/query.ex b/src/zenflows/vf/economic_resource/query.ex
@@ -22,7 +22,7 @@ import Ecto.Query
alias Ecto.{Changeset, Queryable}
alias Zenflows.DB.{ID, Page, Schema, Validate}
-alias Zenflows.VF.EconomicResource
+alias Zenflows.VF.{EconomicEvent, EconomicResource}
@spec all(Page.t()) :: {:ok, Queryable.t()} | {:error, Changeset.t()}
def all(%{filter: nil}), do: {:ok, EconomicResource}
@@ -66,4 +66,12 @@ defp all_validate(params) do
greater_than_or_equal_to: 0)
|> Changeset.apply_action(nil)
end
+
+@spec previous(Schema.id()) :: Queryable.t()
+def previous(id) do
+ from e in EconomicEvent,
+ or_where: not is_nil(e.output_of_id) and e.resource_inventoried_as_id == ^id,
+ or_where: e.to_resource_inventoried_as_id == ^id,
+ or_where: e.action_id in ["raise", "lower"] and e.resource_inventoried_as_id == ^id
+end
end
diff --git a/src/zenflows/vf/economic_resource/resolv.ex b/src/zenflows/vf/economic_resource/resolv.ex
@@ -109,4 +109,8 @@ def unit_of_effort(eco_res, _, _) do
eco_res = Domain.preload(eco_res, :unit_of_effort)
{:ok, eco_res.unit_of_effort}
end
+
+def previous(eco_res, _, _) do
+ {:ok, Domain.previous(eco_res)}
+end
end
diff --git a/src/zenflows/vf/economic_resource/type.ex b/src/zenflows/vf/economic_resource/type.ex
@@ -177,6 +177,9 @@ object :economic_resource do
@desc @metadata
field :metadata, :json
+
+ field :previous, list_of(non_null(:economic_event)),
+ resolve: &Resolv.previous/3
end
input_object :economic_resource_create_params do