Files
music_library/lib/music_library_web/error_messages.ex
T
Claudio Ortolina 7cf9b4e7f8 First pass at uniformed types, specs and docs
- spec public functions (skipping controllers, views, live views and
components)
- use types instead of explanations in docs
- remove redundant docs
- fix typos
2026-03-06 08:33:11 +00:00

70 lines
2.9 KiB
Elixir

defmodule MusicLibraryWeb.ErrorMessages do
@moduledoc """
Maps internal error terms to user-friendly messages.
Used at call sites that previously showed `inspect(reason)` in toasts or assigns.
Each call site keeps its own contextual prefix (e.g. "Error refreshing cover")
and appends `": " <> friendly_message(reason)` for the reason part.
"""
use Gettext, backend: MusicLibraryWeb.Gettext
@spec friendly_message(term()) :: String.t()
# App error atoms
def friendly_message(:cover_not_available), do: gettext("cover art is not available")
def friendly_message(:no_duration), do: gettext("release has no track duration information")
def friendly_message(:medium_not_found), do: gettext("the specified disc was not found")
def friendly_message(:no_session_key), do: gettext("Last.fm session key is not configured")
def friendly_message(:already_collected),
do: gettext("this record is already in your collection")
def friendly_message(:not_found), do: gettext("the resource was not found")
def friendly_message(:no_discogs_data), do: gettext("no Discogs profile available")
def friendly_message(:image_not_found), do: gettext("no image could be found")
def friendly_message(:invalid_parameters), do: gettext("invalid parameters were provided")
def friendly_message(:download_failed), do: gettext("the download failed")
# Last.fm API error atoms
def friendly_message(:authentication_failed), do: gettext("Last.fm authentication failed")
def friendly_message(:invalid_session_key),
do: gettext("Last.fm session has expired, please reconnect")
def friendly_message(:invalid_api_key), do: gettext("Last.fm API key is invalid")
def friendly_message(:suspended_api_key), do: gettext("Last.fm API key has been suspended")
def friendly_message(:rate_limit_exceeded),
do: gettext("rate limit exceeded, please try again later")
def friendly_message(:service_offline),
do: gettext("service is currently offline, please try again later")
def friendly_message(:transient_error),
do: gettext("a temporary error occurred, please try again")
def friendly_message(:operation_failed), do: gettext("the operation failed, please try again")
def friendly_message(:invalid_resource),
do: gettext("the requested resource does not exist")
# Structured errors
def friendly_message(%Req.TransportError{reason: :timeout}),
do: gettext("the request timed out, please try again")
def friendly_message(%Req.TransportError{reason: :econnrefused}),
do: gettext("the service is not reachable")
def friendly_message(%Req.TransportError{reason: :nxdomain}),
do: gettext("the service could not be found")
def friendly_message(%Req.TransportError{}),
do: gettext("a connection error occurred, please try again")
def friendly_message(%Ecto.Changeset{}), do: gettext("validation failed")
# Fallback
def friendly_message(_), do: gettext("something went wrong, please try again")
end