-- ===================================================================== -- TeeCup — personlig profil på app_user + tverr-org spiller-oppslag -- (migrasjon 015) -- ===================================================================== -- ADR-031: personlig landingsside for enhver registrert bruker. Ett -- canonical profil-sett PER KONTO (ikke per org-scopet `player`-rad -- -- se ADR-031 for hvorfor de to bevisst holdes atskilt). Alt additivt/ -- nullable -- trygt mot eksisterende kontoer. -- ===================================================================== \set ON_ERROR_STOP on ALTER TABLE app_user ADD COLUMN first_name text; ALTER TABLE app_user ADD COLUMN last_name text; ALTER TABLE app_user ADD COLUMN birth_date date; ALTER TABLE app_user ADD COLUMN gender text CHECK (gender IN ('m', 'f', 'x')); ALTER TABLE app_user ADD COLUMN handicap_index numeric(4,1); ALTER TABLE app_user ADD COLUMN home_club text; ALTER TABLE app_user ADD COLUMN avatar_key text; -- Samme "smale SECURITY DEFINER-bro"-mønster som public_tournament_org() -- (007) / link_player_by_email() (008) / public_org_by_slug() (009) / -- public_tournament_by_code() (011): `player` er RLS-beskyttet per org, så -- et tverr-org-oppslag ("hvilke organisasjoner har jeg en spiller-rad i") -- kan ikke gjøres med en vanlig org-scopet tilkobling. Eksponerer KUN -- uuid-listen, ingenting annet fra player-raden. CREATE FUNCTION player_organizations_for_user(p_user_id uuid) RETURNS TABLE(organization_id uuid) LANGUAGE sql SECURITY DEFINER SET search_path = public STABLE AS $$ SELECT DISTINCT organization_id FROM player WHERE user_id = p_user_id; $$; GRANT EXECUTE ON FUNCTION player_organizations_for_user(uuid) TO teecup_app;