import { auth } from "@/auth"; import { db } from "@/lib/db"; import { hasPermission } from "@/lib/permissions"; import { redirect } from "next/navigation"; import { formatDate } from "@/lib/utils"; import { RequestActions } from "./request-actions"; import type { Metadata } from "next"; export const metadata: Metadata = { title: "SuperUser Requests" }; const STATUS_STYLES: Record = { PENDING: "bg-warning-50 text-warning-700", APPROVED: "bg-success-50 text-success-700", DENIED: "bg-danger-50 text-danger-700", }; const ROLE_LABELS: Record = { TECHNICAL: "Technical", MANNING: "Manning", ACCOUNTS: "Accounts", MANAGER: "Manager", SUPERUSER: "SuperUser", AUDITOR: "Auditor", ADMIN: "Admin", }; export default async function SuperUserRequestsPage() { const session = await auth(); if (!session?.user) redirect("/login"); if (!hasPermission(session.user.role, "manage_users")) redirect("/dashboard"); const requests = await db.superUserRequest.findMany({ include: { user: { select: { id: true, name: true, email: true, employeeId: true, role: true } }, resolvedBy: { select: { name: true } }, }, orderBy: [{ status: "asc" }, { createdAt: "desc" }], }); const pending = requests.filter((r) => r.status === "PENDING"); const resolved = requests.filter((r) => r.status !== "PENDING"); return (

SuperUser Access Requests

{pending.length} pending · {resolved.length} resolved

{requests.length === 0 && (
No SuperUser access requests.
)} {pending.length > 0 && (

Pending

{pending.map((req) => (
{req.user.name} {req.user.employeeId} {ROLE_LABELS[req.user.role] ?? req.user.role}

{req.user.email}

{req.reason && (

“{req.reason}”

)}

Requested {formatDate(req.createdAt)}

))}
)} {resolved.length > 0 && (

Resolved

{resolved.map((req) => ( ))}
User Current Role Status Resolved By Resolved
{req.user.name}
{req.user.email}
{ROLE_LABELS[req.user.role] ?? req.user.role} {req.status.charAt(0) + req.status.slice(1).toLowerCase()} {req.resolvedBy?.name ?? "—"} {req.resolvedAt ? formatDate(req.resolvedAt) : "—"}
)}
); }