···1+set check_function_bodies = off;
2+3+CREATE OR REPLACE FUNCTION public.pull_data(token_id uuid, client_group_id text)
4+ RETURNS pull_result
5+ LANGUAGE plpgsql
6+AS $function$DECLARE
7+ result pull_result;
8+BEGIN
9+ -- Get client group data as JSON array
10+ SELECT json_agg(row_to_json(rc))
11+ FROM replicache_clients rc
12+ WHERE rc.client_group = client_group_id
13+ INTO result.client_groups;
14+15+ -- Get facts as JSON array
16+ SELECT json_agg(row_to_json(f))
17+ FROM permission_tokens pt,
18+ get_facts(pt.root_entity) f
19+ WHERE pt.id = token_id
20+ INTO result.facts;
21+22+ -- Get publication data - try leaflets_in_publications first, then leaflets_to_documents
23+ SELECT json_agg(row_to_json(lip))
24+ FROM leaflets_in_publications lip
25+ WHERE lip.leaflet = token_id
26+ INTO result.publications;
27+28+ -- If no publication data found, try leaflets_to_documents (for standalone documents)
29+ IF result.publications IS NULL THEN
30+ SELECT json_agg(row_to_json(ltd))
31+ FROM leaflets_to_documents ltd
32+ WHERE ltd.leaflet = token_id
33+ INTO result.publications;
34+ END IF;
35+36+ RETURN result;
37+END;$function$
38+;