o2o-negosium-original/frontend/src/apis/negotiation/negotiation.mutations.ts

47 lines
1.6 KiB
TypeScript

// 협상 도메인의 변경(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() })
},
})
}