import { useMutation } from '@tanstack/react-query' import { toast } from 'sonner' import { constructHeaders, fetchHandler } from '@/data/fetchers' import { BASE_PATH } from '@/lib/constants' import { ResponseError, UseCustomMutationOptions } from '@/types' export type SqlTitleGenerateResponse = { title: string description: string } export type SqlTitleGenerateVariables = { sql: string } export async function generateSqlTitle({ sql }: SqlTitleGenerateVariables) { const url = `${BASE_PATH}/api/ai/sql/title-v2` const headers = await constructHeaders({ 'Content-Type': 'application/json' }) const response = await fetchHandler(url, { headers, method: 'POST', body: JSON.stringify({ sql, }), }) let body: any try { body = await response.json() } catch {} if (!response.ok) { throw new ResponseError(body?.message, response.status) } return body as SqlTitleGenerateResponse } type SqlTitleGenerateData = Awaited> export const useSqlTitleGenerateMutation = ({ onSuccess, onError, ...options }: Omit< UseCustomMutationOptions, 'mutationFn' > = {}) => { return useMutation({ mutationFn: (vars) => generateSqlTitle(vars), async onSuccess(data, variables, context) { await onSuccess?.(data, variables, context) }, async onError(data, variables, context) { if (onError === undefined) { toast.error(`Failed to generate title: ${data.message}`) } else { onError(data, variables, context) } }, ...options, }) }