import { useQuery } from '@tanstack/react-query'; import api from '@/lib/api-client'; /** * Mirrors the BacklinksResult shape from the backend (R3.2). */ export interface PageSummary { id: string; title: string | null; slugId: string | null; icon: string | null; spaceSlug: string | null; spaceName: string | null; } export interface BacklinkEntry { source: PageSummary; linkType: 'wikilink' | 'mention' | 'database_embed'; contextExcerpt: string | null; } export interface BacklinksResult { wikilinks: BacklinkEntry[]; mentions: BacklinkEntry[]; database_embeds: BacklinkEntry[]; total: number; } async function fetchBacklinks(pageId: string): Promise { const res = await api.get( `/acadenice/pages/${pageId}/backlinks`, ); return res.data; } /** * React Query hook that fetches backlinks for a given page. * * Cache policy: * - staleTime: 30s — backlinks are eventually consistent (indexed async). * - gcTime: 5 min — keep in memory while navigating between pages. * * The hook is a no-op when pageId is empty/undefined. */ export function useBacklinks(pageId: string | undefined) { return useQuery({ queryKey: ['acadenice', 'backlinks', pageId], queryFn: () => fetchBacklinks(pageId!), enabled: !!pageId, staleTime: 30_000, gcTime: 5 * 60_000, }); }