From 0722ca10f3deca1a753294e2126683cc6a2155b2 Mon Sep 17 00:00:00 2001 From: caadiq Date: Fri, 9 Jan 2026 22:09:42 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20API=20=EC=A4=91=EC=95=99=ED=99=94?= =?UTF-8?q?=20=EC=B5=9C=EC=A2=85=20(5/5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Schedule.jsx import 경로 오류 수정 - AdminSchedule.jsx API 모듈 적용 (schedulesApi, categoriesApi) - 전체: PC public 6개, 모바일 Home 1개, Admin 2개 적용 완료 --- frontend/src/pages/pc/admin/AdminSchedule.jsx | 28 ++++++------------- frontend/src/pages/pc/public/Schedule.jsx | 4 +-- 2 files changed, 10 insertions(+), 22 deletions(-) diff --git a/frontend/src/pages/pc/admin/AdminSchedule.jsx b/frontend/src/pages/pc/admin/AdminSchedule.jsx index 69b6f0a..9d7cfa8 100644 --- a/frontend/src/pages/pc/admin/AdminSchedule.jsx +++ b/frontend/src/pages/pc/admin/AdminSchedule.jsx @@ -12,6 +12,8 @@ import Toast from '../../../components/Toast'; import Tooltip from '../../../components/Tooltip'; import useScheduleStore from '../../../stores/useScheduleStore'; import { getTodayKST, formatDate } from '../../../utils/date'; +import * as schedulesApi from '../../../api/admin/schedules'; +import * as categoriesApi from '../../../api/admin/categories'; // 일정 아이템 컴포넌트 - React.memo로 불필요한 리렌더링 방지 const ScheduleItem = memo(function ScheduleItem({ @@ -370,8 +372,7 @@ function AdminSchedule() { // 카테고리 로드 함수 const fetchCategories = async () => { try { - const res = await fetch('/api/admin/schedule-categories'); - const data = await res.json(); + const data = await categoriesApi.getCategories(); setCategories([ { id: 'all', name: '전체', color: 'gray' }, ...data @@ -385,8 +386,7 @@ function AdminSchedule() { const fetchSchedules = async () => { setLoading(true); try { - const res = await fetch(`/api/admin/schedules?year=${year}&month=${month + 1}`); - const data = await res.json(); + const data = await schedulesApi.getSchedules(year, month + 1); setSchedules(data); } catch (error) { console.error('일정 로드 오류:', error); @@ -501,24 +501,12 @@ function AdminSchedule() { setDeleting(true); try { - const token = localStorage.getItem('adminToken'); - const response = await fetch(`/api/admin/schedules/${scheduleToDelete.id}`, { - method: 'DELETE', - headers: { - 'Authorization': `Bearer ${token}`, - }, - }); - - if (response.ok) { - setToast({ type: 'success', message: '일정이 삭제되었습니다.' }); - fetchSchedules(); // 일정 목록 새로고침 - } else { - const data = await response.json(); - setToast({ type: 'error', message: data.error || '삭제 실패' }); - } + await schedulesApi.deleteSchedule(scheduleToDelete.id); + setToast({ type: 'success', message: '일정이 삭제되었습니다.' }); + fetchSchedules(); } catch (error) { console.error('삭제 오류:', error); - setToast({ type: 'error', message: '삭제 중 오류가 발생했습니다.' }); + setToast({ type: 'error', message: error.message || '삭제 중 오류가 발생했습니다.' }); } finally { setDeleting(false); setDeleteDialogOpen(false); diff --git a/frontend/src/pages/pc/public/Schedule.jsx b/frontend/src/pages/pc/public/Schedule.jsx index 892d5e0..9039fac 100644 --- a/frontend/src/pages/pc/public/Schedule.jsx +++ b/frontend/src/pages/pc/public/Schedule.jsx @@ -4,8 +4,8 @@ import { motion, AnimatePresence } from 'framer-motion'; import { Clock, ChevronLeft, ChevronRight, ChevronDown, Tag, Search, ArrowLeft, Link2 } from 'lucide-react'; import { useInfiniteQuery } from '@tanstack/react-query'; import { useInView } from 'react-intersection-observer'; -import { getTodayKST } from '../../../../utils/date'; -import { getSchedules, getCategories, searchSchedules as searchSchedulesApi } from '../../../../api/public/schedules'; +import { getTodayKST } from '../../../utils/date'; +import { getSchedules, getCategories, searchSchedules as searchSchedulesApi } from '../../../api/public/schedules'; function Schedule() { const navigate = useNavigate();