From 0ca798a221c86061d1be42dcee3c174d83e1ec9f Mon Sep 17 00:00:00 2001 From: Nancy Huang <205217630+naanci@users.noreply.github.com> Date: Wed, 23 Sep 2026 15:54:19 -0400 Subject: [PATCH 1/3] TAN-1016: migrate old emails to the new alisases used by the 4 supported CUNY schools in database TAN-1016: clean up --- ...0079__Backfill_CUNY_school_email_aliases.SQL | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 db/migration/V0079__Backfill_CUNY_school_email_aliases.SQL diff --git a/db/migration/V0079__Backfill_CUNY_school_email_aliases.SQL b/db/migration/V0079__Backfill_CUNY_school_email_aliases.SQL new file mode 100644 index 000000000..5f201a62b --- /dev/null +++ b/db/migration/V0079__Backfill_CUNY_school_email_aliases.SQL @@ -0,0 +1,17 @@ +DO $$ +BEGIN + CASE current_database() + WHEN 'codebloom-prod', 'codebloom-stg' THEN + UPDATE "User" u + SET "schoolEmail" = split_part(u."schoolEmail", '@', 1) || '@' || domains.new_domain + FROM (VALUES + ('myhunter.cuny.edu', 'stu-mail.hunter.cuny.edu'), + ('baruchmail.cuny.edu', 'stu-mail.baruch.cuny.edu'), + ('citymail.cuny.edu', 'stu-mail.ccny.cuny.edu'), + ('stu.bmcc.cuny.edu', 'stu-mail.bmcc.cuny.edu') + ) AS domains(old_domain, new_domain) + WHERE lower(substring(u."schoolEmail" FROM '@(.*)$')) = domains.old_domain; + ELSE + RAISE NOTICE 'Skipping prod/staging only backfill: Current database is %', current_database(); + END CASE; +END $$; From 48dcc8ce3119afb0a365b10ec2ddb942aacf4e3d Mon Sep 17 00:00:00 2001 From: Nancy Huang <205217630+naanci@users.noreply.github.com> Date: Sat, 26 Sep 2026 15:48:57 -0400 Subject: [PATCH 2/3] TAN-1016: rename email backfill to v0080 --- ..._aliases.SQL => V0080__Backfill_CUNY_school_email_aliases.SQL} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename db/migration/{V0079__Backfill_CUNY_school_email_aliases.SQL => V0080__Backfill_CUNY_school_email_aliases.SQL} (100%) diff --git a/db/migration/V0079__Backfill_CUNY_school_email_aliases.SQL b/db/migration/V0080__Backfill_CUNY_school_email_aliases.SQL similarity index 100% rename from db/migration/V0079__Backfill_CUNY_school_email_aliases.SQL rename to db/migration/V0080__Backfill_CUNY_school_email_aliases.SQL From 1aa11b25fc123a11b3f985dfb5101f929eeecadf Mon Sep 17 00:00:00 2001 From: Nancy Huang <205217630+naanci@users.noreply.github.com> Date: Sat, 26 Sep 2026 16:18:38 -0400 Subject: [PATCH 3/3] TAN-1016: check constraints and rewrite cuny email --- db/migration/V0080__Backfill_CUNY_school_email_aliases.SQL | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/db/migration/V0080__Backfill_CUNY_school_email_aliases.SQL b/db/migration/V0080__Backfill_CUNY_school_email_aliases.SQL index 5f201a62b..b7245bd4c 100644 --- a/db/migration/V0080__Backfill_CUNY_school_email_aliases.SQL +++ b/db/migration/V0080__Backfill_CUNY_school_email_aliases.SQL @@ -2,6 +2,9 @@ DO $$ BEGIN CASE current_database() WHEN 'codebloom-prod', 'codebloom-stg' THEN + ALTER TABLE "User" + DROP CONSTRAINT "ck_user_createdAt_not_null"; + UPDATE "User" u SET "schoolEmail" = split_part(u."schoolEmail", '@', 1) || '@' || domains.new_domain FROM (VALUES @@ -11,6 +14,9 @@ BEGIN ('stu.bmcc.cuny.edu', 'stu-mail.bmcc.cuny.edu') ) AS domains(old_domain, new_domain) WHERE lower(substring(u."schoolEmail" FROM '@(.*)$')) = domains.old_domain; + + ALTER TABLE "User" + ADD CONSTRAINT "ck_user_createdAt_not_null" CHECK ("createdAt" IS NOT NULL) NOT VALID; ELSE RAISE NOTICE 'Skipping prod/staging only backfill: Current database is %', current_database(); END CASE;