Repository Public
1// Auteur : Simon-Pierre Boucher — contact@spboucher.ai2// Coquille du panel /admin — garde serveur (session ka_admin obligatoire),3// navigation latérale encre, badge de non-lus. Tout ce qui est ici est4// invisible sans session : la garde redirige AVANT tout rendu.5import { redirect } from "next/navigation";6import { getAdminSession } from "@/lib/comms/admin-auth";7import { unreadCount } from "@/lib/comms/queries";8import { unreadMailCount } from "@/lib/comms/mail";9import AdminNav from "./AdminNav";1011export const metadata = {12 robots: { index: false, follow: false },13};1415export default async function AdminLayout({16 children,17}: Readonly<{ children: React.ReactNode }>) {18 const session = await getAdminSession();19 if (!session) redirect("/admin/connexion");20 const unread = unreadCount(session);21 const mailUnread = unreadMailCount(session.id, session.roles.includes("super_admin"));22 return (23 <div data-admin-root className="flex min-h-[100dvh] flex-col lg:flex-row">24 <AdminNav25 displayName={session.displayName}26 username={session.username}27 roles={session.roles}28 initialUnread={unread}29 initialMail={mailUnread}30 />31 <main className="min-w-0 flex-1 px-4 py-6 sm:px-8 lg:py-8">{children}</main>32 </div>33 );34}35