diff --git a/src/hooks/query/useStatusQuery.ts b/src/hooks/query/useStatusQuery.ts index f2787b45..6578cf3d 100644 --- a/src/hooks/query/useStatusQuery.ts +++ b/src/hooks/query/useStatusQuery.ts @@ -1,8 +1,9 @@ +import { queryClient } from '@hooks/query/queryClient'; import { useMemo } from 'react'; import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import useToast from '@hooks/useToast'; import { PROJECT_STATUS_COLORS } from '@constants/projectStatus'; -import { createStatus, getStatusList } from '@services/statusService'; +import { createStatus, getStatusList, updateStatus } from '@services/statusService'; import type { Project } from '@/types/ProjectType'; import type { ProjectStatus, ProjectStatusForm, UsableColor } from '@/types/ProjectStatusType'; @@ -108,3 +109,20 @@ export function useCreateStatus(projectId: Project['projectId']) { return mutation; } + +export function useUpdateStatus(projectId: Project['projectId'], statusId: ProjectStatus['statusId']) { + const { toastSuccess } = useToast(); + const queryClient = useQueryClient(); + + const mutation = useMutation({ + mutationFn: (formData: ProjectStatusForm) => updateStatus(projectId, statusId, formData), + onSuccess: () => { + toastSuccess('프로젝트 상태를 수정했습니다.'); + queryClient.invalidateQueries({ + queryKey: ['projects', projectId, 'statuses'], + }); + }, + }); + + return mutation; +} diff --git a/src/services/statusService.ts b/src/services/statusService.ts index 37049a84..ccb663a4 100644 --- a/src/services/statusService.ts +++ b/src/services/statusService.ts @@ -33,3 +33,23 @@ export async function createStatus( ) { return authAxios.post(`/project/${projectId}/status`, formData, axiosConfig); } + +/** + * 프로젝트 상태 수정 API + * + * @export + * @async + * @param {Project['projectId']} projectId - 프로젝트 ID + * @param {ProjectStatus['statusId']} statusId - 프로젝트 상태 ID + * @param {ProjectStatusForm} formData - 상태 정보 객체 + * @param {AxiosRequestConfig} [axiosConfig={}] - axios 요청 옵션 설정 객체 + * @returns {Promise>} + */ +export async function updateStatus( + projectId: Project['projectId'], + statusId: ProjectStatus['statusId'], + formData: ProjectStatusForm, + axiosConfig: AxiosRequestConfig = {}, +) { + return authAxios.patch(`/project/${projectId}/status/${statusId}`, formData, axiosConfig); +}