From 102fff95b100e746f65a6ca707e029b53324d708 Mon Sep 17 00:00:00 2001 From: zzz-myam Date: Wed, 22 Jan 2025 04:13:13 +0900 Subject: [PATCH 1/6] =?UTF-8?q?feat:=20api=20=EC=97=B0=EA=B2=B0=20?= =?UTF-8?q?=EC=A4=80=EB=B9=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apis/likes/useDeleteCakeLikes.ts | 23 +++++++++++++++++++++++ src/constants/apis/api.ts | 1 + 2 files changed, 24 insertions(+) create mode 100644 src/apis/likes/useDeleteCakeLikes.ts diff --git a/src/apis/likes/useDeleteCakeLikes.ts b/src/apis/likes/useDeleteCakeLikes.ts new file mode 100644 index 00000000..22938c28 --- /dev/null +++ b/src/apis/likes/useDeleteCakeLikes.ts @@ -0,0 +1,23 @@ +import { useMutation } from '@tanstack/react-query'; + +import { instance } from '@apis/instance'; + +import { END_POINT } from '@constants'; + +import { MutateResposneType } from '@types'; + +const deleteCakeLikes = async (cakeId: number): Promise => { + try { + const response = await instance.delete(END_POINT.DELETE_CAKE_LIKES(cakeId)); + return response.data; + } catch (error) { + console.log(error); + throw error; + } +}; + +export const useDeleteCakeLikes = () => { + return useMutation({ + mutationFn: (cakeId: number) => deleteCakeLikes(cakeId), + }); +}; diff --git a/src/constants/apis/api.ts b/src/constants/apis/api.ts index 0dd2acb5..22582275 100644 --- a/src/constants/apis/api.ts +++ b/src/constants/apis/api.ts @@ -10,4 +10,5 @@ export const END_POINT = { FETCH_CAKE_RANK: '/api/v1/cake/rank', POST_CAKE_LIKES: (cakeId: number) => `/api/v1/cake/likes/${cakeId}`, POST_STORE_LIKES: (storeId: number) => `/api/v1/store/likes/${storeId}`, + DELETE_CAKE_LIKES: (cakeId: number) => `/api/v1/cake/likes/${cakeId}`, } as const; From 3ca0d04386f0c368f7baa7811476bb15a483c5ff Mon Sep 17 00:00:00 2001 From: zzz-myam Date: Wed, 22 Jan 2025 04:43:28 +0900 Subject: [PATCH 2/6] =?UTF-8?q?feat:=20api=20=EC=97=B0=EA=B2=B0=20?= =?UTF-8?q?=EC=A4=91,=20=EB=82=99=EA=B4=80=EC=A0=81=20=EC=97=85=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=8A=B8=20=ED=95=84=EC=9A=94=ED=95=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apis/likes/useDeleteStoreLikes.ts | 27 +++++++++++++++++++ .../common/IconButton/IconButton.tsx | 15 ++++++++++- src/constants/apis/api.ts | 1 + 3 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 src/apis/likes/useDeleteStoreLikes.ts diff --git a/src/apis/likes/useDeleteStoreLikes.ts b/src/apis/likes/useDeleteStoreLikes.ts new file mode 100644 index 00000000..cd165aa1 --- /dev/null +++ b/src/apis/likes/useDeleteStoreLikes.ts @@ -0,0 +1,27 @@ +import { useMutation } from '@tanstack/react-query'; + +import { instance } from '@apis/instance'; + +import { END_POINT } from '@constants'; + +import { MutateResposneType } from '@types'; + +const deleteStoreLikes = async ( + storeId: number +): Promise => { + try { + const response = await instance.delete( + END_POINT.DELETE_STORE_LIKES(storeId) + ); + return response.data; + } catch (error) { + console.log(error); + throw error; + } +}; + +export const useDeleteStoreLikes = () => { + return useMutation({ + mutationFn: (storeId: number) => deleteStoreLikes(storeId), + }); +}; diff --git a/src/components/common/IconButton/IconButton.tsx b/src/components/common/IconButton/IconButton.tsx index ad88e3cf..a61176b0 100644 --- a/src/components/common/IconButton/IconButton.tsx +++ b/src/components/common/IconButton/IconButton.tsx @@ -1,6 +1,8 @@ import React, { ButtonHTMLAttributes } from 'react'; import { usePostCakeLikes, usePostStoreLikes } from '@apis/likes'; +import { useDeleteCakeLikes } from '@apis/likes/useDeleteCakeLikes'; +import { useDeleteStoreLikes } from '@apis/likes/useDeleteStoreLikes'; import { IcFillLikeOff36, @@ -46,8 +48,10 @@ const IconButton = ({ count, itemId, }: IconButtonProps) => { - const { mutate: postCakeLikes } = usePostCakeLikes(); const { mutate: postStoreLikes } = usePostStoreLikes(); + const { mutate: postCakeLikes } = usePostCakeLikes(); + const { mutate: deleteStoreLikes } = useDeleteStoreLikes(); + const { mutate: deleteCardLikes } = useDeleteCakeLikes(); const handleButtonClick = (e: React.MouseEvent) => { e.stopPropagation(); @@ -59,7 +63,16 @@ const IconButton = ({ postCakeLikes(itemId); } } + + if (itemId !== undefined) { + if (buttonType === 'save24' || buttonType === 'save28') { + deleteStoreLikes(itemId); + } else { + deleteCardLikes(itemId); + } + } }; + return ( ); From a63f97c658390ecc1a3b071b98b5dc115a776198 Mon Sep 17 00:00:00 2001 From: zzz-myam Date: Wed, 22 Jan 2025 07:15:10 +0900 Subject: [PATCH 5/6] =?UTF-8?q?chore:=20index.ts=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apis/likes/index.ts | 11 +++++++++-- src/components/common/IconButton/IconButton.tsx | 11 +++++++---- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/apis/likes/index.ts b/src/apis/likes/index.ts index 7e16d30f..49d2235e 100644 --- a/src/apis/likes/index.ts +++ b/src/apis/likes/index.ts @@ -1,4 +1,11 @@ -import { usePostStoreLikes } from './usePostStoreLikes'; +import { useDeleteCakeLikes } from './useDeleteCakeLikes'; +import { useDeleteStoreLikes } from './useDeleteStoreLikes'; import { usePostCakeLikes } from './usePostCakeLikes'; +import { usePostStoreLikes } from './usePostStoreLikes'; -export { usePostStoreLikes, usePostCakeLikes }; +export { + usePostStoreLikes, + usePostCakeLikes, + useDeleteCakeLikes, + useDeleteStoreLikes, +}; diff --git a/src/components/common/IconButton/IconButton.tsx b/src/components/common/IconButton/IconButton.tsx index b5405118..73793c14 100644 --- a/src/components/common/IconButton/IconButton.tsx +++ b/src/components/common/IconButton/IconButton.tsx @@ -1,8 +1,11 @@ import React, { ButtonHTMLAttributes, useState } from 'react'; -import { usePostCakeLikes, usePostStoreLikes } from '@apis/likes'; -import { useDeleteCakeLikes } from '@apis/likes/useDeleteCakeLikes'; -import { useDeleteStoreLikes } from '@apis/likes/useDeleteStoreLikes'; +import { + useDeleteCakeLikes, + useDeleteStoreLikes, + usePostCakeLikes, + usePostStoreLikes, +} from '@apis/likes'; import { IcFillLikeOff36, @@ -88,7 +91,7 @@ const IconButton = ({ }); } }; - + return (