From a7e613664866efabbb58edd2234b3cea84d65c66 Mon Sep 17 00:00:00 2001 From: Moritz Date: Sat, 24 Jan 2026 19:13:03 +0100 Subject: [PATCH] Add migration to assign 'Mitglied' role to existing users --- ...assign_mitglied_role_to_existing_users.exs | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 priv/repo/migrations/20260122231235_assign_mitglied_role_to_existing_users.exs diff --git a/priv/repo/migrations/20260122231235_assign_mitglied_role_to_existing_users.exs b/priv/repo/migrations/20260122231235_assign_mitglied_role_to_existing_users.exs new file mode 100644 index 0000000..2f345a2 --- /dev/null +++ b/priv/repo/migrations/20260122231235_assign_mitglied_role_to_existing_users.exs @@ -0,0 +1,41 @@ +defmodule Mv.Repo.Migrations.AssignMitgliedRoleToExistingUsers do + @moduledoc """ + Assigns the "Mitglied" role to all existing users without a role. + + This migration runs once during deployment to ensure all users have a role assigned. + New users will automatically get the "Mitglied" role via the AssignDefaultRole change. + """ + use Ecto.Migration + import Ecto.Query + + def up do + # Find the Mitglied role ID + mitglied_role_id = + repo().one( + from(r in "roles", + where: r.name == "Mitglied", + select: r.id + ) + ) + + if mitglied_role_id do + # Assign Mitglied role to all users without a role + updated_count = + repo().update_all( + from(u in "users", where: is_nil(u.role_id)), + set: [role_id: mitglied_role_id] + ) + + IO.puts("✅ Assigned 'Mitglied' role to #{updated_count} existing user(s)") + else + IO.puts("⚠️ Warning: 'Mitglied' role not found - skipping role assignment") + IO.puts(" This is expected if roles haven't been seeded yet.") + IO.puts(" New users will get the role automatically via AssignDefaultRole change.") + end + end + + def down do + # Not reversible - we can't know which users had no role before + :ok + end +end