defmodule SyntropyWeb.Api.RecommendationJSON do @moduledoc false @spec recommendation(map()) :: map() def recommendation(recommendation) do %{ id: recommendation.id, node_id: Map.get(recommendation, :node_id, "local"), kind: recommendation.kind, risk_level: recommendation.risk_level, approval_required: recommendation.approval_required, candidate_agent_ids: recommendation.candidate_agent_ids, candidate_agents: get_in(recommendation, [:evidence, :candidate_agents]) || agent_refs(recommendation.candidate_agent_ids), evidence: recommendation.evidence, status: recommendation.status, applied_agent_id: recommendation.applied_agent_id, created_at: DateTime.to_iso8601(recommendation.created_at) } end defp agent_refs(agent_ids) do Enum.map(agent_ids, fn runtime_id -> case Syntropy.ClusterInfo.parse_runtime_id(runtime_id) do {:ok, ref} -> ref :error -> %{id: runtime_id, runtime_id: runtime_id, node_id: "local"} end end) end end