lib/ash_json_api/error/invalid_body.ex

defmodule AshJsonApi.Error.InvalidBody do
  @moduledoc """
  Returned when the request body provided is invalid
  """
  @detail @moduledoc
  @title "Invalid Body"
  @status_code 400

  use AshJsonApi.Error
  alias AshJsonApi.Error.SchemaErrors

  def new(opts) do
    json_xema_error = opts[:json_xema_error]

    opts_without_error = Keyword.delete(opts, :json_xema_error)

    json_xema_error
    |> SchemaErrors.all_errors(:json_pointer)
    |> Enum.map(fn %{path: path, message: message} ->
      opts_without_error
      |> Keyword.put(:detail, message)
      |> Keyword.put(:source_pointer, path)
      |> super()
    end)
  end
end