auto-populate missing username field with email local-part
This commit is contained in:
@@ -0,0 +1,2 @@
|
||||
-- This migration was generated locally but superseded before it was applied.
|
||||
-- It remains as a no-op to preserve Prisma migration history.
|
||||
@@ -0,0 +1,27 @@
|
||||
UPDATE users
|
||||
SET username = lower(split_part(email, '@', 1))
|
||||
WHERE username IS NULL OR btrim(username) = '';
|
||||
|
||||
WITH ranked_users AS (
|
||||
SELECT id,
|
||||
username,
|
||||
row_number() OVER (PARTITION BY username ORDER BY created_at, id) AS rn
|
||||
FROM users
|
||||
),
|
||||
deduplicated AS (
|
||||
SELECT id,
|
||||
CASE
|
||||
WHEN rn = 1 THEN username
|
||||
ELSE left(username, greatest(1, 24 - char_length(rn::text))) || rn::text
|
||||
END AS next_username
|
||||
FROM ranked_users
|
||||
)
|
||||
UPDATE users u
|
||||
SET username = d.next_username
|
||||
FROM deduplicated d
|
||||
WHERE u.id = d.id;
|
||||
|
||||
ALTER TABLE users
|
||||
ALTER COLUMN username SET NOT NULL;
|
||||
|
||||
CREATE UNIQUE INDEX users_username_key ON users (username);
|
||||
@@ -1,8 +1,19 @@
|
||||
DO $$
|
||||
BEGIN
|
||||
IF EXISTS (
|
||||
SELECT 1
|
||||
FROM (
|
||||
SELECT LOWER(TRIM("email")) AS normalized_email
|
||||
FROM "users"
|
||||
GROUP BY LOWER(TRIM("email"))
|
||||
HAVING COUNT(*) > 1
|
||||
) duplicates
|
||||
) THEN
|
||||
RAISE EXCEPTION
|
||||
'Cannot normalize user emails: duplicate values would conflict after lowercasing/trimming';
|
||||
END IF;
|
||||
END $$;
|
||||
|
||||
UPDATE "users"
|
||||
SET "email" = LOWER(TRIM("email"))
|
||||
WHERE "email" <> LOWER(TRIM("email"));
|
||||
|
||||
ALTER TABLE "users"
|
||||
DROP CONSTRAINT IF EXISTS "users_email_key";
|
||||
|
||||
CREATE UNIQUE INDEX "users_email_key" ON "users"(LOWER("email"));
|
||||
|
||||
@@ -24,8 +24,8 @@ model User {
|
||||
/// User's email address
|
||||
email String @unique
|
||||
|
||||
/// User's preferred username from Keycloak
|
||||
username String?
|
||||
/// User's preferred app handle used for discovery
|
||||
username String @unique
|
||||
|
||||
/// URL to user's profile picture
|
||||
picture String?
|
||||
|
||||
Reference in New Issue
Block a user