defmodule AshJsonApi.Error.NotFound do
@moduledoc """
Returned when a record was explicitly requested, but could not be found.
"""
@detail @moduledoc
@title "Entity Not Found"
@status_code 404
use AshJsonApi.Error
def new(opts) do
opts
|> Keyword.put(:detail, detail(opts))
|> Keyword.put(:log_level, :info)
|> Keyword.drop([:filter, :resource])
|> super()
end
defp detail(opts) do
filter = Keyword.get(opts, :filter)
resource = Keyword.get(opts, :resource)
if is_map(filter) || Keyword.keyword?(filter) do
filter =
Enum.map_join(filter, ", ", fn {key, value} ->
try do
"#{key}: #{to_string(value)}"
rescue
_ ->
"#{key}: #{inspect(value)}"
end
end)
"No #{AshJsonApi.Resource.Info.type(resource)} record found with `#{filter}`"
else
"No #{AshJsonApi.Resource.Info.type(resource)} record found with `#{inspect(filter)}`"
end
end
end