У меня есть эта карта:
%{
"$include" => %{
"hospitals" => %{
"$include" => %{"rooms" => %{"beds" => %{}}},
"$order" => %{"id" => "$asc"}
},
"doctors" => %{
"$order" => %{"id" => "$desc"}
}
}
}
Существует любое количество операторов $ include, вложенных в $ include. так что должно быть динамично. Выходные данные должны быть.
%{
"$include" => %{
"hospitals" => %{
"$include" => %{"rooms" => %{"beds" => %{"binding" => "last"}, "binding" => "last"}},
"$order" => %{"id" => "$asc"},
"binding" => "first"
},
"doctors" => %{
"$order" => %{"id" => "$desc"},
"binding" => "first"
}
}
}
Все внешние карты должны включать binding => "first"
, а все вложенные включения должны содержать "binding "=> "last"
.
Я пытался использовать Enum.reduce
, но не могузаставить это работать
Enum.reduce(params, %{}, fn {k, v}, acc ->
v = Map.put(v, "binding", "last")
Map.put(acc, k, if(is_map(v["$include"]), do:
add_bindings(v["$include"]), else: v))
end)
Любая помощь будет высоко ценится.
Спасибо