From 9dfdad24b2a5461358373dd139bd938584cea7aa Mon Sep 17 00:00:00 2001 From: yongaricode Date: Fri, 9 May 2025 21:37:13 +0900 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20Bookie=20=EB=8C=80=ED=99=94=20?= =?UTF-8?q?=ED=9E=88=EC=8A=A4=ED=86=A0=EB=A6=AC=20=EB=B6=88=EB=9F=AC?= =?UTF-8?q?=EC=98=A4=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/bookie.api.ts | 14 ++++++++++++++ src/pages/Bookie.tsx | 8 +++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/api/bookie.api.ts b/src/api/bookie.api.ts index bc52df4..2177d32 100644 --- a/src/api/bookie.api.ts +++ b/src/api/bookie.api.ts @@ -16,3 +16,17 @@ export const sendMessageToChatAPI = async (message: string) => { throw error; } }; + +// 이전 히스토리 가져오기 +export const getHistory = async () => { + try { + const response = await instance.get('/bookie/history'); + + if (response.status === 200) { + return response.data; + } + } catch (error) { + console.log(error); + throw error; + } +}; diff --git a/src/pages/Bookie.tsx b/src/pages/Bookie.tsx index 6cbd30f..1d39f27 100644 --- a/src/pages/Bookie.tsx +++ b/src/pages/Bookie.tsx @@ -5,7 +5,7 @@ import Input from '../components/Bookie/Input'; import { FaRegArrowAltCircleUp } from 'react-icons/fa'; import { IoCloseOutline } from 'react-icons/io5'; import { useNavigate } from 'react-router-dom'; -import { sendMessageToChatAPI } from '../api/bookie.api'; +import { getHistory, sendMessageToChatAPI } from '../api/bookie.api'; import { MdBookmarkAdd } from 'react-icons/md'; import toast from 'react-hot-toast'; import { pickBook } from '../api/booksnap.api'; @@ -44,6 +44,12 @@ const Bookie = () => { } }, [systemRes]); + useEffect(() => { + getHistory().then((data) => { + setSystemRes(data.chat); + }); + }, []); + // 메세지 보내기 const sendMessage = async () => { if (!input.trim() || isComposing) return; From b4bb17b33d6234447c3a74009be9045087ff3602 Mon Sep 17 00:00:00 2001 From: yongaricode Date: Fri, 9 May 2025 21:45:53 +0900 Subject: [PATCH 2/3] =?UTF-8?q?feat:=20Bookie=20=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8=ED=96=88=EC=9D=84=20=EB=95=8C=EB=A7=8C=20=EC=A0=91?= =?UTF-8?q?=EA=B7=BC=20=EA=B0=80=EB=8A=A5=ED=95=98=EA=B2=8C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.tsx | 2 ++ src/components/Common/MenuBar.tsx | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/src/App.tsx b/src/App.tsx index ef23420..90e989f 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -2,6 +2,7 @@ import './App.css'; import { RouterProvider } from 'react-router-dom'; import { router } from './routes/router'; import { useEffect } from 'react'; +import { Toaster } from 'react-hot-toast'; function App() { useEffect(() => { @@ -19,6 +20,7 @@ function App() { return ( <> + ); } diff --git a/src/components/Common/MenuBar.tsx b/src/components/Common/MenuBar.tsx index fee6c2d..f223b89 100644 --- a/src/components/Common/MenuBar.tsx +++ b/src/components/Common/MenuBar.tsx @@ -6,6 +6,7 @@ import SearchIcon from '@mui/icons-material/Search'; import SmartToyIcon from '@mui/icons-material/SmartToy'; import RateReviewIcon from '@mui/icons-material/RateReview'; import Person2Icon from '@mui/icons-material/Person2'; +import toast from 'react-hot-toast'; const MenuBar = () => { const nav = useNavigate(); @@ -62,6 +63,14 @@ const MenuBar = () => { key={menuItem.name} className={`flex cursor-pointer flex-col items-center px-2 ${currentMenu === menuItem.name ? 'pb-[0px] pt-[6px]' : 'py-[6px]'}`} onClick={() => { + const isAuthenticated = !!localStorage.getItem('accessToken'); + + const protectedMenus = ['bookie']; + + if (protectedMenus.includes(menuItem.name) && !isAuthenticated) { + toast.error('로그인이 필요한 서비스입니다!'); + return; + } nav(menuItem.name); }} > From 66972b240fa7e2163882fd54184e2fd09ce54e02 Mon Sep 17 00:00:00 2001 From: yongaricode Date: Fri, 9 May 2025 21:50:36 +0900 Subject: [PATCH 3/3] =?UTF-8?q?refactor:=20=EC=B1=85=20=EB=8B=B4=EA=B8=B0?= =?UTF-8?q?=20API=EC=9D=98=20request=20body=20=ED=95=84=EB=93=9C=EB=AA=85?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD=20(isbn=20=E2=86=92=20bookId)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/booksnap.api.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/api/booksnap.api.ts b/src/api/booksnap.api.ts index 78e17a0..8a818a5 100644 --- a/src/api/booksnap.api.ts +++ b/src/api/booksnap.api.ts @@ -89,9 +89,9 @@ export const deleteLike = async (bookReviewId: number) => { }; // 책 담기 -export const pickBook = async (isbn: string) => { +export const pickBook = async (bookId: string) => { try { - const response = await instance.post(`api/pick-book`, { isbn: isbn }); + const response = await instance.post(`api/pick-book`, { bookId: bookId }); if (response.status == 201) { return { success: true, message: '책이 정상적으로 담겼습니다!' }; }