commit 9e22fd4ef93eea9f498b8fd3192a579eedf655be
parent 2830f085a02b9ff1e9a598e56690681423062803
Author: srfsh <dev@srf.sh>
Date: Fri, 2 Dec 2022 19:09:13 +0300
Zenflows.VF.EconomicResource.Domain: fix the algorithms
Diffstat:
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/src/zenflows/vf/economic_resource/domain.ex b/src/zenflows/vf/economic_resource/domain.ex
@@ -70,6 +70,7 @@ def previous(id, page) do
&1.previous_event_id == nil
or &1.id == &2.previous_event_id
or &1.id <= &2.id))
+ |> Enum.reverse()
end
@spec trace(EconomicResource.t() | EconomicEvent.t() | Process.t(), Page.t())
@@ -112,11 +113,13 @@ defp trace_depth_first_search(flows, visited, contained, modified, delivered, sa
# ensure that:
# * `previous` has at least one item that is not `nil` (events' previous can return `nil`)
# * `saved_event` is not `nil` (events like raise have nullable previous_event)
+ {[%EconomicResource{}], %EconomicEvent{}} ->
+ [saved_event | previous]
+
{[%{id: _} | _], %{id: id}} ->
case Enum.split_while(previous, &(&1.id != id)) do
- {[], right} -> right
{left, [found | right]} -> [found | left] ++ right
- {left, right} -> left ++ right
+ {left, []} -> left
end
_ ->
previous
@@ -135,7 +138,7 @@ defp trace_depth_first_search(flows, visited, contained, modified, delivered, sa
when id in ~w[pickup dropoff accept modify pack unpack] ->
{flows, visited, contained, modified, delivered, saved_event}
_ ->
- visited = MapSet.put(visited, {EconomicEvent, item.id})
+ visited = MapSet.put(visited, {item.__struct__, item.id})
flows = [item | flows]
trace_depth_first_search(flows, visited, contained, modified, delivered, saved_event)
end