Files
aystone-manager/app/dashboard/projets/page.tsx
T

42 lines
1.1 KiB
TypeScript
Raw Normal View History

2025-07-29 05:15:33 +02:00
import { auth } from "@/auth";
import { prisma } from "@/lib/prisma";
import { redirect } from "next/navigation";
import { z } from "zod";
import UserProjectsTable from "./UserProjectsTable";
// Définition stricte du schéma
const ProjectSchema = z.object({
id: z.string(),
joueur: z.string(),
projet: z.string(),
description: z.string(),
coords: z.string().nullable(),
tags: z.string().array(),
etat: z.enum(["En cours", "Terminé", "Pause"]),
monde: z.enum(["Overworld", "Nether", "End"]),
createdAt: z.date(),
});
export const dynamic = "force-dynamic";
export default async function UserProjectsPage() {
const session = await auth();
if (!session) redirect("/");
const user = await prisma.user.findUnique({
where: { email: session.user.email! },
});
const joueur = user?.mcName ?? session.user.name!;
const projectsRaw = await prisma.project.findMany({
where: { joueur },
orderBy: { createdAt: "desc" },
});
// ✅ Valide les projets pour forcer le bon typage
const projects = projectsRaw.map((p) => ProjectSchema.parse(p));
return <UserProjectsTable projects={projects} />;
}