From f15e3cb007734214a350bbeab1a488b4f9e42248 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=95=88=EC=A7=80=EC=9B=90?= Date: Tue, 11 Mar 2025 21:11:50 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat=20:=20=EA=B8=88=EC=B9=99=EC=96=B4=20?= =?UTF-8?q?=EC=88=98=EC=A0=95,=20=ED=99=9C=EC=84=B1/=EB=B9=84=ED=99=9C?= =?UTF-8?q?=EC=84=B1,=20=EC=82=AD=EC=A0=9C=20api=20=EC=97=B0=EA=B2=B0=20?= =?UTF-8?q?=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apis/admin.ts | 23 ++++++-- src/pages/Admin/Filtering.tsx | 4 +- src/pages/Admin/components/AddInputButton.tsx | 2 +- src/pages/Admin/components/FilterTextItem.tsx | 58 +++++++++++++++++-- src/types/admin.d.ts | 1 + 5 files changed, 75 insertions(+), 13 deletions(-) diff --git a/src/apis/admin.ts b/src/apis/admin.ts index 8508d49..e2ef8de 100644 --- a/src/apis/admin.ts +++ b/src/apis/admin.ts @@ -63,11 +63,12 @@ const postBadWords = async (badWordsRequest: BadWords) => { } }; -// 내 상상대로 만든 필터링 단어 취소 버튼 -const patchBadWordsUsed = async (badWordId: string) => { +const patchBadWordsUsed = async (badWordId: string, isUsed: string) => { + const reverseIsUsed = isUsed === 'true' ? false : true; + try { - const res = await client.patch(`/api/bad-words/${badWordId}/status`, { isUsed: false }); - if (!res) throw new Error('검열 단어 삭제 도중 에러가 발생했습니다.'); + const res = await client.patch(`/api/bad-words/${badWordId}/status`, { isUsed: reverseIsUsed }); + if (!res) throw new Error('검열 활성화/비활성화 도중 에러가 발생했습니다.'); console.log(res); return res; } catch (error) { @@ -78,7 +79,18 @@ const patchBadWordsUsed = async (badWordId: string) => { const patchBadWords = async (badWordId: string, word: string) => { try { const res = await client.patch(`/api/bad-words/${badWordId}`, { word: word }); - if (!res) throw new Error('검열 단어 삭제 도중 에러가 발생했습니다.'); + if (!res) throw new Error('금칙어 수정중 에러가 발생했습니다.'); + console.log(res); + return res; + } catch (error) { + console.error(error); + } +}; + +const deleteBadWords = async (id: string) => { + try { + const res = await client.delete(`/api/bad-words/${id}`); + if (!res) throw new Error('금칙어 삭제 도중 에러가 발생했습니다.'); console.log(res); return res; } catch (error) { @@ -94,4 +106,5 @@ export { postBadWords, patchBadWordsUsed, patchBadWords, + deleteBadWords, }; diff --git a/src/pages/Admin/Filtering.tsx b/src/pages/Admin/Filtering.tsx index 8f59b21..aad0f86 100644 --- a/src/pages/Admin/Filtering.tsx +++ b/src/pages/Admin/Filtering.tsx @@ -1,7 +1,7 @@ import { useEffect, useState } from 'react'; -import { getBadWords, patchBadWordsUsed } from '@/apis/admin'; -import { AddIcon, AlarmIcon, CancelIcon } from '@/assets/icons'; +import { getBadWords } from '@/apis/admin'; +import { AddIcon, AlarmIcon } from '@/assets/icons'; import AddInputButton from './components/AddInputButton'; import AdminPageTitle from './components/AdminPageTitle'; diff --git a/src/pages/Admin/components/AddInputButton.tsx b/src/pages/Admin/components/AddInputButton.tsx index 1baf604..15ed676 100644 --- a/src/pages/Admin/components/AddInputButton.tsx +++ b/src/pages/Admin/components/AddInputButton.tsx @@ -23,7 +23,7 @@ export default function AddInputButton({ if (inputText.word === '') return setAddInputShow(false); const res = await postBadWords(inputText); if (res?.status === 200) { - setBadWords((cur) => [...cur, res.data.data]); + setBadWords((cur) => [...cur, { ...res.data.data, isUsed: `${res.data.data.isUsed}` }]); setAddInputShow(false); } }; diff --git a/src/pages/Admin/components/FilterTextItem.tsx b/src/pages/Admin/components/FilterTextItem.tsx index 34c3283..632cda2 100644 --- a/src/pages/Admin/components/FilterTextItem.tsx +++ b/src/pages/Admin/components/FilterTextItem.tsx @@ -1,7 +1,8 @@ -import { patchBadWordsUsed } from '@/apis/admin'; +import { deleteBadWords, patchBadWordsUsed } from '@/apis/admin'; import { DeleteIcon, PencilIcon, ToggleOff, ToggleOn } from '@/assets/icons'; import { useState } from 'react'; import PatchInput from './PatchInput'; +import { twMerge } from 'tailwind-merge'; export default function FilterTextItem({ badWord, @@ -12,8 +13,47 @@ export default function FilterTextItem({ }) { const [patchInputShow, setPatchInputShow] = useState(false); + const handleDeleteBadWords = async (id: string) => { + const res = await deleteBadWords(id); + if (res?.status === 200) { + setBadWords((cur) => + cur.filter((e) => { + if (e.id === id) { + return null; + } + return e; + }), + ); + } + }; + + const handlePatchBadWordsUsed = async (id: string, isUsed: string) => { + const res = await patchBadWordsUsed(id, isUsed); + if (res?.status === 200) { + setBadWords((cur) => + cur.map((e) => { + if (e.id === id) { + let reverseIsUsed: string; + if (e.isUsed === 'true') { + reverseIsUsed = 'false'; + } else { + reverseIsUsed = 'true'; + } + return { ...e, isUsed: reverseIsUsed }; + } + return e; + }), + ); + } + }; + + const buttonStyle = twMerge( + `flex items-center gap-1.5 rounded-2xl px-4 py-1.5`, + badWord.isUsed === 'true' ? 'bg-primary-3' : 'bg-[#c1c1c1]', + ); + return ( - + {patchInputShow ? ( - - ); diff --git a/src/types/admin.d.ts b/src/types/admin.d.ts index 4efa604..27ba6ba 100644 --- a/src/types/admin.d.ts +++ b/src/types/admin.d.ts @@ -75,6 +75,7 @@ interface BadWords { interface BadWordsData extends BadWords { id: string; + isUsed: string; } // From 1716aa4f1e4c5d98389e8e566a48e71a7c92dc0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=95=88=EC=A7=80=EC=9B=90?= Date: Tue, 11 Mar 2025 21:19:57 +0900 Subject: [PATCH 2/2] =?UTF-8?q?feat=20:=20=EA=B4=80=EB=A6=AC=EC=9E=90=20?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=20=EB=A1=9C=EA=B7=B8=EC=95=84?= =?UTF-8?q?=EC=9B=83=20=EC=B6=94=EA=B0=80=20+=20=EA=B4=80=EB=A6=AC?= =?UTF-8?q?=EC=9E=90=20=EC=9D=B4=EB=A9=94=EC=9D=BC=20wl990@naver.com?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=ED=95=98=EB=93=9C=EC=BD=94=EB=94=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Admin/components/Sidebar.tsx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/pages/Admin/components/Sidebar.tsx b/src/pages/Admin/components/Sidebar.tsx index 6de7cc6..5e37509 100644 --- a/src/pages/Admin/components/Sidebar.tsx +++ b/src/pages/Admin/components/Sidebar.tsx @@ -4,9 +4,11 @@ import { twMerge } from 'tailwind-merge'; import { AlarmIcon, ArrowDownIcon } from '@/assets/icons'; import { ADMIN_MENU_LIST } from '../constants'; +import useAuthStore from '@/stores/authStore'; export default function Sidebar() { const location = useLocation(); + const logout = useAuthStore((state) => state.logout); return (
@@ -16,7 +18,7 @@ export default function Sidebar() {

현재 로그인 계정

-

{'admin123@test.com'}

+

{'wl990@naver.com'}


@@ -54,7 +56,9 @@ export default function Sidebar() {
);