From 303b81d37d16e648962abe6ea8c1f308f4e25c17 Mon Sep 17 00:00:00 2001 From: Moritz Date: Tue, 6 Jan 2026 23:57:57 +0100 Subject: [PATCH] refactor: reduce nesting depth in RoleLive.Index.mount Extract role loading logic into separate private functions to fix Credo warning about nested function body. --- lib/mv_web/live/role_live/index.ex | 55 ++++++++++++++---------------- 1 file changed, 26 insertions(+), 29 deletions(-) diff --git a/lib/mv_web/live/role_live/index.ex b/lib/mv_web/live/role_live/index.ex index e23972f..879f236 100644 --- a/lib/mv_web/live/role_live/index.ex +++ b/lib/mv_web/live/role_live/index.ex @@ -20,35 +20,7 @@ defmodule MvWeb.RoleLive.Index do @impl true def mount(_params, _session, socket) do - # Ensure current_user has role loaded for authorization checks - socket = - if socket.assigns[:current_user] do - user = socket.assigns.current_user - - # Load role if not already loaded (check for Ash.NotLoaded struct) - user_with_role = - case Map.get(user, :role) do - %Ash.NotLoaded{} -> - case Ash.load(user, :role, domain: Mv.Accounts) do - {:ok, loaded_user} -> loaded_user - {:error, _} -> user - end - - nil -> - case Ash.load(user, :role, domain: Mv.Accounts) do - {:ok, loaded_user} -> loaded_user - {:error, _} -> user - end - - role when not is_nil(role) -> - user - end - - assign(socket, :current_user, user_with_role) - else - socket - end - + socket = ensure_user_role_loaded(socket) roles = load_roles() {:ok, @@ -57,6 +29,31 @@ defmodule MvWeb.RoleLive.Index do |> assign(:roles, roles)} end + defp ensure_user_role_loaded(socket) do + if socket.assigns[:current_user] do + user = socket.assigns.current_user + user_with_role = load_user_role(user) + assign(socket, :current_user, user_with_role) + else + socket + end + end + + defp load_user_role(user) do + case Map.get(user, :role) do + %Ash.NotLoaded{} -> load_role_safely(user) + nil -> load_role_safely(user) + _role -> user + end + end + + defp load_role_safely(user) do + case Ash.load(user, :role, domain: Mv.Accounts) do + {:ok, loaded_user} -> loaded_user + {:error, _} -> user + end + end + @impl true def handle_event("delete", %{"id" => id}, socket) do {:ok, role} = Authorization.get_role(id)