import { notFound, redirect } from "next/navigation"; import { canAccess, getAdminContext, PERMS } from "@/lib/permissions"; import { prisma } from "@/lib/prisma"; import { CfhDetail } from "./cfh-detail"; export default async function CfhDetailPage({ params }: { params: Promise<{ id: string }> }) { const { session, permissions } = await getAdminContext(); if (!canAccess(permissions, PERMS.MODERATION_VIEW, session.user.rank)) redirect("/admin"); const { id } = await params; const ticketId = Number(id); if (Number.isNaN(ticketId)) notFound(); const ticket = await prisma.supportTickets.findUnique({ where: { id: ticketId } }); if (!ticket) notFound(); const canEdit = canAccess(permissions, PERMS.MODERATION_EDIT, session.user.rank); // Fetch sender, reported, mod info const userIds = [ticket.senderId, ticket.reportedId, ticket.modId].filter(Boolean); const users = userIds.length > 0 ? await prisma.user.findMany({ where: { id: { in: userIds } }, select: { id: true, username: true, look: true, rank: true, online: true, ipRegister: true, mail: true, }, }) : []; const userMap = Object.fromEntries(users.map((u) => [u.id, u])); // Get ban/mute history for reported user const reportedId = ticket.reportedId; const [banCount, recentBans] = reportedId ? await Promise.all([ prisma.ban.count({ where: { userId: reportedId } }), prisma.ban.findMany({ where: { userId: reportedId }, orderBy: { id: "desc" }, take: 5, }), ]) : [0, []]; return ( ({ id: b.id, reason: b.banReason, type: b.type, staff: `Staff #${b.userStaffId}`, timestamp: b.timestamp, })), }} canEdit={canEdit} currentUserId={session.user.id} /> ); }