defmodule Mobilizon.GraphQL.Middleware.ErrorHandler do
  @moduledoc """
  Absinthe Error Handler
  """
  alias Mobilizon.GraphQL.Error

  @behaviour Absinthe.Middleware
  @impl Absinthe.Middleware
  def call(resolution, _config) do
    errors =
      resolution.errors
      |> Enum.map(&Error.normalize/1)
      |> List.flatten()
      |> Enum.map(&to_absinthe_format/1)

    %{resolution | errors: errors}
  end

  defp to_absinthe_format(%Error{} = error), do: Map.from_struct(error)
  defp to_absinthe_format(error), do: error
end