Files
music_library/lib/music_library_web/controllers/error_controller.ex
T
2026-05-04 13:14:40 +01:00

66 lines
1.6 KiB
Elixir

defmodule MusicLibraryWeb.ErrorController do
use MusicLibraryWeb, :controller
alias MusicLibrary.Errors
def index(conn, params) do
status = parse_status(params["status"])
muted = parse_muted(params["muted"])
search = params["search"]
limit = parse_int(params["limit"], 50)
offset = parse_int(params["offset"], 0)
opts =
[]
|> maybe_put(:status, status)
|> maybe_put(:muted, muted)
|> Keyword.put(:search, search)
|> Keyword.put(:limit, limit)
|> Keyword.put(:offset, offset)
%{errors: errors, total: total} = Errors.list_errors(opts)
render(conn, :index, errors: errors, total: total, limit: limit, offset: offset)
end
def show(conn, %{"id" => id}) do
{id_int, ""} = Integer.parse(id)
case Errors.get_error(id_int) do
{:ok, error} ->
render(conn, :show, error: error)
{:error, :not_found} ->
conn
|> put_status(:not_found)
|> json(%{error: "Not Found"})
end
end
# -- private helpers --
defp parse_status(nil), do: nil
defp parse_status("resolved"), do: :resolved
defp parse_status("unresolved"), do: :unresolved
defp parse_status(_), do: nil
defp parse_muted(nil), do: nil
defp parse_muted("true"), do: true
defp parse_muted("false"), do: false
defp parse_muted(_), do: nil
defp parse_int(nil, default), do: default
defp parse_int(value, default) when is_binary(value) do
case Integer.parse(value) do
{int, ""} -> int
_ -> default
end
end
defp parse_int(_, default), do: default
defp maybe_put(kw, _key, nil), do: kw
defp maybe_put(kw, key, value), do: Keyword.put(kw, key, value)
end