import { createQueryOptions } from '@/api-client/query-config'; import { rpcClient } from '@/api-client/utils/rpc-client'; import type { SummaryRequest, SummaryResponse } from '@/schema/gradio-proxy/summary'; import type { FetchQueryOptions } from '@tanstack/react-query'; import { useQueryClient } from '@tanstack/react-query'; import { useCallback } from 'react'; /** * summary APIを呼び出すカスタムフック * @returns キャッシュ対応のAPI呼び出し関数(タイムアウト20分、キャッシュ24時間) */ export function useSummary() { const queryClient = useQueryClient(); return useCallback( async (request: SummaryRequest): Promise => { console.log('[useSummary] API呼び出し開始:', { hasCommonDict: !!request.commonDict, hasScoreDict: !!request.scoreDict, hasScoreTotal: !!request.score_total, dummyMode: request.dummyMode, }); return queryClient.fetchQuery( createQueryOptions({ queryKey: ['summary', request], queryFn: async (): Promise => { try { const response = await rpcClient['gradio-proxy']['summary'].$post({ json: request, }); if (!response.ok) { console.error('[useSummary] Response status:', response.status); const errorData = (await response.json()) as { message?: string; status?: string }; console.error('[useSummary] API エラー:', errorData); throw new Error(errorData.message || 'summary APIの呼び出しに失敗しました'); } const data = await response.json(); console.log('[useSummary] API呼び出し成功'); return data as SummaryResponse; } catch (error) { console.error('[useSummary] API呼び出しエラー:', error); throw error; } }, }) as FetchQueryOptions, ); }, [queryClient], ); }