// 협상 도메인의 변경(useMutation) 훅. import { useMutation, useQueryClient } from '@tanstack/react-query' import { negotiationApi } from './negotiation.api' import { negotiationKeys } from './negotiation.keys' import type { ExtraInfoRequest, RejectRequest } from './negotiation.type' /** * 협상 세션 참여: 성공 시 세션 목록 캐시를 무효화해 상태를 갱신한다. */ export function useParticipateMutation() { const queryClient = useQueryClient() return useMutation({ mutationFn: (sessionId: string) => negotiationApi.participate(sessionId), onSuccess: () => { queryClient.invalidateQueries({ queryKey: negotiationKeys.sessions() }) }, }) } /** * 협상 세션 거부: 성공 시 세션 목록 캐시를 무효화한다. */ export function useRejectMutation() { const queryClient = useQueryClient() return useMutation({ mutationFn: ({ sessionId, request }: { sessionId: string; request: RejectRequest }) => negotiationApi.reject(sessionId, request), onSuccess: () => { queryClient.invalidateQueries({ queryKey: negotiationKeys.sessions() }) }, }) } /** * 협상완료 부가정보 저장: 성공 시 세션 목록 캐시를 무효화한다. */ export function useSaveExtraInfoMutation() { const queryClient = useQueryClient() return useMutation({ mutationFn: ({ sessionId, request }: { sessionId: string; request: ExtraInfoRequest }) => negotiationApi.saveExtraInfo(sessionId, request), onSuccess: () => { queryClient.invalidateQueries({ queryKey: negotiationKeys.sessions() }) }, }) }