Current section

Files

Jump to
sorcery lib services mutation temp.ex
Raw

lib/services/mutation/temp.ex

defmodule Sorcery.Mutation.Temp do
import Sorcery.Helpers.Maps
def get_split_data(%{portal: portal} = mutation) do
original_data = portal.known_matches.data
|> remove_created_entities()
new_data = Enum.reduce(mutation.operations, original_data, fn
[_, "?" <> _], acc -> acc
operation, latest_data -> build_temp_portal(operation, original_data, latest_data)
end)
{original_data, new_data}
end
def add_temp_portal(inner_state, %{portal: portal} = mutation) do
#original_data = portal.known_matches.data
# |> remove_created_entities()
#new_data = Enum.reduce(mutation.operations, original_data, fn
# [_, "?" <> _], acc -> acc
# operation, latest_data -> build_temp_portal(operation, original_data, latest_data)
#end)
{_original_data, new_data} = Sorcery.Mutation.Temp.get_split_data(mutation)
lvar_data = data_to_lvar_data(new_data, inner_state.portals[portal.portal_name])
portal = Map.put(portal, :temp_data, lvar_data)
inner_state
|> put_in_p([:portals, portal.portal_name], portal)
end
defp remove_created_entities(data) do
Enum.reduce(data, data, fn {tk, table}, data ->
Enum.reduce(table, data, fn
{"?" <> _, _}, data -> data
{id, entity}, data -> put_in_p(data, [tk, id], entity)
end)
end)
end
defp build_temp_portal({:put, path, v}, _, data), do: put_in_p(data, path, v)
defp build_temp_portal({:update, path, cb}, original_data, new_data) do
original_v = get_in_p(original_data, path)
new_v = get_in_p(new_data, path)
put_in_p(new_data, path, cb.(original_v, new_v))
end
defp data_to_lvar_data(data, portal) do
Sorcery.Query.from_tk_map(portal.query_module, portal.args, data)
end
end