48 lines
1.7 KiB
SQL
48 lines
1.7 KiB
SQL
-- ExposedGays privacy: trait hide rules + block list (cloud sync)
|
|
|
|
ALTER TABLE profiles
|
|
ADD COLUMN IF NOT EXISTS height_in integer,
|
|
ADD COLUMN IF NOT EXISTS weight_lb integer,
|
|
ADD COLUMN IF NOT EXISTS body_type text;
|
|
|
|
CREATE TABLE IF NOT EXISTS hide_from_rules (
|
|
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
user_id uuid NOT NULL REFERENCES profiles(id) ON DELETE CASCADE,
|
|
label text NOT NULL DEFAULT '',
|
|
height_in integer,
|
|
height_tolerance_in integer DEFAULT 1,
|
|
weight_lb integer,
|
|
weight_tolerance_lb integer DEFAULT 10,
|
|
age_min integer,
|
|
age_max integer,
|
|
positions text[] DEFAULT '{}',
|
|
body_types text[] DEFAULT '{}',
|
|
kinks text[] DEFAULT '{}',
|
|
communities text[] DEFAULT '{}',
|
|
created_at timestamptz NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_hide_from_rules_user ON hide_from_rules(user_id);
|
|
|
|
CREATE TABLE IF NOT EXISTS user_blocks (
|
|
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
blocker_id uuid NOT NULL REFERENCES profiles(id) ON DELETE CASCADE,
|
|
blocked_id uuid NOT NULL REFERENCES profiles(id) ON DELETE CASCADE,
|
|
blocked_username text,
|
|
blocked_display_name text,
|
|
blocked_avatar_url text,
|
|
created_at timestamptz NOT NULL DEFAULT now(),
|
|
UNIQUE (blocker_id, blocked_id)
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_user_blocks_blocker ON user_blocks(blocker_id);
|
|
CREATE INDEX IF NOT EXISTS idx_user_blocks_blocked ON user_blocks(blocked_id);
|
|
|
|
ALTER TABLE hide_from_rules ENABLE ROW LEVEL SECURITY;
|
|
ALTER TABLE user_blocks ENABLE ROW LEVEL SECURITY;
|
|
|
|
CREATE POLICY hide_from_rules_own ON hide_from_rules
|
|
FOR ALL USING (auth.uid() = user_id);
|
|
|
|
CREATE POLICY user_blocks_own ON user_blocks
|
|
FOR ALL USING (auth.uid() = blocker_id); |