feat: add atomic update for single member field visibility
This commit is contained in:
parent
9af7381843
commit
4a1042ab1a
3 changed files with 177 additions and 24 deletions
|
|
@ -40,6 +40,8 @@ defmodule Mv.Membership.Member do
|
|||
import Ash.Expr
|
||||
require Logger
|
||||
|
||||
alias Mv.Membership.Helpers.VisibilityConfig
|
||||
|
||||
# Module constants
|
||||
@member_search_limit 10
|
||||
|
||||
|
|
@ -607,7 +609,7 @@ defmodule Mv.Membership.Member do
|
|||
{:ok, settings} ->
|
||||
visibility_config = settings.member_field_visibility || %{}
|
||||
# Normalize map keys to atoms (JSONB may return string keys)
|
||||
normalized_config = normalize_visibility_config(visibility_config)
|
||||
normalized_config = VisibilityConfig.normalize(visibility_config)
|
||||
|
||||
# Get value from normalized config, use field-specific default
|
||||
Map.get(normalized_config, field, default_visibility)
|
||||
|
|
@ -959,29 +961,6 @@ defmodule Mv.Membership.Member do
|
|||
defp error_type(error) when is_atom(error), do: error
|
||||
defp error_type(_), do: :unknown
|
||||
|
||||
# Normalizes visibility config map keys from strings to atoms.
|
||||
# JSONB in PostgreSQL converts atom keys to string keys when storing.
|
||||
defp normalize_visibility_config(config) when is_map(config) do
|
||||
Enum.reduce(config, %{}, fn
|
||||
{key, value}, acc when is_atom(key) ->
|
||||
Map.put(acc, key, value)
|
||||
|
||||
{key, value}, acc when is_binary(key) ->
|
||||
try do
|
||||
atom_key = String.to_existing_atom(key)
|
||||
Map.put(acc, atom_key, value)
|
||||
rescue
|
||||
ArgumentError ->
|
||||
acc
|
||||
end
|
||||
|
||||
_, acc ->
|
||||
acc
|
||||
end)
|
||||
end
|
||||
|
||||
defp normalize_visibility_config(_), do: %{}
|
||||
|
||||
@doc """
|
||||
Performs fuzzy search on members using PostgreSQL trigram similarity.
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue