import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { MessagePlugin } from 'tdesign-react'; import type { CreateProviderInput, UpdateProviderInput, ApiError } from '@/types'; import * as api from '@/api/providers'; const ERROR_MESSAGES: Record = { duplicate_model: '同一供应商下模型名称已存在', invalid_provider_id: '供应商 ID 仅允许字母、数字、下划线,长度 1-64', immutable_field: '供应商 ID 不允许修改', provider_not_found: '供应商不存在', }; function getErrorMessage(error: ApiError): string { return error.code ? ERROR_MESSAGES[error.code] || error.message : error.message; } export const providerKeys = { all: ['providers'] as const, }; export function useProviders() { return useQuery({ queryKey: providerKeys.all, queryFn: api.listProviders, }); } export function useCreateProvider() { const queryClient = useQueryClient(); return useMutation({ mutationFn: (input: CreateProviderInput) => api.createProvider(input), onSuccess: () => { queryClient.invalidateQueries({ queryKey: providerKeys.all }); MessagePlugin.success('供应商创建成功'); }, onError: (error: ApiError) => { MessagePlugin.error(getErrorMessage(error)); }, }); } export function useUpdateProvider() { const queryClient = useQueryClient(); return useMutation({ mutationFn: ({ id, input }: { id: string; input: UpdateProviderInput }) => api.updateProvider(id, input), onSuccess: () => { queryClient.invalidateQueries({ queryKey: providerKeys.all }); MessagePlugin.success('供应商更新成功'); }, onError: (error: ApiError) => { MessagePlugin.error(getErrorMessage(error)); }, }); } export function useDeleteProvider() { const queryClient = useQueryClient(); return useMutation({ mutationFn: (id: string) => api.deleteProvider(id), onSuccess: () => { queryClient.invalidateQueries({ queryKey: providerKeys.all }); MessagePlugin.success('供应商删除成功'); }, onError: (error: Error) => { MessagePlugin.error(error.message); }, }); }