refactor: Reduce function complexity and nesting depth

- Extract helper functions from process_chunk to reduce nesting
- Extract format_error_message from extract_changeset_error
- Split extract_error_message into smaller functions to reduce complexity
- Fixes Credo refactoring opportunities
This commit is contained in:
Moritz 2026-01-20 16:05:09 +01:00 committed by Simon
parent c137ee6221
commit 4e48ace2d4
Signed by: simon
GPG key ID: 40E7A58C4AA1EDB2
2 changed files with 107 additions and 55 deletions

View file

@ -355,48 +355,65 @@ defmodule MvWeb.MemberLive.Form do
# Extracts a user-friendly error message from form errors
defp extract_error_message(form) do
# Try to extract message from source errors first
source_errors = get_source_errors(form)
case source_errors do
[%Ash.Error.Invalid{errors: errors} | _] when is_list(errors) ->
# Extract first error message
case List.first(errors) do
%{message: message} when is_binary(message) ->
gettext("Validation failed: %{message}", message: message)
cond do
has_invalid_error?(source_errors) ->
extract_invalid_error_message(source_errors)
%{field: field, message: message} when is_binary(message) ->
gettext("Validation failed: %{field} %{message}", field: field, message: message)
has_other_error?(source_errors) ->
extract_other_error_message(source_errors)
_ ->
gettext("Validation failed. Please check your input.")
end
has_form_errors?(form) ->
gettext("Please correct the errors in the form and try again.")
[error | _] ->
# Try to extract message from other error types
case error do
%{message: message} when is_binary(message) ->
message
true ->
gettext("Failed to save member. Please try again.")
end
end
error when is_struct(error) ->
# Try to use Ash.ErrorKind protocol if available
try do
Ash.ErrorKind.message(error)
rescue
Protocol.UndefinedError -> gettext("Failed to save member. Please try again.")
end
# Checks if source errors contain an Ash.Error.Invalid
defp has_invalid_error?([%Ash.Error.Invalid{errors: errors} | _]) when is_list(errors), do: true
defp has_invalid_error?(_), do: false
_ ->
gettext("Failed to save member. Please try again.")
end
# Extracts message from Ash.Error.Invalid
defp extract_invalid_error_message([%Ash.Error.Invalid{errors: errors} | _]) do
case List.first(errors) do
%{message: message} when is_binary(message) ->
gettext("Validation failed: %{message}", message: message)
%{field: field, message: message} when is_binary(message) ->
gettext("Validation failed: %{field} %{message}", field: field, message: message)
_ ->
# Check if there are any field errors in the form
if has_form_errors?(form) do
gettext("Please correct the errors in the form and try again.")
else
gettext("Failed to save member. Please try again.")
end
gettext("Validation failed. Please check your input.")
end
end
# Checks if source errors contain other error types
defp has_other_error?([_ | _]), do: true
defp has_other_error?(_), do: false
# Extracts message from other error types
defp extract_other_error_message([error | _]) do
cond do
Map.has_key?(error, :message) and is_binary(error.message) ->
error.message
is_struct(error) ->
extract_struct_error_message(error)
true ->
gettext("Failed to save member. Please try again.")
end
end
# Extracts message from struct error using Ash.ErrorKind protocol
defp extract_struct_error_message(error) do
try do
Ash.ErrorKind.message(error)
rescue
Protocol.UndefinedError -> gettext("Failed to save member. Please try again.")
end
end