import { notFound, redirect } from "next/navigation"; import { AdminBreadcrumb } from "@/components/admin/admin-breadcrumb"; import { canAccess, getAdminContext, PERMS } from "@/lib/permissions"; import { prisma } from "@/lib/prisma"; import { fetchEmulatorRankForEdit } from "@/lib/services/permission-ranks"; import { RankEditClient } from "./rank-edit-client"; export default async function RankEditPage({ params, }: { params: Promise<{ locale: string; id: string }>; }) { const { id: rawId } = await params; const { session, permissions } = await getAdminContext(); if ( !canAccess(permissions, PERMS.PERMISSIONS_MANAGE, session.user.rank) ) { redirect("/admin"); } const rankId = parseInt(rawId, 10); if (Number.isNaN(rankId)) notFound(); const rank = await fetchEmulatorRankForEdit(prisma, rankId); if (!rank) notFound(); // Fetch users with this rank (limit 200) const users = await prisma.user.findMany({ where: { rank: rankId }, select: { id: true, username: true, look: true }, orderBy: { username: "asc" }, take: 200, }); const totalUsers = await prisma.user.count({ where: { rank: rankId } }); // Fetch all CMS permissions const allCmsPermissions = await prisma.aclPermission.findMany({ orderBy: { slug: "asc" }, }); // Auto-create CMS role for rank >= 4 let cmsRole: { id: number; slug: string; title: string; permissionSlugs: string[]; } | null = null; if (rankId >= 4) { const role = await prisma.aclRole.upsert({ where: { slug: `rank_${rankId}` }, create: { slug: `rank_${rankId}`, title: rank.rank_name || `Rank ${rankId}`, }, update: {}, include: { rolePermissions: { include: { permission: true } }, }, }); cmsRole = { id: role.id, slug: role.slug, title: role.title, permissionSlugs: role.rolePermissions.map((rp) => rp.permission.slug), }; } return (
); }