owpengram-server/deploy/migrations/0069_privacy_and_profile_photo_kinds.up.sql
A 8ff3343ae0 business: add privacy-aware user projection
(cherry picked from commit a636192ef22ee69d792b0ca7db1c6be963be9cb2)
2026-06-14 00:19:59 +08:00

39 lines
1.4 KiB
SQL

-- 0069_privacy_and_profile_photo_kinds: account privacy rules, fallback photos,
-- and viewer-private contact profile photos.
CREATE TABLE IF NOT EXISTS account_privacy_rules (
owner_user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
privacy_key TEXT NOT NULL,
rules JSONB NOT NULL DEFAULT '[]'::jsonb,
updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
PRIMARY KEY (owner_user_id, privacy_key)
);
ALTER TABLE profile_photos
ADD COLUMN IF NOT EXISTS kind TEXT NOT NULL DEFAULT 'profile';
ALTER TABLE profile_photos
DROP CONSTRAINT IF EXISTS profile_photos_pkey;
ALTER TABLE profile_photos
ADD CONSTRAINT profile_photos_pkey PRIMARY KEY (owner_peer_type, owner_peer_id, kind, photo_id);
ALTER TABLE profile_photos
DROP CONSTRAINT IF EXISTS profile_photos_kind_check;
ALTER TABLE profile_photos
ADD CONSTRAINT profile_photos_kind_check CHECK (kind IN ('profile', 'fallback'));
DROP INDEX IF EXISTS profile_photos_current_idx;
CREATE INDEX IF NOT EXISTS profile_photos_current_idx
ON profile_photos (owner_peer_type, owner_peer_id, kind, sort_order DESC)
WHERE active;
ALTER TABLE contacts
ADD COLUMN IF NOT EXISTS personal_photo_id BIGINT NOT NULL DEFAULT 0,
ADD COLUMN IF NOT EXISTS personal_photo_date INT NOT NULL DEFAULT 0;
CREATE INDEX IF NOT EXISTS contacts_personal_photo_idx
ON contacts (user_id, contact_user_id)
WHERE personal_photo_id <> 0;