better error handlign
Some checks failed
Build and Publish / build-release (push) Failing after 23s

This commit is contained in:
2026-05-15 13:47:26 -05:00
parent ac114869be
commit fbd3bc9772
2 changed files with 47 additions and 15 deletions

View File

@@ -13,15 +13,4 @@ defmodule CustomerService.Lead.Queries do
lead -> {:ok, lead}
end
end
def list_leads(params \\ %{}) do
Flop.validate_and_run(QuickLead, params, for: QuickLead)
end
def get_lead(id) do
case Repo.get(QuickLead, id) do
nil -> {:error, :not_found}
lead -> {:ok, lead}
end
end
end

View File

@@ -3,15 +3,58 @@ defmodule CustomerServiceWeb.ErrorJSON do
This module is invoked by your endpoint in case of errors on JSON requests.
"""
alias Ecto.Changeset
alias OpenApiSpex.Error
def render("404.json", _assigns) do
%{errors: %{detail: "Not Found"}}
end
def render("500.json", _assigns) do
%{errors: %{detail: "Internal Server Error"}}
def render("500.json", assigns) do
detail = detailed_message(assigns[:reason], "Internal Server Error")
%{errors: %{detail: detail}}
end
def render(template, _assigns) do
%{errors: %{detail: Phoenix.Controller.status_message_from_template(template)}}
def render("400.json", assigns) do
detail = detailed_message(assigns[:reason], "Bad Request")
%{errors: %{detail: detail}}
end
def render("422.json", assigns) do
detail = detailed_message(assigns[:reason], "Unprocessable Entity")
%{errors: %{detail: detail}}
end
def render(template, assigns) do
detail =
detailed_message(
assigns[:reason],
Phoenix.Controller.status_message_from_template(template)
)
%{errors: %{detail: detail}}
end
defp detailed_message(nil, default), do: default
defp detailed_message(%Changeset{} = changeset, _default) do
format_changeset_errors(changeset)
|> inspect()
end
defp detailed_message(%Error{errors: errors}, _default) do
Enum.map_join(errors, ", ", fn e -> "#{e.code}: #{e.message}" end)
end
defp detailed_message(reason, _default) do
inspect(reason, pretty: true)
end
defp format_changeset_errors(changeset) do
Changeset.traverse_errors(changeset, fn {msg, opts} ->
Enum.reduce(opts, msg, fn {key, value}, acc ->
String.replace(acc, "%{#{key}}", to_string(value))
end)
end)
end
end