import { prisma } from "@/lib/prisma"; import { getServerSession } from "next-auth/next"; import { authOptions } from "@/lib/auth-config"; import { redirect } from "next/navigation"; import { Table, TableHeader, TableBody, TableRow, TableHead, TableCell } from "@/components/ui/table"; import { Card, CardHeader, CardTitle, CardContent } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import InstanceActions from "./InstanceActions"; import Link from "next/link"; import { Button } from "@/components/ui/button"; export const dynamic = "force-dynamic"; export default async function InstancesPage() { const session = await getServerSession(authOptions); if (!session?.user) redirect("/login"); if (!session.user.establishmentId && session.user.role !== "superadmin") redirect("/dashboard"); const establishmentId = session.user.establishmentId; const instances = await prisma.instance.findMany({ where: establishmentId ? { node: { student: { class: { establishmentId } } } } : {}, include: { node: { include: { student: { include: { class: { include: { establishment: true } } } } } }, template: true }, orderBy: { createdAt: "desc" }, }); const enrichedInstances = instances.map((inst) => { const domain = inst.node.student?.class.establishment?.domain; return { ...inst, publicUrl: domain ? `https://${inst.id}.${domain}` : null, }; }); return (

Instances

ID Template Nœud Étudiant Port Statut URL publique Actions {enrichedInstances.map((inst: any) => ( {inst.id.slice(0, 8)}... {inst.template.name} {inst.node.id.slice(0, 8)}... {inst.node.student ? `${inst.node.student.firstName} ${inst.node.student.lastName}` : "-"} {inst.port} {inst.status} {inst.publicUrl ? {inst.publicUrl} : "-"} ))} {instances.length === 0 && ( Aucune instance )}
); }