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();