Current section

Files

Jump to
sorcery lib services mutation children_mutation.ex
Raw

lib/services/mutation/children_mutation.ex

defmodule Sorcery.Mutation.ChildrenMutation do
@moduledoc false
import Sorcery.Helpers.Maps
#alias Sorcery.PortalServer.Portal
defstruct [
:old_data,
version: 1,
inserts: %{},
updates: %{},
deletes: %{},
]
def init(parent_mutation, resolved_data) do
body =
parent_mutation
|> Map.from_struct()
|> Map.put(:inserts, resolved_data.inserts)
|> Map.put(:updates, resolved_data.updates)
#|> Map.put(:deletes, resolved_data.deletes)
|> Map.put(:deletes, resolve_deletes(parent_mutation, resolved_data.deletes))
struct(__MODULE__, body)
end
defp resolve_deletes(parent_mutation, deletes) do
Enum.reduce(deletes, %{}, fn {tk, ids}, acc ->
entities = get_in_p(parent_mutation, [:portal, :known_matches, :data, tk]) || %{}
Enum.reduce(ids, acc, fn id, acc ->
entity = Map.get(entities, id, %{id: id})
put_in_p(acc, [tk, id], entity)
end)
end)
end
end