diff --git a/apps/admin/src/pages/LoginPage/components/LoginForm.tsx b/apps/admin/src/pages/Login/components/LoginForm.tsx
similarity index 96%
rename from apps/admin/src/pages/LoginPage/components/LoginForm.tsx
rename to apps/admin/src/pages/Login/components/LoginForm.tsx
index 163fba1..874cf07 100644
--- a/apps/admin/src/pages/LoginPage/components/LoginForm.tsx
+++ b/apps/admin/src/pages/Login/components/LoginForm.tsx
@@ -1,6 +1,6 @@
import { Button, TextField } from '@muneo/design-system';
import { useLoginForm } from '../hooks/useLoginForm';
-import * as styles from '../LoginPage.css';
+import * as styles from '../Login.css';
export const LoginForm = () => {
const { email, password, setEmail, setPassword, fieldErrors, submitError, isPending, submit } = useLoginForm();
diff --git a/apps/admin/src/pages/LoginPage/hooks/useLoginForm.ts b/apps/admin/src/pages/Login/hooks/useLoginForm.ts
similarity index 100%
rename from apps/admin/src/pages/LoginPage/hooks/useLoginForm.ts
rename to apps/admin/src/pages/Login/hooks/useLoginForm.ts
diff --git a/apps/admin/src/pages/NotFound/NotFound.tsx b/apps/admin/src/pages/NotFound/NotFound.tsx
new file mode 100644
index 0000000..ab6fd23
--- /dev/null
+++ b/apps/admin/src/pages/NotFound/NotFound.tsx
@@ -0,0 +1,28 @@
+import { Button } from '@muneo/design-system';
+import { Link } from 'react-router';
+import { ROUTES } from '@/constants/routes';
+
+export const NotFound = () => (
+
+
404
+
+ 페이지를 찾을 수 없습니다
+
+
+ 요청하신 페이지가 존재하지 않거나 이동되었습니다.
+
+
+
+);
diff --git a/apps/admin/src/pages/UserDetailPage/UserDetailPage.css.ts b/apps/admin/src/pages/UserDetail/UserDetail.css.ts
similarity index 100%
rename from apps/admin/src/pages/UserDetailPage/UserDetailPage.css.ts
rename to apps/admin/src/pages/UserDetail/UserDetail.css.ts
diff --git a/apps/admin/src/pages/UserDetailPage/UserDetailPage.tsx b/apps/admin/src/pages/UserDetail/UserDetail.tsx
similarity index 97%
rename from apps/admin/src/pages/UserDetailPage/UserDetailPage.tsx
rename to apps/admin/src/pages/UserDetail/UserDetail.tsx
index 1ddb08f..48d27c2 100644
--- a/apps/admin/src/pages/UserDetailPage/UserDetailPage.tsx
+++ b/apps/admin/src/pages/UserDetail/UserDetail.tsx
@@ -6,9 +6,9 @@ import { UserDangerZone } from './components/UserDangerZone';
import { UserEditForm } from './components/UserEditForm';
import { UserRoleSection } from './components/UserRoleSection';
import { useUserDetail } from './hooks/useUserDetail';
-import * as styles from './UserDetailPage.css';
+import * as styles from './UserDetail.css';
-export const UserDetailPage = () => {
+export const UserDetail = () => {
const {
userId,
detail,
diff --git a/apps/admin/src/pages/UserDetailPage/components/UserDangerZone.tsx b/apps/admin/src/pages/UserDetail/components/UserDangerZone.tsx
similarity index 96%
rename from apps/admin/src/pages/UserDetailPage/components/UserDangerZone.tsx
rename to apps/admin/src/pages/UserDetail/components/UserDangerZone.tsx
index 9b01db2..bc62ae4 100644
--- a/apps/admin/src/pages/UserDetailPage/components/UserDangerZone.tsx
+++ b/apps/admin/src/pages/UserDetail/components/UserDangerZone.tsx
@@ -1,6 +1,6 @@
import { Button } from '@muneo/design-system';
import { Card } from '@/components/Card';
-import * as styles from '../UserDetailPage.css';
+import * as styles from '../UserDetail.css';
interface UserDangerZoneProps {
isDeleted: boolean;
diff --git a/apps/admin/src/pages/UserDetailPage/components/UserEditForm.tsx b/apps/admin/src/pages/UserDetail/components/UserEditForm.tsx
similarity index 97%
rename from apps/admin/src/pages/UserDetailPage/components/UserEditForm.tsx
rename to apps/admin/src/pages/UserDetail/components/UserEditForm.tsx
index 07be3f5..a90d650 100644
--- a/apps/admin/src/pages/UserDetailPage/components/UserEditForm.tsx
+++ b/apps/admin/src/pages/UserDetail/components/UserEditForm.tsx
@@ -3,7 +3,7 @@ import { type FormEvent } from 'react';
import { type UpdateUserRequest } from '@/api';
import { Card } from '@/components/Card';
import { type FormErrors } from '../hooks/useUserDetail';
-import * as styles from '../UserDetailPage.css';
+import * as styles from '../UserDetail.css';
interface UserEditFormProps {
form: UpdateUserRequest;
diff --git a/apps/admin/src/pages/UserDetailPage/components/UserRoleSection.tsx b/apps/admin/src/pages/UserDetail/components/UserRoleSection.tsx
similarity index 97%
rename from apps/admin/src/pages/UserDetailPage/components/UserRoleSection.tsx
rename to apps/admin/src/pages/UserDetail/components/UserRoleSection.tsx
index 8643997..041ec6a 100644
--- a/apps/admin/src/pages/UserDetailPage/components/UserRoleSection.tsx
+++ b/apps/admin/src/pages/UserDetail/components/UserRoleSection.tsx
@@ -2,7 +2,7 @@ import { Button, Dropdown } from '@muneo/design-system';
import { USER_ROLES, type UserRole } from '@/api';
import { Card } from '@/components/Card';
import { ROLE_LABEL } from '@/lib/formatters';
-import * as styles from '../UserDetailPage.css';
+import * as styles from '../UserDetail.css';
interface UserRoleSectionProps {
currentRole: UserRole;
diff --git a/apps/admin/src/pages/UserDetailPage/hooks/useUserDetail.ts b/apps/admin/src/pages/UserDetail/hooks/useUserDetail.ts
similarity index 100%
rename from apps/admin/src/pages/UserDetailPage/hooks/useUserDetail.ts
rename to apps/admin/src/pages/UserDetail/hooks/useUserDetail.ts
diff --git a/apps/admin/src/pages/UsersListPage/UsersListPage.css.ts b/apps/admin/src/pages/UsersList/UsersList.css.ts
similarity index 100%
rename from apps/admin/src/pages/UsersListPage/UsersListPage.css.ts
rename to apps/admin/src/pages/UsersList/UsersList.css.ts
diff --git a/apps/admin/src/pages/UsersListPage/UsersListPage.tsx b/apps/admin/src/pages/UsersList/UsersList.tsx
similarity index 93%
rename from apps/admin/src/pages/UsersListPage/UsersListPage.tsx
rename to apps/admin/src/pages/UsersList/UsersList.tsx
index a180202..56e6fb1 100644
--- a/apps/admin/src/pages/UsersListPage/UsersListPage.tsx
+++ b/apps/admin/src/pages/UsersList/UsersList.tsx
@@ -3,9 +3,9 @@ import { ROUTES } from '@/constants/routes';
import { UserFilters } from './components/UserFilters';
import { UsersTable } from './components/UsersTable';
import { useUsersFilters } from './hooks/useUsersFilters';
-import * as styles from './UsersListPage.css';
+import * as styles from './UsersList.css';
-export const UsersListPage = () => {
+export const UsersList = () => {
const navigate = useNavigate();
const { draft, setDraft, query, apply, reset, prevPage, nextPage } = useUsersFilters();
diff --git a/apps/admin/src/pages/UsersListPage/components/UserFilters.css.ts b/apps/admin/src/pages/UsersList/components/UserFilters.css.ts
similarity index 100%
rename from apps/admin/src/pages/UsersListPage/components/UserFilters.css.ts
rename to apps/admin/src/pages/UsersList/components/UserFilters.css.ts
diff --git a/apps/admin/src/pages/UsersListPage/components/UserFilters.tsx b/apps/admin/src/pages/UsersList/components/UserFilters.tsx
similarity index 100%
rename from apps/admin/src/pages/UsersListPage/components/UserFilters.tsx
rename to apps/admin/src/pages/UsersList/components/UserFilters.tsx
diff --git a/apps/admin/src/pages/UsersListPage/components/UsersTable.css.ts b/apps/admin/src/pages/UsersList/components/UsersTable.css.ts
similarity index 100%
rename from apps/admin/src/pages/UsersListPage/components/UsersTable.css.ts
rename to apps/admin/src/pages/UsersList/components/UsersTable.css.ts
diff --git a/apps/admin/src/pages/UsersListPage/components/UsersTable.tsx b/apps/admin/src/pages/UsersList/components/UsersTable.tsx
similarity index 100%
rename from apps/admin/src/pages/UsersListPage/components/UsersTable.tsx
rename to apps/admin/src/pages/UsersList/components/UsersTable.tsx
diff --git a/apps/admin/src/pages/UsersListPage/hooks/useUsersFilters.ts b/apps/admin/src/pages/UsersList/hooks/useUsersFilters.ts
similarity index 100%
rename from apps/admin/src/pages/UsersListPage/hooks/useUsersFilters.ts
rename to apps/admin/src/pages/UsersList/hooks/useUsersFilters.ts
diff --git a/apps/admin/src/router/router.tsx b/apps/admin/src/router/router.tsx
index aba15e5..05a96d2 100644
--- a/apps/admin/src/router/router.tsx
+++ b/apps/admin/src/router/router.tsx
@@ -1,31 +1,38 @@
import { createBrowserRouter, Navigate } from 'react-router';
import { ROUTES } from '@/constants/routes';
import { Layout } from '@/layout/Layout';
-import { LoginPage } from '@/pages/LoginPage/LoginPage';
-import { UserDetailPage } from '@/pages/UserDetailPage/UserDetailPage';
-import { UsersListPage } from '@/pages/UsersListPage/UsersListPage';
+import { GlobalError } from '@/pages/GlobalError/GlobalError';
+import { Login } from '@/pages/Login/Login';
+import { NotFound } from '@/pages/NotFound/NotFound';
+import { UserDetail } from '@/pages/UserDetail/UserDetail';
+import { UsersList } from '@/pages/UsersList/UsersList';
import { ProtectedRoute } from './ProtectedRoute';
export const router = createBrowserRouter([
{
- path: ROUTES.login,
- element:
,
- },
- {
- element:
,
+ errorElement:
,
children: [
{
- element:
,
+ path: ROUTES.login,
+ element:
,
+ },
+ {
+ element:
,
children: [
- { index: true, element:
},
- { path: ROUTES.users, element:
},
- { path: ROUTES.userDetail(':userId'), element:
},
+ {
+ element:
,
+ children: [
+ { index: true, element:
},
+ { path: ROUTES.users, element:
},
+ { path: ROUTES.userDetail(':userId'), element:
},
+ ],
+ },
],
},
+ {
+ path: '*',
+ element:
,
+ },
],
},
- {
- path: '*',
- element:
,
- },
]);
diff --git a/apps/admin/vercel.json b/apps/admin/vercel.json
new file mode 100644
index 0000000..7eb07db
--- /dev/null
+++ b/apps/admin/vercel.json
@@ -0,0 +1,4 @@
+{
+ "$schema": "https://openapi.vercel.sh/vercel.json",
+ "rewrites": [{ "source": "/(.*)", "destination": "/index.html" }]
+}