Current section

Files

Jump to
cqrs_tools lib cqrs absinthe field_mapping.ex
Raw

lib/cqrs/absinthe/field_mapping.ex

if Code.ensure_loaded?(Absinthe) do
defmodule Cqrs.Absinthe.FieldMapping do
@moduledoc false
require Logger
def reject_parent_mappings(fields, opts) do
field_mappings = Keyword.get(opts, :parent_mappings, []) |> Keyword.keys()
Enum.reject(fields, fn {field, _, _} -> Enum.member?(field_mappings, field) end)
end
def resolve_parent_mappings(attrs, module, parent, args, opts) do
field_mappings = Keyword.get(opts, :parent_mappings, [])
Enum.reduce(field_mappings, attrs, fn
{field_name, resolver_fun}, acc when is_function(resolver_fun, 1) ->
value = resolver_fun.(parent)
Logger.debug("[cqrs_tools] Resolved #{inspect(module)}.#{field_name} from parent: #{inspect(value)}")
Map.put(acc, field_name, value)
{field_name, resolver_fun}, acc when is_function(resolver_fun, 2) ->
value = resolver_fun.(parent, args)
Logger.debug("[cqrs_tools] Resolved #{inspect(module)}.#{field_name} from parent: #{inspect(value)}")
Map.put(acc, field_name, value)
{field_name, _resolver_fun}, acc ->
Logger.warn(
"[cqrs_tools] Invalid Field Mapping for #{inspect(module)}.#{field_name}. Expected a function with an arity of 1 or 2"
)
acc
end)
end
def run_field_transformations(attrs, module, opts) do
field_transformations = Keyword.get(opts, :field_transforms, []) ++ Keyword.get(opts, :filter_transforms, [])
Enum.reduce(field_transformations, attrs, fn
{field_name, transform_fun}, acc when is_function(transform_fun, 1) ->
Map.update(acc, field_name, nil, fn source ->
transformed = transform_fun.(source)
Logger.debug(
"[cqrs_tools] Transformed #{inspect(module)}.#{field_name}: #{inspect(source)} -> #{inspect(transformed)}"
)
transformed
end)
{field_name, _transform_fun}, acc ->
Logger.warn(
"[cqrs_tools] Invalid Field Transformation for #{inspect(module)}.#{field_name}. Expected a function with an arity of 1"
)
acc
end)
end
end
end