diff --git a/frontend/src/pages/mobile/public/Album.jsx b/frontend/src/pages/mobile/public/Album.jsx index 5e59ee9..972f2e5 100644 --- a/frontend/src/pages/mobile/public/Album.jsx +++ b/frontend/src/pages/mobile/public/Album.jsx @@ -1,6 +1,7 @@ import { motion } from 'framer-motion'; import { useState, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; +import { getAlbums } from '../../../api/public/albums'; // 모바일 앨범 목록 페이지 function MobileAlbum() { @@ -9,8 +10,7 @@ function MobileAlbum() { const [loading, setLoading] = useState(true); useEffect(() => { - fetch('/api/albums') - .then(res => res.json()) + getAlbums() .then(data => { setAlbums(data); setLoading(false); diff --git a/frontend/src/pages/mobile/public/AlbumDetail.jsx b/frontend/src/pages/mobile/public/AlbumDetail.jsx index fe6adbe..f62105c 100644 --- a/frontend/src/pages/mobile/public/AlbumDetail.jsx +++ b/frontend/src/pages/mobile/public/AlbumDetail.jsx @@ -2,6 +2,7 @@ import { motion } from 'framer-motion'; import { useState, useEffect } from 'react'; import { useParams, useNavigate } from 'react-router-dom'; import { ArrowLeft, Play } from 'lucide-react'; +import { getAlbums, getAlbumTracks } from '../../../api/public/albums'; // 모바일 앨범 상세 페이지 function MobileAlbumDetail() { @@ -13,15 +14,13 @@ function MobileAlbumDetail() { useEffect(() => { // 앨범 정보 로드 - fetch('/api/albums') - .then(res => res.json()) + getAlbums() .then(data => { const found = data.find(a => a.folder_name === name); if (found) { setAlbum(found); // 트랙 정보 로드 - fetch(`/api/albums/${found.id}/tracks`) - .then(res => res.json()) + getAlbumTracks(found.id) .then(setTracks) .catch(console.error); } diff --git a/frontend/src/pages/mobile/public/AlbumGallery.jsx b/frontend/src/pages/mobile/public/AlbumGallery.jsx index ea026de..8af74fc 100644 --- a/frontend/src/pages/mobile/public/AlbumGallery.jsx +++ b/frontend/src/pages/mobile/public/AlbumGallery.jsx @@ -2,6 +2,7 @@ import { useState, useEffect } from 'react'; import { useParams, useNavigate } from 'react-router-dom'; import { ArrowLeft, X, ChevronLeft, ChevronRight } from 'lucide-react'; import { motion, AnimatePresence } from 'framer-motion'; +import { getAlbums, getAlbumPhotos } from '../../../api/public/albums'; // 모바일 앨범 갤러리 페이지 function MobileAlbumGallery() { @@ -13,14 +14,12 @@ function MobileAlbumGallery() { const [selectedIndex, setSelectedIndex] = useState(null); useEffect(() => { - fetch('/api/albums') - .then(res => res.json()) + getAlbums() .then(data => { const found = data.find(a => a.folder_name === name); if (found) { setAlbum(found); - fetch(`/api/albums/${found.id}/photos`) - .then(res => res.json()) + getAlbumPhotos(found.id) .then(setPhotos) .catch(console.error); } diff --git a/frontend/src/pages/mobile/public/Members.jsx b/frontend/src/pages/mobile/public/Members.jsx index 2ffcb34..27b256a 100644 --- a/frontend/src/pages/mobile/public/Members.jsx +++ b/frontend/src/pages/mobile/public/Members.jsx @@ -1,6 +1,7 @@ import { motion, AnimatePresence } from 'framer-motion'; import { useState, useEffect } from 'react'; import { Instagram } from 'lucide-react'; +import { getMembers } from '../../../api/public/members'; // 모바일 멤버 페이지 function MobileMembers() { @@ -9,8 +10,7 @@ function MobileMembers() { const [selectedMember, setSelectedMember] = useState(null); useEffect(() => { - fetch('/api/members') - .then(res => res.json()) + getMembers() .then(data => { setMembers(data.filter(m => !m.is_former)); setFormerMembers(data.filter(m => m.is_former)); diff --git a/frontend/src/pages/mobile/public/Schedule.jsx b/frontend/src/pages/mobile/public/Schedule.jsx index a9f08ba..76918b8 100644 --- a/frontend/src/pages/mobile/public/Schedule.jsx +++ b/frontend/src/pages/mobile/public/Schedule.jsx @@ -3,6 +3,7 @@ import { motion, AnimatePresence } from 'framer-motion'; import { Clock, Tag, Link2, ChevronLeft, ChevronRight, ChevronDown, Search, X, Calendar } from 'lucide-react'; import { useInfiniteQuery } from '@tanstack/react-query'; import { useInView } from 'react-intersection-observer'; +import { getSchedules, getCategories, searchSchedules } from '../../../api/public/schedules'; // 모바일 일정 페이지 function MobileSchedule() { @@ -37,11 +38,7 @@ function MobileSchedule() { } = useInfiniteQuery({ queryKey: ['mobileScheduleSearch', searchTerm], queryFn: async ({ pageParam = 0 }) => { - const response = await fetch( - `/api/schedules?search=${encodeURIComponent(searchTerm)}&offset=${pageParam}&limit=${SEARCH_LIMIT}` - ); - if (!response.ok) throw new Error('Search failed'); - return response.json(); + return searchSchedules(searchTerm, { offset: pageParam, limit: SEARCH_LIMIT }); }, getNextPageParam: (lastPage) => { if (lastPage.hasMore) { @@ -72,8 +69,8 @@ function MobileSchedule() { setLoading(true); Promise.all([ - fetch(`/api/schedules?year=${year}&month=${month}`).then(res => res.json()), - fetch('/api/schedules/categories').then(res => res.json()) + getSchedules(year, month), + getCategories() ]).then(([schedulesData, categoriesData]) => { setSchedules(schedulesData); setCategories(categoriesData);