Current section
Files
Jump to
Current section
Files
lib/services/mutation/pre_mutation.ex
defmodule Sorcery.Mutation.PreMutation do
@moduledoc false
import Sorcery.Helpers.Maps
alias Sorcery.PortalServer.Portal
defstruct [
:portal,
version: 1,
skip?: false,
args: %{},
entities: %{},
old_data: %{},
new_data: %{},
deletes: %{},
operations: []
]
def init(sorcery_state, portal_name) do
init(sorcery_state.portals[portal_name])
end
defp init(portal) do
portal = Portal.freeze(portal)
body = %{
old_data: %{},# portal.known_matches.data,
new_data: %{},#portal.known_matches.data,
skip?: !Enum.empty?(portal.temp_data),
portal: portal
}
struct(__MODULE__, body)
end
def update(%{skip?: true} = m, _path, _cb), do: m
def update(mutation, path, cb) do
entry = {:update, path, cb}
update_in_p(mutation, [:operations], [entry], &([entry | &1]))
end
def put(%{skip?: true} = m, _path, _cb), do: m
def put(mutation, path, value) do
entry = {:put, path, value}
update_in_p(mutation, [:operations], [entry], &([entry | &1]))
#put_in_p(mutation, [:new_data | path], value)
end
#def get(mutation, path) do
# get_in_p(mutation, [:new_data | path])
#end
#def get_original(mutation, path) do
# get_in_p(mutation, [:old_data | path])
#end
def create_entity(%{skip?: true} = m, _tk, _lvar, _body), do: m
def create_entity(mutation, tk, "?" <> _ = lvar, body) do
__MODULE__.put(mutation, [tk, lvar], body)
end
def delete_entity(%{skip?: true} = m, _tk, _id), do: m
def delete_entity(mutation, tk, id) do
update_in_p(mutation, [:deletes, tk], [id], &([id | &1]))
end
end