From dd3440009ae75ecc00e10e48b014ef23bb446964 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sun, 4 Aug 2024 17:06:23 +0900 Subject: feat(frontend): remove admin pages --- frontend/app/.server/auth.ts | 10 --- frontend/app/routes/admin.dashboard.tsx | 29 --------- frontend/app/routes/admin.games.tsx | 35 ---------- frontend/app/routes/admin.games_.$gameId.tsx | 95 ---------------------------- frontend/app/routes/admin.tsx | 8 --- frontend/app/routes/admin.users.tsx | 34 ---------- 6 files changed, 211 deletions(-) delete mode 100644 frontend/app/routes/admin.dashboard.tsx delete mode 100644 frontend/app/routes/admin.games.tsx delete mode 100644 frontend/app/routes/admin.games_.$gameId.tsx delete mode 100644 frontend/app/routes/admin.tsx delete mode 100644 frontend/app/routes/admin.users.tsx (limited to 'frontend') diff --git a/frontend/app/.server/auth.ts b/frontend/app/.server/auth.ts index a4811e2..d5ffe0f 100644 --- a/frontend/app/.server/auth.ts +++ b/frontend/app/.server/auth.ts @@ -40,16 +40,6 @@ export async function ensureUserLoggedIn( return { user, token }; } -export async function ensureAdminUserLoggedIn( - request: Request | Session, -): Promise<{ user: User; token: string }> { - const { user, token } = await ensureUserLoggedIn(request); - if (!user.is_admin) { - throw new Error("Forbidden"); - } - return { user, token }; -} - export async function ensureUserNotLoggedIn( request: Request | Session, ): Promise { diff --git a/frontend/app/routes/admin.dashboard.tsx b/frontend/app/routes/admin.dashboard.tsx deleted file mode 100644 index 8a0c9a8..0000000 --- a/frontend/app/routes/admin.dashboard.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import type { LoaderFunctionArgs, MetaFunction } from "@remix-run/node"; -import { Form, Link } from "@remix-run/react"; -import { ensureAdminUserLoggedIn } from "../.server/auth"; - -export const meta: MetaFunction = () => [ - { title: "[Admin] Dashboard | iOSDC Japan 2024 Albatross.swift" }, -]; - -export async function loader({ request }: LoaderFunctionArgs) { - await ensureAdminUserLoggedIn(request); - return null; -} - -export default function AdminDashboard() { - return ( -
-

[Admin] Dashboard

-

- Users -

-

- Games -

-
- -
-
- ); -} diff --git a/frontend/app/routes/admin.games.tsx b/frontend/app/routes/admin.games.tsx deleted file mode 100644 index f9d15f7..0000000 --- a/frontend/app/routes/admin.games.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import type { LoaderFunctionArgs, MetaFunction } from "@remix-run/node"; -import { Link, useLoaderData } from "@remix-run/react"; -import { adminApiGetGames } from "../.server/api/client"; -import { ensureAdminUserLoggedIn } from "../.server/auth"; - -export const meta: MetaFunction = () => [ - { title: "[Admin] Games | iOSDC Japan 2024 Albatross.swift" }, -]; - -export async function loader({ request }: LoaderFunctionArgs) { - const { token } = await ensureAdminUserLoggedIn(request); - const { games } = await adminApiGetGames(token); - return { games }; -} - -export default function AdminGames() { - const { games } = useLoaderData()!; - - return ( -
-
-

[Admin] Games

-
    - {games.map((game) => ( -
  • - - {game.display_name} (id={game.game_id}) - -
  • - ))} -
-
-
- ); -} diff --git a/frontend/app/routes/admin.games_.$gameId.tsx b/frontend/app/routes/admin.games_.$gameId.tsx deleted file mode 100644 index c4d75c1..0000000 --- a/frontend/app/routes/admin.games_.$gameId.tsx +++ /dev/null @@ -1,95 +0,0 @@ -import type { - ActionFunctionArgs, - LoaderFunctionArgs, - MetaFunction, -} from "@remix-run/node"; -import { Form, useLoaderData } from "@remix-run/react"; -import { adminApiGetGame, adminApiPutGame } from "../.server/api/client"; -import { ensureAdminUserLoggedIn } from "../.server/auth"; - -export const meta: MetaFunction = ({ data }) => [ - { - title: data - ? `[Admin] Game Edit ${data.game.display_name} | iOSDC Japan 2024 Albatross.swift` - : "[Admin] Game Edit | iOSDC Japan 2024 Albatross.swift", - }, -]; - -export async function loader({ request, params }: LoaderFunctionArgs) { - const { token } = await ensureAdminUserLoggedIn(request); - const { gameId } = params; - const { game } = await adminApiGetGame(token, Number(gameId)); - return { game }; -} - -export async function action({ request, params }: ActionFunctionArgs) { - const { token } = await ensureAdminUserLoggedIn(request); - const { gameId } = params; - - const formData = await request.formData(); - const action = formData.get("action"); - - const nextState = - action === "open" - ? "waiting_entries" - : action === "start" - ? "prepare" - : null; - if (!nextState) { - throw new Error("Invalid action"); - } - - await adminApiPutGame(token, Number(gameId), { - state: nextState, - }); - return null; -} - -export default function AdminGameEdit() { - const { game } = useLoaderData()!; - - return ( -
-
-

[Admin] Game Edit {game.display_name}

-
    -
  • ID: {game.game_id}
  • -
  • State: {game.state}
  • -
  • Display Name: {game.display_name}
  • -
  • Duration Seconds: {game.duration_seconds}
  • -
  • - Started At:{" "} - {game.started_at - ? new Date(game.started_at * 1000).toString() - : "-"} -
  • -
  • Problem ID: {game.problem ? game.problem.problem_id : "-"}
  • -
-
-
-
- -
-
- -
-
-
-
-
- ); -} diff --git a/frontend/app/routes/admin.tsx b/frontend/app/routes/admin.tsx deleted file mode 100644 index ceef37e..0000000 --- a/frontend/app/routes/admin.tsx +++ /dev/null @@ -1,8 +0,0 @@ -import type { LinksFunction } from "@remix-run/node"; -import normalizeCss from "sakura.css/css/normalize.css?url"; -import sakuraCss from "sakura.css/css/sakura.css?url"; - -export const links: LinksFunction = () => [ - { rel: "stylesheet", href: normalizeCss }, - { rel: "stylesheet", href: sakuraCss }, -]; diff --git a/frontend/app/routes/admin.users.tsx b/frontend/app/routes/admin.users.tsx deleted file mode 100644 index c403285..0000000 --- a/frontend/app/routes/admin.users.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import type { LoaderFunctionArgs, MetaFunction } from "@remix-run/node"; -import { useLoaderData } from "@remix-run/react"; -import { adminApiGetUsers } from "../.server/api/client"; -import { ensureAdminUserLoggedIn } from "../.server/auth"; - -export const meta: MetaFunction = () => [ - { title: "[Admin] Users | iOSDC Japan 2024 Albatross.swift" }, -]; - -export async function loader({ request }: LoaderFunctionArgs) { - const { token } = await ensureAdminUserLoggedIn(request); - const { users } = await adminApiGetUsers(token); - return { users }; -} - -export default function AdminUsers() { - const { users } = useLoaderData()!; - - return ( -
-
-

[Admin] Users

-
    - {users.map((user) => ( -
  • - {user.display_name} (id={user.user_id} username={user.username}) - {user.is_admin && admin} -
  • - ))} -
-
-
- ); -} -- cgit v1.2.3-70-g09d2