···11+CREATE OR REPLACE FUNCTION public.get_leaflet_page_data(p_token_id uuid)
22+RETURNS TABLE (
33+ permission_token json,
44+ permission_token_rights json,
55+ leaflets_in_publications json,
66+ leaflets_to_documents json,
77+ custom_domain_routes json,
88+ facts json
99+)
1010+LANGUAGE sql STABLE
1111+AS $$
1212+WITH token AS (
1313+ SELECT pt.*
1414+ FROM permission_tokens pt
1515+ WHERE pt.id = p_token_id
1616+),
1717+token_rights AS (
1818+ SELECT json_agg(row_to_json(ptr)) AS rights, array_agg(ptr.entity_set) AS entity_sets
1919+ FROM permission_token_rights ptr
2020+ WHERE ptr.token = p_token_id
2121+),
2222+related_tokens AS (
2323+ SELECT array_agg(pt2.id) AS ids
2424+ FROM permission_token_rights ptr2
2525+ JOIN permission_tokens pt2 ON pt2.id = ptr2.token
2626+ WHERE ptr2.entity_set IN (SELECT unnest(entity_sets) FROM token_rights)
2727+ AND pt2.id != p_token_id
2828+),
2929+lip_direct AS (
3030+ SELECT json_agg(row_to_json(sub)) AS data
3131+ FROM (
3232+ SELECT lip.*,
3333+ row_to_json(pub) AS publications,
3434+ row_to_json(d) AS documents
3535+ FROM leaflets_in_publications lip
3636+ LEFT JOIN publications pub ON pub.uri = lip.publication
3737+ LEFT JOIN documents d ON d.uri = lip.doc
3838+ WHERE lip.leaflet = p_token_id
3939+ ) sub
4040+),
4141+lip_fallback AS (
4242+ SELECT json_agg(row_to_json(sub)) AS data
4343+ FROM (
4444+ SELECT lip.*,
4545+ row_to_json(pub) AS publications,
4646+ row_to_json(d) AS documents
4747+ FROM leaflets_in_publications lip
4848+ LEFT JOIN publications pub ON pub.uri = lip.publication
4949+ LEFT JOIN documents d ON d.uri = lip.doc
5050+ WHERE lip.leaflet IN (SELECT unnest(ids) FROM related_tokens)
5151+ ) sub
5252+),
5353+ltd_direct AS (
5454+ SELECT json_agg(row_to_json(sub)) AS data
5555+ FROM (
5656+ SELECT ltd.*,
5757+ row_to_json(doc) AS documents
5858+ FROM leaflets_to_documents ltd
5959+ LEFT JOIN documents doc ON doc.uri = ltd.document
6060+ WHERE ltd.leaflet = p_token_id
6161+ ) sub
6262+),
6363+ltd_fallback AS (
6464+ SELECT json_agg(row_to_json(sub)) AS data
6565+ FROM (
6666+ SELECT ltd.*,
6767+ row_to_json(doc) AS documents
6868+ FROM leaflets_to_documents ltd
6969+ LEFT JOIN documents doc ON doc.uri = ltd.document
7070+ WHERE ltd.leaflet IN (SELECT unnest(ids) FROM related_tokens)
7171+ ) sub
7272+),
7373+cdr AS (
7474+ SELECT json_agg(row_to_json(c)) AS data
7575+ FROM custom_domain_routes c
7676+ WHERE c.edit_permission_token = p_token_id
7777+),
7878+facts AS (
7979+ SELECT json_agg(row_to_json(f)) AS data
8080+ FROM get_facts((SELECT root_entity FROM token)) f
8181+)
8282+SELECT
8383+ row_to_json(token) AS permission_token,
8484+ (SELECT rights FROM token_rights) AS permission_token_rights,
8585+ COALESCE((SELECT data FROM lip_direct), (SELECT data FROM lip_fallback)) AS leaflets_in_publications,
8686+ COALESCE((SELECT data FROM ltd_direct), (SELECT data FROM ltd_fallback)) AS leaflets_to_documents,
8787+ (SELECT data FROM cdr) AS custom_domain_routes,
8888+ (SELECT data FROM facts) AS facts
8989+FROM token;
9090+$$;
9191+9292+-- Indexes for get_leaflet_page_data query patterns
9393+CREATE INDEX IF NOT EXISTS leaflets_in_publications_leaflet_idx
9494+ ON public.leaflets_in_publications(leaflet);
9595+9696+CREATE INDEX IF NOT EXISTS permission_token_rights_entity_set_idx
9797+ ON public.permission_token_rights(entity_set);
9898+9999+CREATE INDEX IF NOT EXISTS custom_domain_routes_edit_permission_token_idx
100100+ ON public.custom_domain_routes(edit_permission_token);