refactor: add typespecs and module constants

- Add @spec for public functions in Member and UserLive.Form
- Replace magic numbers with module constants:
  - @member_search_limit = 10
  - @default_similarity_threshold = 0.2
- Add comprehensive @doc for filter_by_email_match and fuzzy_search
This commit is contained in:
Moritz 2025-11-20 16:00:50 +01:00
parent 078809981d
commit 9a03485604
Signed by: moritz
GPG key ID: 1020A035E5DD0824
2 changed files with 83 additions and 17 deletions

View file

@ -267,6 +267,7 @@ defmodule MvWeb.UserLive.Form do
|> assign_form()}
end
@spec return_to(String.t() | nil) :: String.t()
defp return_to("show"), do: "show"
defp return_to(_), do: "index"
@ -383,8 +384,10 @@ defmodule MvWeb.UserLive.Form do
{:noreply, socket}
end
@spec notify_parent(any()) :: any()
defp notify_parent(msg), do: send(self(), {__MODULE__, msg})
@spec assign_form(Phoenix.LiveView.Socket.t()) :: Phoenix.LiveView.Socket.t()
defp assign_form(%{assigns: %{user: user, show_password_fields: show_password_fields}} = socket) do
form =
if user do
@ -404,10 +407,11 @@ defmodule MvWeb.UserLive.Form do
assign(socket, form: to_form(form))
end
@spec return_path(String.t(), Mv.Accounts.User.t() | nil) :: String.t()
defp return_path("index", _user), do: ~p"/users"
defp return_path("show", user), do: ~p"/users/#{user.id}"
# Load initial members when the form is loaded or member is unlinked
@spec load_initial_members(Phoenix.LiveView.Socket.t()) :: Phoenix.LiveView.Socket.t()
defp load_initial_members(socket) do
user = socket.assigns.user
user_email = if user, do: user.email, else: nil
@ -421,7 +425,8 @@ defmodule MvWeb.UserLive.Form do
|> assign(show_member_dropdown: false)
end
# Load members based on search query
@spec load_available_members(Phoenix.LiveView.Socket.t(), String.t()) ::
Phoenix.LiveView.Socket.t()
defp load_available_members(socket, query) do
user = socket.assigns.user
user_email = if user, do: user.email, else: nil
@ -430,7 +435,7 @@ defmodule MvWeb.UserLive.Form do
assign(socket, available_members: members)
end
# Query available members using the Ash action
@spec load_members_for_linking(String.t() | nil, String.t() | nil) :: [Mv.Membership.Member.t()]
defp load_members_for_linking(user_email, search_query) do
user_email_str = if user_email, do: to_string(user_email), else: nil
search_query_str = if search_query && search_query != "", do: search_query, else: nil