import { getServerSession } from "next-auth"; import { redirect } from "next/navigation"; import AdminDashboard from "@/components/admin/admin-dashboard"; import Footer from "@/components/footer"; import Navbar from "@/components/navbar"; import { authOptions } from "@/lib/auth"; import { db } from "@/lib/db"; export const dynamic = "force-dynamic"; type AdminWithUser = { id: string; discordId: string; user: { name?: string | null; email?: string | null; discordUsername?: string | null; } | null; }; type GradeRecord = { id: string; name: string; price: number; description: string; }; type EventRecord = { id: string; title: string; description: string; eventDate: Date; }; export default async function AdminPage() { const session = await getServerSession(authOptions); const discordId = session?.user?.discordId; if (!discordId) { redirect("/auth/signin"); } const envAdmin = process.env.ADMIN_DISCORD_ID; const adminRecord = envAdmin && envAdmin === discordId ? null : await db.admin.findUnique({ where: { discordId } }); if (!adminRecord && (!envAdmin || envAdmin !== discordId)) { redirect("/"); } const [grades, events, admins] = await Promise.all([ db.grade.findMany({ orderBy: { price: "asc" } }), db.event.findMany({ orderBy: { eventDate: "asc" } }), db.admin.findMany({ orderBy: { createdAt: "desc" }, include: { user: true }, }), ] as const); const adminUsers = admins as AdminWithUser[]; const gradeRecords = grades as GradeRecord[]; const eventRecords = events as EventRecord[]; return (

Admin panel

Control center

Manage admins, grades, and events for BinouzUHC.

({ id: admin.id, discordId: admin.discordId, user: admin.user ? { name: admin.user.name, email: admin.user.email, discordUsername: admin.user.discordUsername, } : null, }))} initialGrades={gradeRecords} initialEvents={eventRecords.map((event) => ({ id: event.id, title: event.title, description: event.description, eventDate: event.eventDate.toISOString(), }))} />
); }