import { sql } from "drizzle-orm"; import { redirect } from "next/navigation"; import { db } from "@/lib/db"; import { canAccess, getAdminContext, PERMS } from "@/lib/permissions"; import { fetchEmulatorRankSummaries } from "@/lib/services/permission-ranks"; import { PermissionsList } from "./permissions-list"; export default async function PermissionsPage({ searchParams, }: { params: Promise<{ locale: string }>; searchParams?: Promise<{ from?: string }>; }) { const { session, permissions } = await getAdminContext(); if (!canAccess(permissions, PERMS.PERMISSIONS_MANAGE, session.user.rank)) { redirect("/admin"); } const sp = (await searchParams) ?? {}; const fromHousekeeping = sp.from === "housekeeping"; const ranks = await fetchEmulatorRankSummaries(db); // User counts per rank const [rawCounts] = (await db.execute( sql`SELECT \`rank\`, COUNT(*) as cnt FROM users GROUP BY \`rank\``, )) as unknown as [{ rank: number; cnt: number }[], unknown[]]; const countMap: Record = {}; for (const row of rawCounts) { countMap[Number(row.rank)] = Number(row.cnt); } const ranksWithCounts = ranks.map((rank) => ({ ...rank, userCount: countMap[rank.id] ?? 0, })); return ( ); }