diff --git a/init-scripts/init-script.sql b/init-scripts/init-script.sql index db7586f..49f5c4b 100644 --- a/init-scripts/init-script.sql +++ b/init-scripts/init-script.sql @@ -88,7 +88,8 @@ CREATE TABLE users ( n_first_name VARCHAR(50) NOT NULL, -- vCard N.given n_last_name VARCHAR(50) NOT NULL, -- vCard N.family fn VARCHAR(120) GENERATED ALWAYS AS (n_first_name || ' ' || n_last_name) STORED, -- vCard FN - email VARCHAR(255) UNIQUE, -- vCard EMAIL (nullable for social-only/guest) + email VARCHAR(255), -- vCard EMAIL (nullable for social-only/guest) + -- Uniqueness enforced only for non-guest users via partial index phone VARCHAR(20) NOT NULL, -- vCard TEL date_of_birth DATE NOT NULL, -- vCard BDAY profile_pic_url TEXT, -- vCard PHOTO @@ -131,6 +132,10 @@ CREATE TABLE user_social_logins ( CREATE INDEX idx_users_email_lower ON users (LOWER(email)); CREATE INDEX idx_users_account_role ON users (account_role); +-- Enforce unique email only for registered (non-guest) users +-- Guest accounts can share emails; registered accounts cannot +CREATE UNIQUE INDEX idx_users_email_registered ON users (email) WHERE account_role != 'guest'; + -- ======================================= -- VERIFICATION CODES TABLE -- =======================================