2026-01-23 20:47:05 +09:00
|
|
|
import { Routes, Route, Navigate } from 'react-router-dom';
|
|
|
|
|
import { useAuthStore } from '@/stores';
|
2026-01-23 13:34:28 +09:00
|
|
|
|
|
|
|
|
// 관리자 페이지
|
|
|
|
|
import AdminLogin from '@/pages/pc/admin/login/Login';
|
2026-01-23 20:47:05 +09:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 인증 필수 라우트 가드
|
|
|
|
|
* token이 없으면 로그인 페이지로 즉시 리다이렉트
|
|
|
|
|
*/
|
|
|
|
|
function RequireAuth({ children }) {
|
|
|
|
|
const { token, _hasHydrated } = useAuthStore();
|
|
|
|
|
|
|
|
|
|
// Hydration 완료 전에는 아무것도 렌더링하지 않음
|
|
|
|
|
if (!_hasHydrated) {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!token) {
|
|
|
|
|
return <Navigate to="/admin" replace />;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return children;
|
|
|
|
|
}
|
2026-01-23 13:34:28 +09:00
|
|
|
import AdminDashboard from '@/pages/pc/admin/dashboard/Dashboard';
|
|
|
|
|
import AdminMembers from '@/pages/pc/admin/members/Members';
|
|
|
|
|
import AdminMemberEdit from '@/pages/pc/admin/members/MemberEdit';
|
|
|
|
|
import AdminAlbums from '@/pages/pc/admin/albums/Albums';
|
|
|
|
|
import AdminAlbumForm from '@/pages/pc/admin/albums/AlbumForm';
|
|
|
|
|
import AdminAlbumPhotos from '@/pages/pc/admin/albums/AlbumPhotos';
|
|
|
|
|
import AdminSchedules from '@/pages/pc/admin/schedules/Schedules';
|
|
|
|
|
import AdminScheduleForm from '@/pages/pc/admin/schedules/ScheduleForm';
|
|
|
|
|
import AdminScheduleFormPage from '@/pages/pc/admin/schedules/form';
|
|
|
|
|
import AdminYouTubeEditForm from '@/pages/pc/admin/schedules/edit/YouTubeEditForm';
|
|
|
|
|
import AdminScheduleCategory from '@/pages/pc/admin/schedules/ScheduleCategory';
|
|
|
|
|
import AdminScheduleDict from '@/pages/pc/admin/schedules/ScheduleDict';
|
|
|
|
|
import AdminScheduleBots from '@/pages/pc/admin/schedules/ScheduleBots';
|
2026-03-02 16:40:27 +09:00
|
|
|
import AdminActivityLogs from '@/pages/pc/admin/logs/ActivityLogs';
|
2026-01-23 13:34:28 +09:00
|
|
|
import AdminNotFound from '@/pages/pc/admin/common/NotFound';
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* PC 관리자 라우트
|
|
|
|
|
*/
|
|
|
|
|
export default function AdminRoutes() {
|
|
|
|
|
return (
|
|
|
|
|
<Routes>
|
|
|
|
|
<Route path="/admin" element={<AdminLogin />} />
|
2026-01-23 20:47:05 +09:00
|
|
|
<Route path="/admin/dashboard" element={<RequireAuth><AdminDashboard /></RequireAuth>} />
|
|
|
|
|
<Route path="/admin/members" element={<RequireAuth><AdminMembers /></RequireAuth>} />
|
|
|
|
|
<Route path="/admin/members/:name/edit" element={<RequireAuth><AdminMemberEdit /></RequireAuth>} />
|
|
|
|
|
<Route path="/admin/albums" element={<RequireAuth><AdminAlbums /></RequireAuth>} />
|
|
|
|
|
<Route path="/admin/albums/new" element={<RequireAuth><AdminAlbumForm /></RequireAuth>} />
|
|
|
|
|
<Route path="/admin/albums/:id/edit" element={<RequireAuth><AdminAlbumForm /></RequireAuth>} />
|
|
|
|
|
<Route path="/admin/albums/:albumId/photos" element={<RequireAuth><AdminAlbumPhotos /></RequireAuth>} />
|
|
|
|
|
<Route path="/admin/schedule" element={<RequireAuth><AdminSchedules /></RequireAuth>} />
|
|
|
|
|
<Route path="/admin/schedule/new" element={<RequireAuth><AdminScheduleFormPage /></RequireAuth>} />
|
|
|
|
|
<Route path="/admin/schedule/new-legacy" element={<RequireAuth><AdminScheduleForm /></RequireAuth>} />
|
|
|
|
|
<Route path="/admin/schedule/:id/edit" element={<RequireAuth><AdminScheduleForm /></RequireAuth>} />
|
|
|
|
|
<Route path="/admin/schedule/:id/edit/youtube" element={<RequireAuth><AdminYouTubeEditForm /></RequireAuth>} />
|
|
|
|
|
<Route path="/admin/schedule/categories" element={<RequireAuth><AdminScheduleCategory /></RequireAuth>} />
|
|
|
|
|
<Route path="/admin/schedule/dict" element={<RequireAuth><AdminScheduleDict /></RequireAuth>} />
|
|
|
|
|
<Route path="/admin/schedule/bots" element={<RequireAuth><AdminScheduleBots /></RequireAuth>} />
|
2026-03-02 16:40:27 +09:00
|
|
|
<Route path="/admin/logs" element={<RequireAuth><AdminActivityLogs /></RequireAuth>} />
|
2026-01-23 13:34:28 +09:00
|
|
|
<Route path="/admin/*" element={<AdminNotFound />} />
|
|
|
|
|
</Routes>
|
|
|
|
|
);
|
|
|
|
|
}
|