From 1ac0f7c3d3af43391ac60311030dfff5466abfd6 Mon Sep 17 00:00:00 2001 From: alxlion Date: Fri, 7 Aug 2026 06:22:20 +0000 Subject: [PATCH] Resolve duplicate active user emails --- ...07052500_allow_reusing_deleted_user_emails.exs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/priv/repo/migrations/20260807052500_allow_reusing_deleted_user_emails.exs b/priv/repo/migrations/20260807052500_allow_reusing_deleted_user_emails.exs index 0cb9998..56b8fc4 100644 --- a/priv/repo/migrations/20260807052500_allow_reusing_deleted_user_emails.exs +++ b/priv/repo/migrations/20260807052500_allow_reusing_deleted_user_emails.exs @@ -3,6 +3,21 @@ defmodule Claper.Repo.Migrations.AllowReusingDeletedUserEmails do def change do drop_if_exists unique_index(:users, [:email]) + + execute """ + WITH ranked_users AS ( + SELECT + id, + ROW_NUMBER() OVER (PARTITION BY email ORDER BY inserted_at, id) AS email_position + FROM users + WHERE deleted_at IS NULL + ) + UPDATE users + SET deleted_at = CURRENT_TIMESTAMP, updated_at = CURRENT_TIMESTAMP + FROM ranked_users + WHERE users.id = ranked_users.id AND ranked_users.email_position > 1 + """ + create unique_index(:users, [:email], where: "deleted_at IS NULL") end end