add smtp mailer settings #470

Merged
simon merged 5 commits from feature/308-web-form into main 2026-03-12 15:59:01 +01:00
2 changed files with 18 additions and 15 deletions
Showing only changes of commit a5ce7cb921 - Show all commits

View file

@ -43,11 +43,11 @@ defmodule MvWeb.Layouts do
slot :inner_block, required: true slot :inner_block, required: true
def app(assigns) do def app(assigns) do
club_name = get_club_name() # Single get_settings() for layout; derive club_name and join_form_enabled to avoid duplicate query.
join_form_enabled = Mv.Membership.join_form_enabled?() %{club_name: club_name, join_form_enabled: join_form_enabled} = get_layout_settings()
# TODO: get_join_form_enabled and unprocessed count run on every page load; consider # TODO: unprocessed count runs on every page load when join form enabled; consider
# loading count only on navigation or caching briefly if performance becomes an issue. # loading only on navigation or caching briefly if performance becomes an issue.
unprocessed_join_requests_count = unprocessed_join_requests_count =
get_unprocessed_join_requests_count(assigns.current_user, join_form_enabled) get_unprocessed_join_requests_count(assigns.current_user, join_form_enabled)
@ -129,12 +129,17 @@ defmodule MvWeb.Layouts do
""" """
end end
# Helper function to get club name from settings # Single settings read for layout; returns club_name and join_form_enabled to avoid duplicate get_settings().
# Falls back to "Mitgliederverwaltung" if settings can't be loaded defp get_layout_settings do
defp get_club_name do
case Mv.Membership.get_settings() do case Mv.Membership.get_settings() do
{:ok, settings} -> settings.club_name {:ok, settings} ->
_ -> "Mitgliederverwaltung" %{
club_name: settings.club_name || "Mitgliederverwaltung",
join_form_enabled: settings.join_form_enabled == true
}
_ ->
%{club_name: "Mitgliederverwaltung", join_form_enabled: false}
end end
end end

View file

@ -251,12 +251,10 @@ defmodule MvWeb.GroupLive.ShowTest do
has_element?(view, "[data-testid=group-show-members-table]", member.last_name) has_element?(view, "[data-testid=group-show-members-table]", member.last_name)
end) end)
# Verify query count is reasonable (should avoid N+1 queries) # Verify query count is reasonable (should avoid N+1 queries).
# Expected: 1 query for group lookup + 1 query for members (with preload) + member_count aggregate # Baseline: group + members preload + member_count aggregate + 1 layout get_settings + auth/role/join-count.
# Allow overhead for authorization, LiveView setup, and other initialization queries assert final_count <= 22,
# Note: member_count aggregate and authorization checks may add additional queries "Expected max 22 queries (group + members preload + member_count + layout + auth), got #{final_count}. This suggests N+1 query problem."
assert final_count <= 20,
"Expected max 20 queries (group + members preload + member_count aggregate + LiveView setup + auth), got #{final_count}. This suggests N+1 query problem."
end end
test "slug lookup is efficient (uses unique_slug index)", %{conn: conn} do test "slug lookup is efficient (uses unique_slug index)", %{conn: conn} do