From 84abe0a4b519d59aba9b9bb23fdfd6c2045fa98c Mon Sep 17 00:00:00 2001 From: Moritz Date: Fri, 26 Sep 2025 19:57:11 +0200 Subject: [PATCH] feat: seed member user relations --- priv/repo/seeds.exs | 83 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/priv/repo/seeds.exs b/priv/repo/seeds.exs index cb38969..3ff747e 100644 --- a/priv/repo/seeds.exs +++ b/priv/repo/seeds.exs @@ -92,3 +92,86 @@ for member_attrs <- [ ] do Membership.create_member!(member_attrs) end + +# Create additional users for user-member linking examples +additional_users = [ + %{email: "hans.mueller@example.de"}, + %{email: "greta.schmidt@example.de"}, + %{email: "maria.weber@example.de"}, + %{email: "thomas.klein@example.de"} +] + +created_users = + Enum.map(additional_users, fn user_attrs -> + Accounts.create_user!(user_attrs, upsert?: true, upsert_identity: :unique_email) + |> Ash.Changeset.for_update(:admin_set_password, %{password: "testpassword"}) + |> Ash.update!() + end) + +# Create members with linked users to demonstrate the 1:1 relationship +# Only create if users don't already have members +linked_members = [ + %{ + first_name: "Maria", + last_name: "Weber", + email: "maria.weber@example.de", + birth_date: ~D[1992-07-14], + join_date: ~D[2023-03-15], + paid: true, + phone_number: "+49301357924", + city: "Frankfurt", + street: "Goetheplatz", + house_number: "5", + postal_code: "60313", + notes: "Linked to user account", + # Link to the third user (maria.weber@example.de) + user: Enum.at(created_users, 2) + }, + %{ + first_name: "Thomas", + last_name: "Klein", + email: "thomas.klein@example.de", + birth_date: ~D[1988-12-03], + join_date: ~D[2023-04-01], + paid: false, + phone_number: "+49302468135", + city: "Köln", + street: "Rheinstraße", + house_number: "23", + postal_code: "50667", + notes: "Linked to user account - needs payment follow-up", + # Link to the fourth user (thomas.klein@example.de) + user: Enum.at(created_users, 3) + } +] + +# Create the linked members only if the users don't already have members +Enum.each(linked_members, fn member_attrs -> + user = member_attrs.user + member_attrs_without_user = Map.delete(member_attrs, :user) + + # Check if user already has a member + if user.member_id == nil do + # User is free, create member and link + Membership.create_member!(Map.put(member_attrs_without_user, :user, %{id: user.id})) + else + # User already has a member, just create the member without linking + Membership.create_member!(member_attrs_without_user) + end +end) + +IO.puts("✅ Seeds completed successfully!") +IO.puts("📝 Created sample data:") +IO.puts(" - Property types: String, Date, Boolean, Email") +IO.puts(" - Admin user: admin@mv.local (password: testpassword)") +IO.puts(" - Sample members: Hans, Greta, Friedrich") + +IO.puts( + " - Additional users: hans.mueller@example.de, greta.schmidt@example.de, maria.weber@example.de, thomas.klein@example.de" +) + +IO.puts( + " - Linked members: Maria Weber ↔ maria.weber@example.de, Thomas Klein ↔ thomas.klein@example.de" +) + +IO.puts("🔗 Visit the application to see user-member relationships in action!")