teecup/032_round_visibility.sql

40 lines
1.9 KiB
MySQL
Raw Permalink Normal View History

-- =====================================================================
-- 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;