40 lines
1.1 KiB
TypeScript
40 lines
1.1 KiB
TypeScript
import { getServerSession } from "next-auth";
|
|
import { authOptions } from "@/lib/auth";
|
|
import { prisma } from "@/lib/prisma";
|
|
import { redirect } from "next/navigation";
|
|
import AdminOverview from "./overview";
|
|
|
|
export default async function AdminIndex() {
|
|
const session = await getServerSession(authOptions);
|
|
if (!session?.user) redirect("/login");
|
|
if (session.user.role !== "ADMIN") redirect("/member");
|
|
|
|
const [
|
|
totalMembers,
|
|
muayThaiMembers,
|
|
yogaMembers,
|
|
pendingCertificates,
|
|
totalMedia,
|
|
unreadMessagesCount,
|
|
] = await Promise.all([
|
|
prisma.user.count({ where: { role: "MEMBER" } }),
|
|
prisma.user.count({ where: { isMuayThai: true } }),
|
|
prisma.user.count({ where: { isYoga: true } }),
|
|
prisma.certificate.count({ where: { status: "PENDING" } }),
|
|
prisma.media.count(),
|
|
prisma.message.count(),
|
|
]);
|
|
|
|
return (
|
|
<AdminOverview
|
|
stats={{
|
|
totalMembers,
|
|
muayThaiMembers,
|
|
yogaMembers,
|
|
pendingCertificates,
|
|
totalMedia,
|
|
messages: unreadMessagesCount,
|
|
}}
|
|
/>
|
|
);
|
|
} |