diff --git a/app/(app)/admin/page.tsx b/app/(app)/admin/page.tsx new file mode 100644 index 0000000..b2f653d --- /dev/null +++ b/app/(app)/admin/page.tsx @@ -0,0 +1,42 @@ +import { redirect } from "next/navigation"; + +import { auth } from "@/auth"; +import { prisma } from "@/lib/db"; +import { Role } from "@/lib/generated/prisma/enums"; +import { AdminUserTable, type AdminUserRow } from "@/components/admin/admin-user-table"; + +export default async function AdminPage() { + const session = await auth(); + if (!session?.user) redirect("/login"); + if (session.user.role !== Role.ADMIN) redirect("/"); + + const users = await prisma.user.findMany({ + orderBy: { createdAt: "asc" }, + select: { id: true, name: true, email: true, role: true, createdAt: true }, + }); + + const rows: AdminUserRow[] = users.map((user) => ({ + id: user.id, + name: user.name, + email: user.email, + role: user.role, + createdAtLabel: user.createdAt.toLocaleDateString(undefined, { + year: "numeric", + month: "short", + day: "numeric", + }), + })); + + return ( +
+ Everyone with an account on this site. Click a role to change it. +
+| Name | +Role | +Joined | ++ Actions + | +|
|---|---|---|---|---|
| {user.name || "—"} | +{user.email} | +
+ |
+ {user.createdAtLabel} | +
+ |
+