refactor: fix credo warnings, update gettext
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
Simon 2026-01-27 22:32:37 +01:00
parent 05c81af6e9
commit 5e0b6580ae
Signed by: simon
GPG key ID: 40E7A58C4AA1EDB2
6 changed files with 487 additions and 83 deletions

View file

@ -27,40 +27,46 @@ defmodule MvWeb.GroupLive.Form do
action = if params["slug"], do: :update, else: :create
resource = Mv.Membership.Group
unless can?(actor, action, resource) do
{:ok, redirect(socket, to: ~p"/groups")}
else
socket =
case params["slug"] do
nil ->
# New group
socket
|> assign(:group, nil)
|> assign(:page_title, gettext("Create Group"))
|> assign(:return_to, "index")
slug ->
# Edit existing group
case Membership.get_group_by_slug(slug, actor: actor) do
{:ok, nil} ->
socket
|> put_flash(:error, gettext("Group not found."))
|> redirect(to: ~p"/groups")
{:ok, group} ->
socket
|> assign(:group, group)
|> assign(:page_title, gettext("Edit Group"))
|> assign(:return_to, "show")
{:error, _error} ->
socket
|> put_flash(:error, gettext("Failed to load group."))
|> redirect(to: ~p"/groups")
end
end
if can?(actor, action, resource) do
socket = load_group_for_form(socket, params, actor)
{:ok, assign_form(socket)}
else
{:ok, redirect(socket, to: ~p"/groups")}
end
end
defp load_group_for_form(socket, params, actor) do
case params["slug"] do
nil ->
# New group
socket
|> assign(:group, nil)
|> assign(:page_title, gettext("Create Group"))
|> assign(:return_to, "index")
slug ->
# Edit existing group
load_existing_group(socket, slug, actor)
end
end
defp load_existing_group(socket, slug, actor) do
case Membership.get_group_by_slug(slug, actor: actor) do
{:ok, nil} ->
socket
|> put_flash(:error, gettext("Group not found."))
|> redirect(to: ~p"/groups")
{:ok, group} ->
socket
|> assign(:group, group)
|> assign(:page_title, gettext("Edit Group"))
|> assign(:return_to, "show")
{:error, _error} ->
socket
|> put_flash(:error, gettext("Failed to load group."))
|> redirect(to: ~p"/groups")
end
end

View file

@ -23,15 +23,15 @@ defmodule MvWeb.GroupLive.Index do
actor = current_actor(socket)
# Check if user can read groups
unless can?(actor, :read, Mv.Membership.Group) do
{:ok, redirect(socket, to: ~p"/members")}
else
if can?(actor, :read, Mv.Membership.Group) do
groups = load_groups(actor)
{:ok,
socket
|> assign(:page_title, gettext("Groups"))
|> assign(:groups, groups)}
else
{:ok, redirect(socket, to: ~p"/members")}
end
end

View file

@ -30,28 +30,32 @@ defmodule MvWeb.GroupLive.Show do
actor = current_actor(socket)
# Check if user can read groups
unless can?(actor, :read, Mv.Membership.Group) do
{:noreply, redirect(socket, to: ~p"/members")}
if can?(actor, :read, Mv.Membership.Group) do
load_group_by_slug(socket, slug, actor)
else
case Membership.get_group_by_slug(slug, actor: actor, load: [:members, :member_count]) do
{:ok, nil} ->
{:noreply,
socket
|> put_flash(:error, gettext("Group not found."))
|> redirect(to: ~p"/groups")}
{:noreply, redirect(socket, to: ~p"/members")}
end
end
{:ok, group} ->
{:noreply,
socket
|> assign(:page_title, group.name)
|> assign(:group, group)}
defp load_group_by_slug(socket, slug, actor) do
case Membership.get_group_by_slug(slug, actor: actor, load: [:members, :member_count]) do
{:ok, nil} ->
{:noreply,
socket
|> put_flash(:error, gettext("Group not found."))
|> redirect(to: ~p"/groups")}
{:error, _error} ->
{:noreply,
socket
|> put_flash(:error, gettext("Failed to load group."))
|> redirect(to: ~p"/groups")}
end
{:ok, group} ->
{:noreply,
socket
|> assign(:page_title, group.name)
|> assign(:group, group)}
{:error, _error} ->
{:noreply,
socket
|> put_flash(:error, gettext("Failed to load group."))
|> redirect(to: ~p"/groups")}
end
end
@ -101,7 +105,12 @@ defmodule MvWeb.GroupLive.Show do
<h2 class="text-lg font-semibold mb-2">{gettext("Members")}</h2>
<div class="border border-base-300 rounded-lg p-4 bg-base-100">
<p class="mb-4">
{gettext("Total: %{count} member(s)", count: @group.member_count || 0)}
{ngettext(
"Total: %{count} member",
"Total: %{count} members",
@group.member_count || 0,
count: @group.member_count || 0
)}
</p>
<%= if Enum.empty?(@group.members || []) do %>
@ -243,33 +252,7 @@ defmodule MvWeb.GroupLive.Show do
|> redirect(to: ~p"/groups")}
{:ok, group} ->
if socket.assigns.name_confirmation == group.name do
case Membership.destroy_group(group, actor: actor) do
:ok ->
{:noreply,
socket
|> put_flash(:info, gettext("Group deleted successfully."))
|> redirect(to: ~p"/groups")}
{:error, error} ->
error_message = format_error(error)
{:noreply,
socket
|> put_flash(
:error,
gettext("Failed to delete group: %{error}", error: error_message)
)
|> assign(:show_delete_modal, false)
|> assign(:name_confirmation, "")}
end
else
{:noreply,
socket
|> put_flash(:error, gettext("Group name does not match."))
|> assign(:show_delete_modal, false)
|> assign(:name_confirmation, "")}
end
handle_delete_confirmation(socket, group, actor)
{:error, _error} ->
{:noreply,
@ -279,6 +262,40 @@ defmodule MvWeb.GroupLive.Show do
end
end
defp handle_delete_confirmation(socket, group, actor) do
if socket.assigns.name_confirmation == group.name do
perform_group_deletion(socket, group, actor)
else
{:noreply,
socket
|> put_flash(:error, gettext("Group name does not match."))
|> assign(:show_delete_modal, false)
|> assign(:name_confirmation, "")}
end
end
defp perform_group_deletion(socket, group, actor) do
case Membership.destroy_group(group, actor: actor) do
:ok ->
{:noreply,
socket
|> put_flash(:info, gettext("Group deleted successfully."))
|> redirect(to: ~p"/groups")}
{:error, error} ->
error_message = format_error(error)
{:noreply,
socket
|> put_flash(
:error,
gettext("Failed to delete group: %{error}", error: error_message)
)
|> assign(:show_delete_modal, false)
|> assign(:name_confirmation, "")}
end
end
defp format_error(%{message: message}) when is_binary(message), do: message
defp format_error(error), do: inspect(error)
end