From f88331be16782bdea2998d9236ac5435ff5845ed Mon Sep 17 00:00:00 2001 From: ejinn1 Date: Thu, 1 May 2025 16:00:50 +0900 Subject: [PATCH 1/6] =?UTF-8?q?Refactor:=20api=20=EA=B3=B5=ED=86=B5=20?= =?UTF-8?q?=ED=95=A8=EC=88=98=20=ED=86=B5=ED=95=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apis/services/httpMethod.ts | 58 ++++++++++++++++++--------------- src/utils/handleHttpError.ts | 25 ++++++++++++++ 2 files changed, 56 insertions(+), 27 deletions(-) create mode 100644 src/utils/handleHttpError.ts diff --git a/src/apis/services/httpMethod.ts b/src/apis/services/httpMethod.ts index 26de688..06e737f 100644 --- a/src/apis/services/httpMethod.ts +++ b/src/apis/services/httpMethod.ts @@ -1,40 +1,44 @@ import axiosInstance, { setAuthToken } from '@/lib/axiosInstance'; +import { handleHttpError } from '@/utils/handleHttpError'; -export async function GET(url: string, token?: string): Promise { +type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE'; + +interface RequestOptionsProps { + method: HttpMethod; + url: string; + data?: unknown; + token?: string; +} + +async function request({ + method, + url, + data, + token, +}: RequestOptionsProps): Promise { try { if (token) { setAuthToken(token); } - const response = await axiosInstance.get(url); - return response.data; - } catch (error) { - throw new Error(error instanceof Error ? error.message : String(error)); - } -} -export async function POST(url: string, data?: U): Promise { - try { - const response = await axiosInstance.post(url, data); - return response.data; - } catch (error) { - throw new Error(error instanceof Error ? error.message : String(error)); - } -} + const response = await axiosInstance.request({ + method, + url, + data, + }); -export async function PUT(url: string, data: U): Promise { - try { - const response = await axiosInstance.put(url, data); return response.data; } catch (error) { - throw new Error(error instanceof Error ? error.message : String(error)); + handleHttpError(error); + throw error; } } -export async function DELETE(url: string): Promise { - try { - const response = await axiosInstance.delete(url); - return response.data; - } catch (error) { - throw new Error(error instanceof Error ? error.message : String(error)); - } -} +export const API = { + get: (url: string, token?: string) => + request({ method: 'GET', url, token }), + post: (url: string, data?: U) => + request({ method: 'POST', url, data }), + put: (url: string, data: U) => request({ method: 'PUT', url, data }), + delete: (url: string) => request({ method: 'DELETE', url }), +}; diff --git a/src/utils/handleHttpError.ts b/src/utils/handleHttpError.ts new file mode 100644 index 0000000..907f939 --- /dev/null +++ b/src/utils/handleHttpError.ts @@ -0,0 +1,25 @@ +import { AxiosError } from 'axios'; + +import { notify } from '@/store/useToastStore'; + +export function handleHttpError(error: unknown) { + if (!(error instanceof AxiosError)) { + notify('error', '에러가 발생했습니다.', 3000); + return; + } + + const status = error.response?.status; + const message = error.response?.data?.message || ''; + + switch (status) { + case 401: + notify('info', '로그아웃 되었습니다.', 3000); + break; + case 500: + notify('error', '서버에서 오류가 발생하였습니다.', 3000); + break; + default: + notify('error', message, 3000); + break; + } +} From 493edf5c975fca3927836ed5426627a6e5af8830 Mon Sep 17 00:00:00 2001 From: ejinn1 Date: Thu, 1 May 2025 16:01:18 +0900 Subject: [PATCH 2/6] =?UTF-8?q?Refactor:=20useQuery=EC=9D=98=20=EA=B3=B5?= =?UTF-8?q?=ED=86=B5=20=EC=97=90=EB=9F=AC=20=EC=B2=98=EB=A6=AC=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lib/query/getQueryClient.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/lib/query/getQueryClient.ts b/src/lib/query/getQueryClient.ts index cb10c41..52da176 100644 --- a/src/lib/query/getQueryClient.ts +++ b/src/lib/query/getQueryClient.ts @@ -1,9 +1,12 @@ import { defaultShouldDehydrateQuery, isServer, + QueryCache, QueryClient, } from '@tanstack/react-query'; +import { handleHttpError } from '@/utils/handleHttpError'; + const DEFAULT_STALE_TIME = 60 * 1000; function makeQueryClient() { @@ -21,6 +24,11 @@ function makeQueryClient() { query.state.status === 'pending', }, }, + queryCache: new QueryCache({ + onError: (error: unknown) => { + handleHttpError(error); + }, + }), }); } From 0ca73d3201c1b704042c55ee1b41bc4c94ebe39b Mon Sep 17 00:00:00 2001 From: ejinn1 Date: Thu, 1 May 2025 16:05:50 +0900 Subject: [PATCH 3/6] =?UTF-8?q?Refactor:=20API.get=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/apis/Auth/useFollowCountQuery.ts | 7 ++++--- src/hooks/apis/Auth/useUserProfileQuery.ts | 5 +++-- src/hooks/apis/Complete/useGetCompleteDetailQuery.ts | 4 ++-- src/hooks/apis/Dashboard/useRecentTodosQuery.ts | 4 ++-- src/hooks/apis/Dashboard/useTodayProgressQuery.ts | 7 +++++-- src/hooks/apis/Dashboard/useTodosOfGoalsQuery.ts | 4 ++-- src/hooks/apis/Follows/useGetFollowPostsQuery.ts | 4 ++-- src/hooks/apis/Goals/useGoalsDetailQuery.ts | 4 ++-- src/hooks/apis/Todo/useTodayTodo.ts | 5 +++-- src/hooks/apis/Todo/useTodoDetailQuery.ts | 5 +++-- src/hooks/apis/useGoalsQuery.ts | 4 ++-- src/hooks/apis/useUserQuery.ts | 4 ++-- 12 files changed, 32 insertions(+), 25 deletions(-) diff --git a/src/hooks/apis/Auth/useFollowCountQuery.ts b/src/hooks/apis/Auth/useFollowCountQuery.ts index ea7e0b3..8315fcb 100644 --- a/src/hooks/apis/Auth/useFollowCountQuery.ts +++ b/src/hooks/apis/Auth/useFollowCountQuery.ts @@ -1,6 +1,7 @@ -import { AxiosError } from 'axios'; import { useQuery, UseQueryOptions } from '@tanstack/react-query'; -import { GET } from '@/apis/services/httpMethod'; +import { AxiosError } from 'axios'; + +import { API } from '@/apis/services/httpMethod'; import { API_ENDPOINTS } from '@/constants/ApiEndpoints'; import { QUERY_KEYS } from '@/constants/QueryKeys'; @@ -17,7 +18,7 @@ export interface FollowCountResponse { const followCountOptions: UseQueryOptions = { queryKey: [QUERY_KEYS.FOLLOW_COUNT], - queryFn: () => GET(API_ENDPOINTS.AUTH.FOLLOW_COUNT), + queryFn: () => API.get(API_ENDPOINTS.AUTH.FOLLOW_COUNT), }; export const useFollowCountQuery = () => { diff --git a/src/hooks/apis/Auth/useUserProfileQuery.ts b/src/hooks/apis/Auth/useUserProfileQuery.ts index bbd1ea3..fd9d6b2 100644 --- a/src/hooks/apis/Auth/useUserProfileQuery.ts +++ b/src/hooks/apis/Auth/useUserProfileQuery.ts @@ -1,6 +1,7 @@ import { useQuery, UseQueryOptions } from '@tanstack/react-query'; import { AxiosError } from 'axios'; -import { GET } from '@/apis/services/httpMethod'; + +import { API } from '@/apis/services/httpMethod'; import { API_ENDPOINTS } from '@/constants/ApiEndpoints'; import { QUERY_KEYS } from '@/constants/QueryKeys'; import { UserProfileResponse } from '@/types/response'; @@ -10,7 +11,7 @@ const userProfileOptions = ( ): UseQueryOptions => ({ queryKey: [QUERY_KEYS.USER_PROFILE, userId], queryFn: () => - GET(API_ENDPOINTS.AUTH.USER_PROFILE(userId)), + API.get(API_ENDPOINTS.AUTH.USER_PROFILE(userId)), }); export const useUserProfileQuery = (userId: number) => { diff --git a/src/hooks/apis/Complete/useGetCompleteDetailQuery.ts b/src/hooks/apis/Complete/useGetCompleteDetailQuery.ts index 3c037c6..ed88809 100644 --- a/src/hooks/apis/Complete/useGetCompleteDetailQuery.ts +++ b/src/hooks/apis/Complete/useGetCompleteDetailQuery.ts @@ -1,7 +1,7 @@ import { useQuery, UseQueryOptions } from '@tanstack/react-query'; import { AxiosError } from 'axios'; -import { GET } from '@/apis/services/httpMethod'; +import { API } from '@/apis/services/httpMethod'; import { API_ENDPOINTS } from '@/constants/ApiEndpoints'; import { QUERY_KEYS } from '@/constants/QueryKeys'; import { GetCompleteDetailResponse } from '@/types/Completes'; @@ -11,7 +11,7 @@ const GetCompleteDetailOptions = ( ): UseQueryOptions => ({ queryKey: [QUERY_KEYS.COMPLETE_DETAIL, completeId], queryFn: () => - GET( + API.get( API_ENDPOINTS.TODOS.GET_CERTIFIED_TODO(completeId), ), }); diff --git a/src/hooks/apis/Dashboard/useRecentTodosQuery.ts b/src/hooks/apis/Dashboard/useRecentTodosQuery.ts index e294e63..8f22257 100644 --- a/src/hooks/apis/Dashboard/useRecentTodosQuery.ts +++ b/src/hooks/apis/Dashboard/useRecentTodosQuery.ts @@ -4,7 +4,7 @@ import { } from '@tanstack/react-query'; import { AxiosError } from 'axios'; -import { GET } from '@/apis/services/httpMethod'; +import { API } from '@/apis/services/httpMethod'; import { API_ENDPOINTS } from '@/constants/ApiEndpoints'; import { QUERY_KEYS } from '@/constants/QueryKeys'; import { RecentTodosResponse } from '@/types/Dashboard'; @@ -14,7 +14,7 @@ export const recentTodosOptions = ( ): UseSuspenseQueryOptions => ({ queryKey: [QUERY_KEYS.RECENT_TODOS], queryFn: () => - GET( + API.get( `${API_ENDPOINTS.TODOS.GET_ALL}?lastTodoId=0&size=3`, token, ), diff --git a/src/hooks/apis/Dashboard/useTodayProgressQuery.ts b/src/hooks/apis/Dashboard/useTodayProgressQuery.ts index a53d38b..cce10b0 100644 --- a/src/hooks/apis/Dashboard/useTodayProgressQuery.ts +++ b/src/hooks/apis/Dashboard/useTodayProgressQuery.ts @@ -1,7 +1,7 @@ import { useQuery, UseQueryOptions } from '@tanstack/react-query'; import { AxiosError } from 'axios'; -import { GET } from '@/apis/services/httpMethod'; +import { API } from '@/apis/services/httpMethod'; import { API_ENDPOINTS } from '@/constants/ApiEndpoints'; import { QUERY_KEYS } from '@/constants/QueryKeys'; import { TodayProgressResponse } from '@/types/Dashboard'; @@ -11,7 +11,10 @@ export const todayProgressOptions = ( ): UseQueryOptions => ({ queryKey: [QUERY_KEYS.TODAY_PROGRESS], queryFn: () => - GET(API_ENDPOINTS.TODOS.GET_TODAY_PROGRESS, token), + API.get( + API_ENDPOINTS.TODOS.GET_TODAY_PROGRESS, + token, + ), }); export const useTodayProgressQuery = () => { diff --git a/src/hooks/apis/Dashboard/useTodosOfGoalsQuery.ts b/src/hooks/apis/Dashboard/useTodosOfGoalsQuery.ts index 3f638b0..1b60cdf 100644 --- a/src/hooks/apis/Dashboard/useTodosOfGoalsQuery.ts +++ b/src/hooks/apis/Dashboard/useTodosOfGoalsQuery.ts @@ -4,7 +4,7 @@ import { } from '@tanstack/react-query'; import { AxiosError } from 'axios'; -import { GET } from '@/apis/services/httpMethod'; +import { API } from '@/apis/services/httpMethod'; import { API_ENDPOINTS } from '@/constants/ApiEndpoints'; import { QUERY_KEYS } from '@/constants/QueryKeys'; import { TodosOfGoalsResponse } from '@/types/Dashboard'; @@ -17,7 +17,7 @@ export const todosOfGoalsOptions = (): UseInfiniteQueryOptions< > => ({ queryKey: [QUERY_KEYS.TODOS_OF_GOALS], queryFn: ({ pageParam = 0 }) => - GET( + API.get( `${API_ENDPOINTS.TODOS.GET_GOALS}?lastGoalId=${pageParam}&size=5`, ), getNextPageParam: (lastPage) => { diff --git a/src/hooks/apis/Follows/useGetFollowPostsQuery.ts b/src/hooks/apis/Follows/useGetFollowPostsQuery.ts index f1cdd02..270629c 100644 --- a/src/hooks/apis/Follows/useGetFollowPostsQuery.ts +++ b/src/hooks/apis/Follows/useGetFollowPostsQuery.ts @@ -4,7 +4,7 @@ import { } from '@tanstack/react-query'; import { AxiosError } from 'axios'; -import { GET } from '@/apis/services/httpMethod'; +import { API } from '@/apis/services/httpMethod'; import { API_ENDPOINTS } from '@/constants/ApiEndpoints'; import { QUERY_KEYS } from '@/constants/QueryKeys'; import { GetFollowsResponse } from '@/types/Follows'; @@ -17,7 +17,7 @@ export const getFollowPostsOptions = (): UseInfiniteQueryOptions< > => ({ queryKey: [QUERY_KEYS.FOLLOWS], queryFn: ({ pageParam = 0 }) => - GET( + API.get( `${API_ENDPOINTS.FOLLOW.GET}?lastCompleteId=${pageParam}&size=6`, ), getNextPageParam: (lastPage) => { diff --git a/src/hooks/apis/Goals/useGoalsDetailQuery.ts b/src/hooks/apis/Goals/useGoalsDetailQuery.ts index 96683f5..b12c39d 100644 --- a/src/hooks/apis/Goals/useGoalsDetailQuery.ts +++ b/src/hooks/apis/Goals/useGoalsDetailQuery.ts @@ -4,7 +4,7 @@ import { } from '@tanstack/react-query'; import { AxiosError } from 'axios'; -import { GET } from '@/apis/services/httpMethod'; +import { API } from '@/apis/services/httpMethod'; import { API_ENDPOINTS } from '@/constants/ApiEndpoints'; import { QUERY_KEYS } from '@/constants/QueryKeys'; import { GoalsDetailResponse } from '@/types/Goals'; @@ -17,7 +17,7 @@ const GoalsDetailOptions = (): UseInfiniteQueryOptions< > => ({ queryKey: [QUERY_KEYS.ALL_GOALS], queryFn: ({ pageParam = 0 }) => - GET( + API.get( `${API_ENDPOINTS.GOAL.ALL_GOALS}?lastGoalId=${pageParam}&size=5`, ), getNextPageParam: (lastPage) => { diff --git a/src/hooks/apis/Todo/useTodayTodo.ts b/src/hooks/apis/Todo/useTodayTodo.ts index 5dfb260..fa52275 100644 --- a/src/hooks/apis/Todo/useTodayTodo.ts +++ b/src/hooks/apis/Todo/useTodayTodo.ts @@ -1,7 +1,7 @@ import { useQuery, UseQueryOptions } from '@tanstack/react-query'; import { AxiosError } from 'axios'; -import { GET } from '@/apis/services/httpMethod'; +import { API } from '@/apis/services/httpMethod'; import { API_ENDPOINTS } from '@/constants/ApiEndpoints'; import { QUERY_KEYS } from '@/constants/QueryKeys'; import { BaseResponse } from '@/types/response'; @@ -33,7 +33,8 @@ export const todayTodoOptions = (): UseQueryOptions< AxiosError > => ({ queryKey: [QUERY_KEYS.TODAY_TODO], - queryFn: () => GET(API_ENDPOINTS.TODOS.GET_TODAY_TODOS), + queryFn: () => + API.get(API_ENDPOINTS.TODOS.GET_TODAY_TODOS), }); export const useTodayTodoQuery = () => { diff --git a/src/hooks/apis/Todo/useTodoDetailQuery.ts b/src/hooks/apis/Todo/useTodoDetailQuery.ts index a527777..e40948f 100644 --- a/src/hooks/apis/Todo/useTodoDetailQuery.ts +++ b/src/hooks/apis/Todo/useTodoDetailQuery.ts @@ -1,6 +1,7 @@ import { useQuery, UseQueryOptions } from '@tanstack/react-query'; import { AxiosError } from 'axios'; -import { GET } from '@/apis/services/httpMethod'; + +import { API } from '@/apis/services/httpMethod'; import { API_ENDPOINTS } from '@/constants/ApiEndpoints'; import { QUERY_KEYS } from '@/constants/QueryKeys'; import { TodoDetailResponse } from '@/types/response'; @@ -10,7 +11,7 @@ const todoDetailOptions = ( ): UseQueryOptions => ({ queryKey: [QUERY_KEYS.TODOS_DETAIL, todoId], queryFn: () => - GET(API_ENDPOINTS.TODOS.GET_DETAIL(todoId)), + API.get(API_ENDPOINTS.TODOS.GET_DETAIL(todoId)), }); export const useTodoDetailQuery = (todoId: number) => { diff --git a/src/hooks/apis/useGoalsQuery.ts b/src/hooks/apis/useGoalsQuery.ts index b149024..a8f55ae 100644 --- a/src/hooks/apis/useGoalsQuery.ts +++ b/src/hooks/apis/useGoalsQuery.ts @@ -4,7 +4,7 @@ import { } from '@tanstack/react-query'; import { AxiosError } from 'axios'; -import { GET } from '@/apis/services/httpMethod'; +import { API } from '@/apis/services/httpMethod'; import { API_ENDPOINTS } from '@/constants/ApiEndpoints'; import { QUERY_KEYS } from '@/constants/QueryKeys'; import { GoalsResponse } from '@/types/Goals'; @@ -13,7 +13,7 @@ export const goalsOptions = ( token?: string, ): UseSuspenseQueryOptions => ({ queryKey: [QUERY_KEYS.GOALS], - queryFn: () => GET(API_ENDPOINTS.GOAL.GOALS, token), + queryFn: () => API.get(API_ENDPOINTS.GOAL.GOALS, token), }); export const useGoalsQuery = () => { diff --git a/src/hooks/apis/useUserQuery.ts b/src/hooks/apis/useUserQuery.ts index cbc1e36..45e0450 100644 --- a/src/hooks/apis/useUserQuery.ts +++ b/src/hooks/apis/useUserQuery.ts @@ -1,7 +1,7 @@ import { useQuery, UseQueryOptions } from '@tanstack/react-query'; import { AxiosError } from 'axios'; -import { GET } from '@/apis/services/httpMethod'; +import { API } from '@/apis/services/httpMethod'; import { API_ENDPOINTS } from '@/constants/ApiEndpoints'; import { QUERY_KEYS } from '@/constants/QueryKeys'; import { BaseResponse } from '@/types/response'; @@ -18,7 +18,7 @@ interface UserInfoResponse extends BaseResponse { const userInfoOptions: UseQueryOptions = { queryKey: [QUERY_KEYS.USER_INFO], - queryFn: () => GET(API_ENDPOINTS.AUTH.USER), + queryFn: () => API.get(API_ENDPOINTS.AUTH.USER), }; export const useUserQuery = () => { From 81975d255f766ea51d749c2b9b08e488d69821ea Mon Sep 17 00:00:00 2001 From: ejinn1 Date: Thu, 1 May 2025 16:08:28 +0900 Subject: [PATCH 4/6] =?UTF-8?q?Refactor:=20API.post=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/apis/Comment/useCreateCommentQuery.ts | 6 +++--- src/hooks/apis/Follow/useAssignFollowMutation.ts | 9 +++++---- src/hooks/apis/Sidebar/useSidebarGoalsMutation.ts | 7 +++++-- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/hooks/apis/Comment/useCreateCommentQuery.ts b/src/hooks/apis/Comment/useCreateCommentQuery.ts index 99feb96..a66c664 100644 --- a/src/hooks/apis/Comment/useCreateCommentQuery.ts +++ b/src/hooks/apis/Comment/useCreateCommentQuery.ts @@ -1,18 +1,18 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { POST } from '@/apis/services/httpMethod'; +import { API } from '@/apis/services/httpMethod'; import { API_ENDPOINTS } from '@/constants/ApiEndpoints'; +import { TOAST_MESSAGES } from '@/constants/Messages'; import { QUERY_KEYS } from '@/constants/QueryKeys'; import { notify } from '@/store/useToastStore'; import { CommentResponse, GetCommentRequest } from '@/types/Comment'; -import { TOAST_MESSAGES } from '@/constants/Messages'; export const useCreateComment = () => { const queryClient = useQueryClient(); return useMutation({ mutationFn: (postData: GetCommentRequest) => - POST( + API.post( API_ENDPOINTS.COMMENT.CREATE, postData, ), diff --git a/src/hooks/apis/Follow/useAssignFollowMutation.ts b/src/hooks/apis/Follow/useAssignFollowMutation.ts index 65808de..c190dff 100644 --- a/src/hooks/apis/Follow/useAssignFollowMutation.ts +++ b/src/hooks/apis/Follow/useAssignFollowMutation.ts @@ -1,9 +1,10 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { POST } from '@/apis/services/httpMethod'; + +import { API } from '@/apis/services/httpMethod'; import { API_ENDPOINTS } from '@/constants/ApiEndpoints'; -import { AssignFollowResponse, UserProfileResponse } from '@/types/response'; -import { notify } from '@/store/useToastStore'; import { QUERY_KEYS } from '@/constants/QueryKeys'; +import { notify } from '@/store/useToastStore'; +import { AssignFollowResponse, UserProfileResponse } from '@/types/response'; interface FollowId { userId: number; @@ -14,7 +15,7 @@ export const useAssignFollowMutation = () => { return useMutation({ mutationFn: (userId: number) => - POST( + API.post( API_ENDPOINTS.FOLLOW.ASSIGN_FOLLOW(userId), ), onMutate: async (userId) => { diff --git a/src/hooks/apis/Sidebar/useSidebarGoalsMutation.ts b/src/hooks/apis/Sidebar/useSidebarGoalsMutation.ts index c21d420..d042afc 100644 --- a/src/hooks/apis/Sidebar/useSidebarGoalsMutation.ts +++ b/src/hooks/apis/Sidebar/useSidebarGoalsMutation.ts @@ -1,6 +1,6 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { POST } from '@/apis/services/httpMethod'; +import { API } from '@/apis/services/httpMethod'; import { API_ENDPOINTS } from '@/constants/ApiEndpoints'; import { QUERY_KEYS } from '@/constants/QueryKeys'; import { notify } from '@/store/useToastStore'; @@ -15,7 +15,10 @@ export const useSidebarGoalsMutation = () => { return useMutation({ mutationFn: (postData: PostGoalTypes) => - POST(API_ENDPOINTS.GOAL.GOALS, postData), + API.post( + API_ENDPOINTS.GOAL.GOALS, + postData, + ), onMutate: async ({ title }) => { const prev = queryClient.getQueriesData({ queryKey: [QUERY_KEYS.GOALS] }); From 7a1a8b73f997461e6ec820997e3b3862bfb04e7c Mon Sep 17 00:00:00 2001 From: ejinn1 Date: Thu, 1 May 2025 16:09:59 +0900 Subject: [PATCH 5/6] =?UTF-8?q?Refactor:=20API.put=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/apis/Auth/useChangePassword.ts | 7 ++++--- src/hooks/apis/Auth/useModifyProfilePic.ts | 11 ++++++----- src/hooks/apis/Comment/usePutCommentQuery.ts | 9 +++++---- src/hooks/apis/Goals/useEditGoalTitleMutation.ts | 4 ++-- 4 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/hooks/apis/Auth/useChangePassword.ts b/src/hooks/apis/Auth/useChangePassword.ts index bb200fd..c4a647b 100644 --- a/src/hooks/apis/Auth/useChangePassword.ts +++ b/src/hooks/apis/Auth/useChangePassword.ts @@ -1,9 +1,10 @@ import { useMutation, UseMutationResult } from '@tanstack/react-query'; import { AxiosError, AxiosResponse } from 'axios'; + +import { API } from '@/apis/services/httpMethod'; +import { API_ENDPOINTS } from '@/constants/ApiEndpoints'; import { notify } from '@/store/useToastStore'; import { ChangePasswordRequest } from '@/types/Auth/ChangePasswordRequest'; -import { PUT } from '@/apis/services/httpMethod'; -import { API_ENDPOINTS } from '@/constants/ApiEndpoints'; interface ErrorResponse { message: string; @@ -18,7 +19,7 @@ export const useChangePassword = ( > => { return useMutation({ mutationFn: (data: ChangePasswordRequest) => - PUT( + API.put( API_ENDPOINTS.AUTH.PASSWORD, data, ), diff --git a/src/hooks/apis/Auth/useModifyProfilePic.ts b/src/hooks/apis/Auth/useModifyProfilePic.ts index 5900fa3..f42058f 100644 --- a/src/hooks/apis/Auth/useModifyProfilePic.ts +++ b/src/hooks/apis/Auth/useModifyProfilePic.ts @@ -4,11 +4,12 @@ import { useQueryClient, } from '@tanstack/react-query'; import { AxiosError, AxiosResponse } from 'axios'; -import { ModifyProfilePicRequest } from '@/types/Auth/ModifyProfilePicRequest'; -import { notify } from '@/store/useToastStore'; -import { QUERY_KEYS } from '@/constants/QueryKeys'; -import { PUT } from '@/apis/services/httpMethod'; + +import { API } from '@/apis/services/httpMethod'; import { API_ENDPOINTS } from '@/constants/ApiEndpoints'; +import { QUERY_KEYS } from '@/constants/QueryKeys'; +import { notify } from '@/store/useToastStore'; +import { ModifyProfilePicRequest } from '@/types/Auth/ModifyProfilePicRequest'; export const useModifyProfilePic = (): UseMutationResult< AxiosResponse, @@ -19,7 +20,7 @@ export const useModifyProfilePic = (): UseMutationResult< return useMutation({ mutationFn: (data: ModifyProfilePicRequest) => - PUT( + API.put( API_ENDPOINTS.AUTH.PROFILE_PIC, data, ), diff --git a/src/hooks/apis/Comment/usePutCommentQuery.ts b/src/hooks/apis/Comment/usePutCommentQuery.ts index a947a8f..e487e91 100644 --- a/src/hooks/apis/Comment/usePutCommentQuery.ts +++ b/src/hooks/apis/Comment/usePutCommentQuery.ts @@ -1,10 +1,11 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { notify } from '@/store/useToastStore'; -import { PUT } from '@/apis/services/httpMethod'; + +import { API } from '@/apis/services/httpMethod'; import { API_ENDPOINTS } from '@/constants/ApiEndpoints'; -import { CommentResponse, PutCommentRequest } from '@/types/Comment'; import { TOAST_MESSAGES } from '@/constants/Messages'; import { QUERY_KEYS } from '@/constants/QueryKeys'; +import { notify } from '@/store/useToastStore'; +import { CommentResponse, PutCommentRequest } from '@/types/Comment'; interface PutCommentVariables { data: PutCommentRequest; @@ -16,7 +17,7 @@ export const usePutComment = () => { return useMutation({ mutationFn: ({ data, commentId }) => - PUT( + API.put( API_ENDPOINTS.COMMENT.PUT(commentId), data, ), diff --git a/src/hooks/apis/Goals/useEditGoalTitleMutation.ts b/src/hooks/apis/Goals/useEditGoalTitleMutation.ts index a75a2bd..b3d1c3b 100644 --- a/src/hooks/apis/Goals/useEditGoalTitleMutation.ts +++ b/src/hooks/apis/Goals/useEditGoalTitleMutation.ts @@ -1,6 +1,6 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { PUT } from '@/apis/services/httpMethod'; +import { API } from '@/apis/services/httpMethod'; import { API_ENDPOINTS } from '@/constants/ApiEndpoints'; import { QUERY_KEYS } from '@/constants/QueryKeys'; import { notify } from '@/store/useToastStore'; @@ -16,7 +16,7 @@ export const useEditGoalTitleMutation = (editGoalId: number) => { return useMutation({ mutationFn: (postData: PostDataTypes) => - PUT( + API.put( API_ENDPOINTS.GOAL.GOAL(editGoalId), postData, ), From 9bedfef09d20e3aacd5e26f8700ddbaeebc43064 Mon Sep 17 00:00:00 2001 From: ejinn1 Date: Thu, 1 May 2025 16:12:29 +0900 Subject: [PATCH 6/6] =?UTF-8?q?Refactor:=20API.delete=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/apis/Auth/useWithdrawal.ts | 8 +++++--- src/hooks/apis/Comment/useDeleteCommentQuery.ts | 9 +++++---- src/hooks/apis/Follow/useDeleteFollowMutation.ts | 11 +++++++---- src/hooks/apis/Follows/useDeleteFollowsQuery.ts | 13 ++++++++----- src/hooks/apis/Goals/useDeleteGoalMutation.ts | 4 ++-- src/hooks/apis/Likes/useDeleteLikeQuery.ts | 9 +++++---- 6 files changed, 32 insertions(+), 22 deletions(-) diff --git a/src/hooks/apis/Auth/useWithdrawal.ts b/src/hooks/apis/Auth/useWithdrawal.ts index 210dd77..773978c 100644 --- a/src/hooks/apis/Auth/useWithdrawal.ts +++ b/src/hooks/apis/Auth/useWithdrawal.ts @@ -1,16 +1,18 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; import { useRouter } from 'next/navigation'; -import { DELETE } from '@/apis/services/httpMethod'; -import { WithdrawalResponse } from '@/types/response'; + +import { API } from '@/apis/services/httpMethod'; import { API_ENDPOINTS } from '@/constants/ApiEndpoints'; import { notify } from '@/store/useToastStore'; +import { WithdrawalResponse } from '@/types/response'; export const useWithdrawal = () => { const queryClient = useQueryClient(); const router = useRouter(); return useMutation({ - mutationFn: () => DELETE(API_ENDPOINTS.AUTH.WITHDRAWAL), + mutationFn: () => + API.delete(API_ENDPOINTS.AUTH.WITHDRAWAL), onSuccess: () => { notify('success', '회원탈퇴에 성공하였습니다.', 3000); document.cookie = 'token=; max-age=0; path=/;'; diff --git a/src/hooks/apis/Comment/useDeleteCommentQuery.ts b/src/hooks/apis/Comment/useDeleteCommentQuery.ts index e3267c8..0c2aa41 100644 --- a/src/hooks/apis/Comment/useDeleteCommentQuery.ts +++ b/src/hooks/apis/Comment/useDeleteCommentQuery.ts @@ -1,9 +1,10 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { notify } from '@/store/useToastStore'; -import { DELETE } from '@/apis/services/httpMethod'; + +import { API } from '@/apis/services/httpMethod'; import { API_ENDPOINTS } from '@/constants/ApiEndpoints'; -import { QUERY_KEYS } from '@/constants/QueryKeys'; import { TOAST_MESSAGES } from '@/constants/Messages'; +import { QUERY_KEYS } from '@/constants/QueryKeys'; +import { notify } from '@/store/useToastStore'; import { CommentResponse } from '@/types/Comment'; export const useDeleteComment = () => { @@ -11,7 +12,7 @@ export const useDeleteComment = () => { return useMutation({ mutationFn: (commentId: number) => - DELETE(API_ENDPOINTS.COMMENT.DELETE(commentId)), + API.delete(API_ENDPOINTS.COMMENT.DELETE(commentId)), onSuccess: () => { queryClient.invalidateQueries({ queryKey: [QUERY_KEYS.COMPLETE_DETAIL] }); notify('success', TOAST_MESSAGES.COMMENT_DELETE_SUCCESS, 3000); diff --git a/src/hooks/apis/Follow/useDeleteFollowMutation.ts b/src/hooks/apis/Follow/useDeleteFollowMutation.ts index fff35aa..d22a39b 100644 --- a/src/hooks/apis/Follow/useDeleteFollowMutation.ts +++ b/src/hooks/apis/Follow/useDeleteFollowMutation.ts @@ -1,16 +1,19 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { DELETE } from '@/apis/services/httpMethod'; + +import { API } from '@/apis/services/httpMethod'; import { API_ENDPOINTS } from '@/constants/ApiEndpoints'; -import { DeleteFollowResponse, UserProfileResponse } from '@/types/response'; -import { notify } from '@/store/useToastStore'; import { QUERY_KEYS } from '@/constants/QueryKeys'; +import { notify } from '@/store/useToastStore'; +import { DeleteFollowResponse, UserProfileResponse } from '@/types/response'; export const useDeleteFollowMutation = () => { const queryClient = useQueryClient(); return useMutation({ mutationFn: (userId: number) => - DELETE(API_ENDPOINTS.FOLLOW.DELETE_FOLLOW(userId)), + API.delete( + API_ENDPOINTS.FOLLOW.DELETE_FOLLOW(userId), + ), onMutate: async (userId) => { const previousData = queryClient.getQueriesData({ queryKey: [QUERY_KEYS.USER_PROFILE, userId], diff --git a/src/hooks/apis/Follows/useDeleteFollowsQuery.ts b/src/hooks/apis/Follows/useDeleteFollowsQuery.ts index 2c75472..a520183 100644 --- a/src/hooks/apis/Follows/useDeleteFollowsQuery.ts +++ b/src/hooks/apis/Follows/useDeleteFollowsQuery.ts @@ -1,17 +1,20 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { notify } from '@/store/useToastStore'; -import { DeleteFollowsResponse } from '@/types/Follows'; -import { DELETE } from '@/apis/services/httpMethod'; + +import { API } from '@/apis/services/httpMethod'; import { API_ENDPOINTS } from '@/constants/ApiEndpoints'; -import { QUERY_KEYS } from '@/constants/QueryKeys'; import { TOAST_MESSAGES } from '@/constants/Messages'; +import { QUERY_KEYS } from '@/constants/QueryKeys'; +import { notify } from '@/store/useToastStore'; +import { DeleteFollowsResponse } from '@/types/Follows'; export const useDeleteFollow = () => { const queryClient = useQueryClient(); return useMutation({ mutationFn: (followerId: number) => - DELETE(API_ENDPOINTS.FOLLOW.DELETE(followerId)), + API.delete( + API_ENDPOINTS.FOLLOW.DELETE(followerId), + ), onSuccess: () => { queryClient.invalidateQueries({ queryKey: [QUERY_KEYS.FOLLOW_COUNT] }); notify('success', TOAST_MESSAGES.DELETE_FOLLOW_SUCCESS, 3000); diff --git a/src/hooks/apis/Goals/useDeleteGoalMutation.ts b/src/hooks/apis/Goals/useDeleteGoalMutation.ts index d4072b9..6fa0392 100644 --- a/src/hooks/apis/Goals/useDeleteGoalMutation.ts +++ b/src/hooks/apis/Goals/useDeleteGoalMutation.ts @@ -1,6 +1,6 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { DELETE } from '@/apis/services/httpMethod'; +import { API } from '@/apis/services/httpMethod'; import { API_ENDPOINTS } from '@/constants/ApiEndpoints'; import { QUERY_KEYS } from '@/constants/QueryKeys'; import { notify } from '@/store/useToastStore'; @@ -11,7 +11,7 @@ export const useDeleteGoalMutation = () => { return useMutation({ mutationFn: (goalId: number) => - DELETE(API_ENDPOINTS.GOAL.GOAL(goalId)), + API.delete(API_ENDPOINTS.GOAL.GOAL(goalId)), onSuccess: () => { queryClient.invalidateQueries({ queryKey: [QUERY_KEYS.ALL_GOALS] }); queryClient.invalidateQueries({ queryKey: [QUERY_KEYS.GOALS] }); diff --git a/src/hooks/apis/Likes/useDeleteLikeQuery.ts b/src/hooks/apis/Likes/useDeleteLikeQuery.ts index 0788713..a55cb5d 100644 --- a/src/hooks/apis/Likes/useDeleteLikeQuery.ts +++ b/src/hooks/apis/Likes/useDeleteLikeQuery.ts @@ -1,17 +1,18 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { DELETE } from '@/apis/services/httpMethod'; -import { DeleteLikeResponse } from '@/types/Likes'; + +import { API } from '@/apis/services/httpMethod'; import { API_ENDPOINTS } from '@/constants/ApiEndpoints'; -import { notify } from '@/store/useToastStore'; import { TOAST_MESSAGES } from '@/constants/Messages'; import { QUERY_KEYS } from '@/constants/QueryKeys'; +import { notify } from '@/store/useToastStore'; +import { DeleteLikeResponse } from '@/types/Likes'; export const useDeleteLike = () => { const queryClient = useQueryClient(); return useMutation({ mutationFn: (completeId: number) => - DELETE(API_ENDPOINTS.LIKE.DELETE(completeId)), + API.delete(API_ENDPOINTS.LIKE.DELETE(completeId)), onSuccess: () => { queryClient.invalidateQueries({ queryKey: [QUERY_KEYS.FOLLOWS] });