import { useMutation } from '@tanstack/react-query' import type { ResearchRefreshResult } from '../domain/researchLead' import { RESEARCH_REFRESH_ENDPOINT } from '../lib/researchSources' import { useToastStore } from '../stores/toastStore' /** * «Research aktualisieren» — der eine Aufruf des PoC. * * Eine Mutation und keine Query: der Lauf ist eine Handlung des Nutzers, kein * Zustand, der sich von selbst aktualisiert. Deshalb auch bewusst kein * `staleTime` und keine Zwischenspeicherung — wer auf den Knopf drückt, will * den Stand von jetzt und nicht den von vorhin. * * Das Ergebnis lebt im Zustand der Komponente. Für den Machbarkeitsnachweis * ist keine Persistenz nötig (§17). */ export function useLiviaResearch() { const showToast = useToastStore(s => s.showToast) return useMutation({ mutationFn: async () => { const res = await fetch(RESEARCH_REFRESH_ENDPOINT, { method: 'POST' }) // Ohne laufende Serverfunktion liefert der Hoster die Anwendung selbst // zurück — dann steht hier HTML statt JSON. Das ist der häufigste Fall // in der lokalen Entwicklung und verdient eine klare Meldung statt eines // «Unexpected token <». const typ = res.headers.get('content-type') ?? '' if (!typ.includes('application/json')) { throw new Error( 'Der Recherche-Endpoint antwortet nicht. Lokal braucht es dafür «vercel dev» statt «vite».', ) } if (!res.ok) throw new Error(`Der Recherche-Lauf schlug fehl (HTTP ${res.status}).`) return await res.json() as ResearchRefreshResult }, onError: (err) => { showToast(err.message, 'error') }, }) }