-- ===================================================================== -- TeeCup — rundevisibilitet for frittstående runder (migrasjon 032, -- ADR-036 fase 2) -- ===================================================================== -- round.visibility_mode ('public'/'private'/'friends', default 'private' -- -- trygg standard, samme filosofi som RLS-policyenes "se ingenting" ved -- manglende kontekst). Ved 'friends' velges EKSPLISITT hvilke av eierens -- private kategorier (samme faste sett som friend_categorization, -- migrasjon 025) som får se runden -- ikke "alle venner". -- -- Styrer KUN tredjeparts innsyn (venner/offentligheten) -- en faktisk -- lagt-til medspiller (round_participant.user_id) ser alltid runden -- uansett visibility_mode, uendret av denne migrasjonen. -- -- Ingen RLS, samme `plain_connection()`-mønster som resten av -- runde-/venne-tabellene (ADR-033 Beslutning A) -- autorisasjon -- håndheves i app-laget. -- ===================================================================== \set ON_ERROR_STOP on ALTER TABLE round ADD COLUMN visibility_mode text NOT NULL DEFAULT 'private' CHECK (visibility_mode IN ('public', 'private', 'friends')); CREATE TABLE round_visible_category ( round_id uuid NOT NULL REFERENCES round(id) ON DELETE CASCADE, -- Samme faste kategori-sett som friend_categorization (migrasjon 025) -- -- bevisst duplisert CHECK fremfor en delt ENUM-type, samme -- pragmatiske mønster som resten av skjemaet (BAG_CLUBS/gender/ -- stat_level m.fl. er alle CHECK-baserte, ikke ENUM). category text NOT NULL CHECK (category IN ( 'spouse', 'close_family', 'extended_family', 'close_friends', 'golf_friends', 'colleagues', 'business', 'classmates', 'acquaintances', 'other' )), PRIMARY KEY (round_id, category) ); GRANT SELECT, INSERT, UPDATE, DELETE ON round_visible_category TO teecup_app;