import { useState } from "react"; import { BrowserRouter, Routes, Route } from "react-router-dom"; import { isMobile } from "react-device-detect"; import { useQuery } from "@tanstack/react-query"; import { cn, getTodayKST, formatFullDate } from "@/utils"; import { useAuthStore, useUIStore } from "@/stores"; import { memberApi, scheduleApi } from "@/api"; /** * 프로미스나인 팬사이트 메인 앱 * * Phase 4: API 계층 완료 * - api/client.js: 기본 fetch 클라이언트 (공개/인증) * - api/schedules.js: 스케줄 API * - api/albums.js: 앨범 API * - api/members.js: 멤버 API * - api/auth.js: 인증 API */ function App() { const today = getTodayKST(); const { isAuthenticated } = useAuthStore(); const { showSuccess, showError, toasts } = useUIStore(); const [apiTest, setApiTest] = useState(null); // React Query로 멤버 데이터 조회 const { data: members, isLoading: membersLoading } = useQuery({ queryKey: ["members"], queryFn: memberApi.getMembers, }); // React Query로 카테고리 데이터 조회 const { data: categories, isLoading: categoriesLoading } = useQuery({ queryKey: ["categories"], queryFn: scheduleApi.getCategories, }); const handleTestApi = async () => { try { const data = await memberApi.getMembers(); setApiTest(`멤버 ${data.length}명 조회 성공!`); showSuccess("API 호출 성공!"); } catch (error) { setApiTest(`에러: ${error.message}`); showError("API 호출 실패"); } }; return (

fromis_9 Frontend Refactoring

Phase 4 완료 - API 계층

디바이스: {isMobile ? "모바일" : "PC"}

오늘: {formatFullDate(today)}

인증: {isAuthenticated ? "✅" : "❌"}

API 테스트 (React Query)

멤버:{" "} {membersLoading ? "로딩 중..." : `${members?.length || 0}명`}

{members && (
{members.map((m) => ( {m.name} ))}
)}

카테고리:{" "} {categoriesLoading ? "로딩 중..." : `${categories?.length || 0}개`}

{categories && (
{categories.map((c) => ( {c.name} ))}
)}

직접 API 호출 테스트

{apiTest &&

{apiTest}

}
{/* 토스트 표시 */}
{toasts.map((toast) => (
{toast.message}
))}
} />
); } export default App;