-- ============================================================================
-- RAPPORT — Personen-Load mit Sharing-Support
-- ============================================================================
-- Direkter `select * from persons where studio_id = $X` sieht nur lokale
-- Personen. Geteilte Personen haben studio_id = NULL und ihre Sichtbarkeit
-- kommt aus `person_studio_links`. Diese Funktion vereint beide Quellen.
--
-- Kein SECURITY DEFINER — RLS bleibt aktiv, der User sieht nur, was er sehen
-- darf. Die Funktion ist ein bequemer Query-Wrapper, kein Privilege-Escalator.
-- ============================================================================

create or replace function load_persons_for_studio(p_studio_id uuid)
  returns setof persons
  language sql
  stable
as $$
  select p.* from persons p
  where p.studio_id = p_studio_id
     or exists (
       select 1 from person_studio_links psl
       where psl.person_id = p.id
         and psl.studio_id = p_studio_id
     )
  order by p.name;
$$;

grant execute on function load_persons_for_studio(uuid) to authenticated;
