From 5d84f09b109dc3a4ccf5ab3d7da95c2767e5ce61 Mon Sep 17 00:00:00 2001 From: Sungu Kim <108677235+haegu97@users.noreply.github.com> Date: Fri, 10 Jan 2025 11:34:00 +0900 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F[Refactor]=20=ED=86=A0?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EB=A9=94=EC=8B=9C=EC=A7=80=20=EC=83=81?= =?UTF-8?q?=EC=88=98=EB=A1=9C=20=EA=B4=80=EB=A6=AC=20#312?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/auth/react-query/customHooks.ts | 11 ++++- src/api/book-club/react-query/customHooks.ts | 16 +++++-- src/constants/messages/toast.ts | 45 +++++++++++++++++++ .../club-details/hooks/useJoinClub.ts | 5 ++- .../profile/container/MyJoinedClubList.tsx | 12 +++-- src/lib/hooks/useCancelClub.ts | 5 ++- src/lib/hooks/useLeaveClub.ts | 8 +++- src/lib/hooks/useLikeClub.ts | 5 ++- src/lib/hooks/useUnLikeClub.ts | 5 ++- 9 files changed, 93 insertions(+), 19 deletions(-) create mode 100644 src/constants/messages/toast.ts diff --git a/src/api/auth/react-query/customHooks.ts b/src/api/auth/react-query/customHooks.ts index 58834975..5b8ca5d6 100644 --- a/src/api/auth/react-query/customHooks.ts +++ b/src/api/auth/react-query/customHooks.ts @@ -1,5 +1,6 @@ import { useMutation } from '@tanstack/react-query'; import { showToast } from '@/components/toast/toast'; +import { TOAST_MESSAGES } from '@/constants/messages/toast'; import { authClientAPI } from '../authClientAPI'; import { getUserInfo } from '@/features/auth/api/auth'; @@ -9,10 +10,16 @@ export function useEditInfoMutation() { mutationFn: (formData: FormData) => authClientAPI.editInfo(formData), onSuccess: () => { getUserInfo(); - showToast({ message: '프로필 수정이 완료되었습니다.', type: 'success' }); + showToast({ + message: TOAST_MESSAGES.SUCCESS.PROFILE_EDIT, + type: 'success', + }); }, onError: (error) => { - showToast({ message: '프로필 수정을 실패하였습니다', type: 'error' }); + showToast({ + message: TOAST_MESSAGES.ERROR.PROFILE_EDIT_FAILED, + type: 'error', + }); console.error(error); }, }); diff --git a/src/api/book-club/react-query/customHooks.ts b/src/api/book-club/react-query/customHooks.ts index dcfdc23e..b5d49fbc 100644 --- a/src/api/book-club/react-query/customHooks.ts +++ b/src/api/book-club/react-query/customHooks.ts @@ -1,6 +1,7 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; import { bookClubs } from './queries'; import { showToast } from '@/components/toast/toast'; +import { TOAST_MESSAGES } from '@/constants/messages/toast'; import { bookClubLikeAPI, bookClubMainAPI, @@ -25,7 +26,10 @@ export function useBookClubCreateMutation() { }); }, onError: () => { - showToast({ message: '북클럽 생성에 실패했습니다.', type: 'error' }); + showToast({ + message: TOAST_MESSAGES.ERROR.CLUB_CREATE_FAILED, + type: 'error', + }); }, }); } @@ -74,12 +78,18 @@ export function useWriteReview() { queryClient.invalidateQueries({ queryKey: bookClubs.my()._ctx.reviews().queryKey, }); - showToast({ message: '리뷰 작성을 완료하였습니다', type: 'success' }); + showToast({ + message: TOAST_MESSAGES.SUCCESS.REVIEW_CREATE, + type: 'success', + }); }, onError: (error) => { console.error(error); - showToast({ message: '리뷰 작성을 실패하였습니다.', type: 'error' }); + showToast({ + message: TOAST_MESSAGES.ERROR.REVIEW_CREATE_FAILED, + type: 'error', + }); }, }); } diff --git a/src/constants/messages/toast.ts b/src/constants/messages/toast.ts new file mode 100644 index 00000000..5b166a5c --- /dev/null +++ b/src/constants/messages/toast.ts @@ -0,0 +1,45 @@ +export const TOAST_MESSAGES = { + SUCCESS: { + // 인증 관련 + LOGIN: '로그인에 성공했습니다.', + LOGOUT: '로그아웃되었습니다.', + SIGNUP: '회원가입이 완료되었습니다.', + + // 프로필 관련 + PROFILE_EDIT: '프로필 수정이 완료되었습니다.', + + // 북클럽 관련 + CLUB_CREATE: '북클럽이 생성되었습니다.', + CLUB_JOIN: '참여 완료! 함께하게 돼서 기뻐요🥰', + CLUB_CANCEL: '모임을 취소하였습니다.', + CLUB_LEAVE: '모임 참여를 취소하였습니다.', + CLUB_DELETE: '취소된 모임을 삭제하였습니다.', + CLUB_LIKE: '찜 완료! 찜한 모임은 찜 목록 페이지에서 확인하세요', + CLUB_UNLIKE: '찜이 취소되었습니다', + + // 리뷰 관련 + REVIEW_CREATE: '리뷰 작성을 완료하였습니다', + }, + + ERROR: { + // 인증 관련 + LOGIN_FAILED: '로그인에 실패했습니다.', + LOGOUT_FAILED: '로그아웃에 실패했습니다.', + + // 프로필 관련 + PROFILE_EDIT_FAILED: '프로필 수정을 실패하였습니다', + + // 북클럽 관련 + CLUB_CREATE_FAILED: '북클럽 생성에 실패했습니다.', + CLUB_JOIN_FAILED: '참여 요청 중 문제가 발생했습니다. 다시 시도해주세요.', + CLUB_CANCEL_FAILED: '모임 취소를 실패하였습니다.', + CLUB_LEAVE_FAILED: '모임 참여 취소를 실패하였습니다.', + + // 리뷰 관련 + REVIEW_CREATE_FAILED: '리뷰 작성을 실패하였습니다.', + REVIEW_VALIDATION: '점수와 리뷰 내용을 입력해주세요', + + // 일반 에러 + UNKNOWN: '알 수 없는 오류가 발생했습니다.', + }, +} as const; diff --git a/src/features/club-details/hooks/useJoinClub.ts b/src/features/club-details/hooks/useJoinClub.ts index 86deb3ea..09f71b05 100644 --- a/src/features/club-details/hooks/useJoinClub.ts +++ b/src/features/club-details/hooks/useJoinClub.ts @@ -1,5 +1,6 @@ import { useJoinBookClub } from '@/api/book-club/react-query'; import { showToast } from '@/components/toast/toast'; +import { TOAST_MESSAGES } from '@/constants/messages/toast'; export const useJoinClub = () => { const { mutate: joinClub } = useJoinBookClub(); @@ -8,7 +9,7 @@ export const useJoinClub = () => { joinClub(clubId, { onSuccess: () => { showToast({ - message: '참여 완료! 함께하게 돼서 기뻐요🥰', + message: TOAST_MESSAGES.SUCCESS.CLUB_JOIN, type: 'success', }); }, @@ -20,7 +21,7 @@ export const useJoinClub = () => { }); } else { showToast({ - message: '참여 요청 중 문제가 발생했습니다. 다시 시도해주세요.', + message: TOAST_MESSAGES.ERROR.CLUB_JOIN_FAILED, type: 'error', }); } diff --git a/src/features/profile/container/MyJoinedClubList.tsx b/src/features/profile/container/MyJoinedClubList.tsx index 6176b401..30e6dcf0 100644 --- a/src/features/profile/container/MyJoinedClubList.tsx +++ b/src/features/profile/container/MyJoinedClubList.tsx @@ -16,6 +16,7 @@ import { useWriteReview, } from '@/api/book-club/react-query'; import { showToast } from '@/components/toast/toast'; +import { TOAST_MESSAGES } from '@/constants/messages/toast'; import { BookClub } from '@/types/bookclubs'; import Loading from '@/components/loading/Loading'; import { useAuthStore } from '@/store/authStore'; @@ -58,7 +59,7 @@ export default function MyJoinedClubList({ order }: ClubListProps) { const res = await leaveClub(clubId); if (res) { showToast({ - message: '취소된 모임을 삭제하였습니다.', + message: TOAST_MESSAGES.SUCCESS.CLUB_DELETE, type: 'success', }); } @@ -80,7 +81,10 @@ export default function MyJoinedClubList({ order }: ClubListProps) { const onConfirmReview = (rating: number, content: string) => { //TODO: 토스트 메시지가 뜨더라도 모달이 열린 상태로 유지되도록 수정 if (!rating || !content) { - showToast({ message: '점수와 리뷰 내용을 입력해주세요', type: 'error' }); + showToast({ + message: TOAST_MESSAGES.ERROR.REVIEW_VALIDATION, + type: 'error', + }); return; } @@ -97,14 +101,14 @@ export default function MyJoinedClubList({ order }: ClubListProps) { const res = await leaveClub(selectedClubId); if (res) { showToast({ - message: '모임 참여를 취소하였습니다.', + message: TOAST_MESSAGES.SUCCESS.CLUB_LEAVE, type: 'success', }); } } } catch (error) { showToast({ - message: '모임 참여를 취소를 실패하였습니다.', + message: TOAST_MESSAGES.ERROR.CLUB_LEAVE_FAILED, type: 'error', }); console.error(error); diff --git a/src/lib/hooks/useCancelClub.ts b/src/lib/hooks/useCancelClub.ts index 68f81d4f..cd482b25 100644 --- a/src/lib/hooks/useCancelClub.ts +++ b/src/lib/hooks/useCancelClub.ts @@ -1,5 +1,6 @@ import { useCancelBookClub } from '@/api/book-club/react-query'; import { showToast } from '@/components/toast/toast'; +import { TOAST_MESSAGES } from '@/constants/messages/toast'; import { useState } from 'react'; export function useCancelClub() { @@ -29,14 +30,14 @@ export function useCancelClub() { const res = await cancelClub(popUpState.selectedClubId); if (res) { showToast({ - message: '모임을 취소하였습니다.', + message: TOAST_MESSAGES.SUCCESS.CLUB_CANCEL, type: 'success', }); } } } catch (error) { showToast({ - message: '모임 취소를 실패하였습니다.', + message: TOAST_MESSAGES.ERROR.CLUB_CANCEL_FAILED, type: 'error', }); console.error(error); diff --git a/src/lib/hooks/useLeaveClub.ts b/src/lib/hooks/useLeaveClub.ts index fe37b393..ea27d67d 100644 --- a/src/lib/hooks/useLeaveClub.ts +++ b/src/lib/hooks/useLeaveClub.ts @@ -1,5 +1,6 @@ import { useLeaveBookClub } from '@/api/book-club/react-query'; import { showToast } from '@/components/toast/toast'; +import { TOAST_MESSAGES } from '@/constants/messages/toast'; import { useState } from 'react'; export const useLeaveClub = () => { @@ -26,14 +27,17 @@ export const useLeaveClub = () => { try { if (popUpState.selectedClubId) { await leaveClub(popUpState.selectedClubId); - showToast({ message: '모임 참여를 취소하였습니다.', type: 'success' }); + showToast({ + message: TOAST_MESSAGES.SUCCESS.CLUB_LEAVE, + type: 'success', + }); } } catch (error) { if (error instanceof Error) { showToast({ message: error.message, type: 'error' }); } else { showToast({ - message: '알 수 없는 오류가 발생했습니다.', + message: TOAST_MESSAGES.ERROR.UNKNOWN, type: 'error', }); } diff --git a/src/lib/hooks/useLikeClub.ts b/src/lib/hooks/useLikeClub.ts index abab5c66..78f4368b 100644 --- a/src/lib/hooks/useLikeClub.ts +++ b/src/lib/hooks/useLikeClub.ts @@ -1,5 +1,6 @@ import { useLikeBookClub } from '@/api/book-club/react-query'; import { showToast } from '@/components/toast/toast'; +import { TOAST_MESSAGES } from '@/constants/messages/toast'; export const useLikeClub = () => { const { mutate: likeClub } = useLikeBookClub(); @@ -8,7 +9,7 @@ export const useLikeClub = () => { likeClub(selectedClubId, { onSuccess: () => { showToast({ - message: '찜 완료! 찜한 모임은 찜 목록 페이지에서 확인하세요', + message: TOAST_MESSAGES.SUCCESS.CLUB_LIKE, type: 'success', }); }, @@ -23,7 +24,7 @@ export const useLikeClub = () => { message: error instanceof Error ? error.message - : '알 수 없는 오류가 발생했습니다. 다시 시도해주세요.', + : TOAST_MESSAGES.ERROR.UNKNOWN, type: 'error', }); } diff --git a/src/lib/hooks/useUnLikeClub.ts b/src/lib/hooks/useUnLikeClub.ts index dd6227e6..d65678ef 100644 --- a/src/lib/hooks/useUnLikeClub.ts +++ b/src/lib/hooks/useUnLikeClub.ts @@ -1,5 +1,6 @@ import { useUnLikeBookClub } from '@/api/book-club/react-query'; import { showToast } from '@/components/toast/toast'; +import { TOAST_MESSAGES } from '@/constants/messages/toast'; export const useUnLikeClub = () => { const { mutate: unLikeClub } = useUnLikeBookClub(); @@ -8,7 +9,7 @@ export const useUnLikeClub = () => { unLikeClub(selectedClubId, { onSuccess: () => { showToast({ - message: '찜이 취소되었습니다', + message: TOAST_MESSAGES.SUCCESS.CLUB_UNLIKE, type: 'success', }); }, @@ -23,7 +24,7 @@ export const useUnLikeClub = () => { message: error instanceof Error ? error.message - : '알 수 없는 오류가 발생했습니다. 다시 시도해주세요.', + : TOAST_MESSAGES.ERROR.UNKNOWN, type: 'error', }); }