refactor
This commit is contained in:
parent
092fd99d48
commit
04b0916c1e
4 changed files with 182 additions and 95 deletions
|
|
@ -124,6 +124,45 @@ defmodule Mv.Membership.Import.HeaderMapper do
|
|||
end)
|
||||
end
|
||||
|
||||
@doc """
|
||||
Returns a MapSet of normalized member field names.
|
||||
|
||||
This is the single source of truth for known member fields.
|
||||
Used to distinguish between member fields and custom fields.
|
||||
|
||||
## Returns
|
||||
|
||||
- `MapSet.t(String.t())` - Set of normalized member field names
|
||||
|
||||
## Examples
|
||||
|
||||
iex> HeaderMapper.known_member_fields()
|
||||
#MapSet<["email", "firstname", "lastname", "street", "postalcode", "city"]>
|
||||
"""
|
||||
@spec known_member_fields() :: MapSet.t(String.t())
|
||||
def known_member_fields do
|
||||
cached = Process.get({__MODULE__, :known_member_fields})
|
||||
|
||||
if cached do
|
||||
cached
|
||||
else
|
||||
fields =
|
||||
@member_field_variants_raw
|
||||
|> Map.keys()
|
||||
|> Enum.map(fn canonical ->
|
||||
# Normalize the canonical field name (e.g., :first_name -> "firstname")
|
||||
canonical
|
||||
|> Atom.to_string()
|
||||
|> String.replace("_", "")
|
||||
|> String.downcase()
|
||||
end)
|
||||
|> MapSet.new()
|
||||
|
||||
Process.put({__MODULE__, :known_member_fields}, fields)
|
||||
fields
|
||||
end
|
||||
end
|
||||
|
||||
@doc """
|
||||
Normalizes a CSV header string for comparison.
|
||||
|
||||
|
|
|
|||
|
|
@ -84,17 +84,6 @@ defmodule Mv.Membership.Import.MemberCSV do
|
|||
@default_chunk_size 200
|
||||
@default_max_rows 1000
|
||||
|
||||
# Known member field names (normalized) for efficient lookup
|
||||
# These match the canonical fields in HeaderMapper
|
||||
@known_member_fields [
|
||||
"email",
|
||||
"firstname",
|
||||
"lastname",
|
||||
"street",
|
||||
"postalcode",
|
||||
"city"
|
||||
]
|
||||
|
||||
@doc """
|
||||
Prepares CSV content for import by parsing, mapping headers, and validating limits.
|
||||
|
||||
|
|
@ -205,9 +194,9 @@ defmodule Mv.Membership.Import.MemberCSV do
|
|||
end
|
||||
|
||||
# Checks if a normalized header matches a member field
|
||||
# Uses direct lookup for better performance (avoids calling build_maps/2)
|
||||
# Uses HeaderMapper.known_member_fields/0 as single source of truth
|
||||
defp member_field?(normalized) when is_binary(normalized) do
|
||||
normalized in @known_member_fields
|
||||
MapSet.member?(HeaderMapper.known_member_fields(), normalized)
|
||||
end
|
||||
|
||||
defp member_field?(_), do: false
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue