"use client"; import { useState } from "react"; import { api } from "@/lib/api"; import { useAuth } from "@/lib/auth-context"; import { ChannelsPanel } from "./_panels/ChannelsPanel"; import { VideosPanel } from "./_panels/VideosPanel"; import { RestaurantsPanel } from "./_panels/RestaurantsPanel"; import { UsersPanel } from "./_panels/UsersPanel"; import { DaemonPanel } from "./_panels/DaemonPanel"; // #329 — 5개 패널을 _panels/ 디렉토리로 분리. page.tsx는 탭 라우팅 + 헤더만. type Tab = "channels" | "videos" | "restaurants" | "users" | "daemon"; function CacheFlushButton() { const [flushing, setFlushing] = useState(false); const handleFlush = async () => { if (!confirm("Redis 캐시를 초기화하시겠습니까?")) return; setFlushing(true); try { await api.flushCache(); alert("캐시가 초기화되었습니다."); } catch (e) { alert("캐시 초기화 실패: " + (e instanceof Error ? e.message : e)); } finally { setFlushing(false); } }; return ( ); } export default function AdminPage() { const [tab, setTab] = useState("channels"); const { user, isLoading } = useAuth(); const isAdmin = user?.is_admin === true; if (isLoading) { return
로딩 중...
; } if (!user) { return (

로그인이 필요합니다

메인으로 돌아가기
); } return (
Tasteby Admin {!isAdmin && ( 읽기 전용 )}
{isAdmin && } ← 메인으로
{tab === "channels" && } {tab === "videos" && } {tab === "restaurants" && } {tab === "users" && } {tab === "daemon" && }
); }