-- Account auth + report peer for birthday bootstrap bundles ALTER TABLE users ADD COLUMN IF NOT EXISTS phone varchar(20) NULL; ALTER TABLE users ADD COLUMN IF NOT EXISTS password_hash text NULL; ALTER TABLE users ADD COLUMN IF NOT EXISTS nickname varchar(64) NULL; CREATE UNIQUE INDEX IF NOT EXISTS idx_users_phone_unique ON users(phone) WHERE phone IS NOT NULL AND deleted_at IS NULL; CREATE TABLE IF NOT EXISTS user_sessions ( id uuid PRIMARY KEY DEFAULT gen_random_uuid(), user_id uuid NOT NULL REFERENCES users(id), token varchar(128) NOT NULL UNIQUE, expires_at timestamptz NOT NULL, created_at timestamptz NOT NULL DEFAULT now(), revoked_at timestamptz NULL ); CREATE INDEX IF NOT EXISTS idx_user_sessions_user_id ON user_sessions(user_id); CREATE INDEX IF NOT EXISTS idx_user_sessions_token ON user_sessions(token) WHERE revoked_at IS NULL; ALTER TABLE growth_reports ADD COLUMN IF NOT EXISTS peer_profile_id uuid NULL REFERENCES profiles(id); CREATE INDEX IF NOT EXISTS idx_growth_reports_latest_solo ON growth_reports(user_id, profile_id, type, created_at DESC) WHERE deleted_at IS NULL AND peer_profile_id IS NULL; CREATE INDEX IF NOT EXISTS idx_growth_reports_latest_pair ON growth_reports(user_id, profile_id, type, peer_profile_id, created_at DESC) WHERE deleted_at IS NULL AND peer_profile_id IS NOT NULL;