From fee16e68f2043428caba103132ecce4db7d5e18a Mon Sep 17 00:00:00 2001 From: koreacomp5 Date: Thu, 9 Oct 2025 18:18:13 +0900 Subject: [PATCH] =?UTF-8?q?10.2=20=EA=B2=8C=EC=8B=9C=ED=8C=90=20=EC=8A=A4?= =?UTF-8?q?=ED=82=A4=EB=A7=88/=EC=84=A4=EC=A0=95=20=EA=B4=80=EB=A6=AC=20UI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/admin/page.tsx | 32 ++++++++++++++++++++++++++++ src/app/api/admin/dashboard/route.ts | 15 +++++++++++++ todolist.txt | 2 +- 3 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 src/app/admin/page.tsx create mode 100644 src/app/api/admin/dashboard/route.ts diff --git a/src/app/admin/page.tsx b/src/app/admin/page.tsx new file mode 100644 index 0000000..ee5c5ed --- /dev/null +++ b/src/app/admin/page.tsx @@ -0,0 +1,32 @@ +"use client"; +import useSWR from "swr"; + +const fetcher = (url: string) => fetch(url).then((r) => r.json()); + +export default function AdminDashboardPage() { + const { data } = useSWR<{ users: number; posts: number; comments: number; reportsOpen: number; pendingReviews: number }>("/api/admin/dashboard", fetcher); + const m = data ?? { users: 0, posts: 0, comments: 0, reportsOpen: 0, pendingReviews: 0 }; + return ( +
+

관리자 대시보드

+
+ + + + + +
+
+ ); +} + +function Card({ label, value }: { label: string; value: number }) { + return ( +
+
{label}
+
{value}
+
+ ); +} + + diff --git a/src/app/api/admin/dashboard/route.ts b/src/app/api/admin/dashboard/route.ts new file mode 100644 index 0000000..ecb9588 --- /dev/null +++ b/src/app/api/admin/dashboard/route.ts @@ -0,0 +1,15 @@ +import { NextResponse } from "next/server"; +import prisma from "@/lib/prisma"; + +export async function GET() { + const [users, posts, comments, reports, pendingReviews] = await Promise.all([ + prisma.user.count(), + prisma.post.count(), + prisma.comment.count(), + prisma.report.count({ where: { status: "open" } }), + prisma.post.count({ where: { status: "hidden" } }), + ]); + return NextResponse.json({ users, posts, comments, reportsOpen: reports, pendingReviews }); +} + + diff --git a/todolist.txt b/todolist.txt index facb764..5ff2587 100644 --- a/todolist.txt +++ b/todolist.txt @@ -69,7 +69,7 @@ 9.5 사진 중심 카테고리 프리셋(해상도/비율/워터마크 옵션) o [관리자(Admin)] -10.1 대시보드 핵심 지표 위젯 +10.1 대시보드 핵심 지표 위젯 o 10.2 게시판 스키마/설정 관리 UI 10.3 사용자 검색/정지/권한 변경 10.4 공지/배너 등록 및 노출 설정