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} lead -> {:ok, lead}
end end
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 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. 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 def render("404.json", _assigns) do
%{errors: %{detail: "Not Found"}} %{errors: %{detail: "Not Found"}}
end end
def render("500.json", _assigns) do def render("500.json", assigns) do
%{errors: %{detail: "Internal Server Error"}} detail = detailed_message(assigns[:reason], "Internal Server Error")
%{errors: %{detail: detail}}
end end
def render(template, _assigns) do def render("400.json", assigns) do
%{errors: %{detail: Phoenix.Controller.status_message_from_template(template)}} 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
end end