diff --git a/priv/repo/seeds_bootstrap.exs b/priv/repo/seeds_bootstrap.exs index 15d74cd..94b8cc0 100644 --- a/priv/repo/seeds_bootstrap.exs +++ b/priv/repo/seeds_bootstrap.exs @@ -55,9 +55,10 @@ for attrs <- fee_type_configs do end # Resolve default fee type (Standard, 120€ yearly) for settings +# Filter by name and interval to avoid ambiguity if multiple "Standard" types exist default_fee_type = Mv.MembershipFees.MembershipFeeType - |> Ash.Query.filter(name == "Standard") + |> Ash.Query.filter(name == "Standard" and interval == :yearly) |> Ash.read_one!(authorize?: false, domain: Mv.MembershipFees) # 2. Custom fields (authorize?: false for bootstrap) diff --git a/priv/repo/seeds_dev.exs b/priv/repo/seeds_dev.exs index edf7638..352299f 100644 --- a/priv/repo/seeds_dev.exs +++ b/priv/repo/seeds_dev.exs @@ -250,6 +250,8 @@ Enum.with_index(member_configs) fee_type_id = if fee_type_index, do: Enum.at(all_fee_types, fee_type_index).id, else: nil cycle_status = Enum.at(cycle_statuses, index) + # Do not include membership_fee_type_id in upsert so re-runs do not overwrite + # existing assignments; set via update below only when member has none base_attrs = %{ first_name: config.first_name, last_name: config.last_name, @@ -262,13 +264,8 @@ Enum.with_index(member_configs) country: Enum.at(countries_list, index) } - member_attrs = - if fee_type_id, - do: Map.put(base_attrs, :membership_fee_type_id, fee_type_id), - else: base_attrs - member = - Membership.create_member!(member_attrs, + Membership.create_member!(base_attrs, upsert?: true, upsert_identity: :unique_email, actor: admin_user_with_role