diff --git a/priv/repo/seeds.exs b/priv/repo/seeds.exs index e96ca6e..6468949 100644 --- a/priv/repo/seeds.exs +++ b/priv/repo/seeds.exs @@ -3,10 +3,10 @@ # mix run priv/repo/seeds.exs # -alias Mv.Membership alias Mv.Accounts -alias Mv.MembershipFees.MembershipFeeType +alias Mv.Membership alias Mv.MembershipFees.CycleGenerator +alias Mv.MembershipFees.MembershipFeeType require Ash.Query @@ -579,6 +579,39 @@ Enum.with_index(linked_members) end end) +# Create example groups (idempotent: create only if name does not exist) +group_configs = [ + %{name: "Vorstand", description: "Gremium Vorstand"}, + %{name: "Trainer*innen", description: "Alle lizenzierten Trainer*innen"}, + %{name: "Jugend", description: "Jugendbereich"}, + %{name: "Newsletter", description: "Empfänger*innen Newsletter"} +] + +existing_groups = + case Membership.list_groups(actor: admin_user_with_role) do + {:ok, list} -> list + {:error, _} -> [] + end + +existing_names_lower = MapSet.new(existing_groups, &String.downcase(&1.name)) + +seed_groups = + Enum.reduce(group_configs, %{}, fn config, acc -> + name = config.name + + if MapSet.member?(existing_names_lower, String.downcase(name)) do + group = Enum.find(existing_groups, &(String.downcase(&1.name) == String.downcase(name))) + Map.put(acc, name, group) + else + group = + Membership.create_group!(%{name: name, description: config.description}, + actor: admin_user_with_role + ) + + Map.put(acc, name, group) + end + end) + # Create sample custom field values for some members all_members = Ash.read!(Membership.Member, actor: admin_user_with_role) all_custom_fields = Ash.read!(Membership.CustomField, actor: admin_user_with_role) @@ -587,6 +620,35 @@ all_custom_fields = Ash.read!(Membership.CustomField, actor: admin_user_with_rol find_field = fn name -> Enum.find(all_custom_fields, &(&1.name == name)) end find_member = fn email -> Enum.find(all_members, &(&1.email == email)) end +# Assign seed members to groups (idempotent: duplicate create_member_group is skipped) +member_group_assignments = [ + {"hans.mueller@example.de", ["Vorstand", "Newsletter"]}, + {"greta.schmidt@example.de", ["Jugend", "Newsletter"]}, + {"friedrich.wagner@example.de", ["Trainer*innen"]}, + {"maria.weber@example.de", ["Newsletter"]}, + {"thomas.klein@example.de", ["Newsletter"]} +] + +Enum.each(member_group_assignments, fn {email, group_names} -> + member = find_member.(email) + + if member do + Enum.each(group_names, fn group_name -> + group = seed_groups[group_name] + + if group do + case Membership.create_member_group( + %{member_id: member.id, group_id: group.id}, + actor: admin_user_with_role + ) do + {:ok, _} -> :ok + {:error, _} -> :ok + end + end + end) + end +end) + # Add custom field values for Hans Müller if hans = find_member.("hans.mueller@example.de") do [ @@ -731,6 +793,7 @@ IO.puts( ) IO.puts(" - Sample members: Hans, Greta, Friedrich") +IO.puts(" - Groups: Vorstand, Trainer*innen, Jugend, Newsletter (with members assigned)") IO.puts( " - Additional users: hans.mueller@example.de, greta.schmidt@example.de, maria.weber@example.de, thomas.klein@example.de"