import { auth } from "@/lib/auth"; import { prisma } from "@/lib/prisma"; import { addCategory, deleteCategory, getAllCategories, updateCategory, } from "@/lib/tutorials"; import { revalidatePath } from "next/cache"; export const dynamic = "force-dynamic"; const ALLOWED_DISCORD_ID = "281113457833672706"; const PRESET_COLORS = [ // Bleus & Cyans { name: "Cyan", value: "#06b6d4" }, { name: "Sky", value: "#0ea5e9" }, { name: "Blue", value: "#3b82f6" }, { name: "Indigo", value: "#6366f1" }, // Violets & Roses { name: "Violet", value: "#8b5cf6" }, { name: "Purple", value: "#a855f7" }, { name: "Fuchsia", value: "#d946ef" }, { name: "Pink", value: "#ec4899" }, { name: "Rose", value: "#f43f5e" }, // Chauds { name: "Red", value: "#ef4444" }, { name: "Orange", value: "#f97316" }, { name: "Amber", value: "#f59e0b" }, { name: "Yellow", value: "#eab308" }, // Verts { name: "Lime", value: "#84cc16" }, { name: "Green", value: "#22c55e" }, { name: "Emerald", value: "#10b981" }, { name: "Teal", value: "#14b8a6" }, // Neutres { name: "Slate", value: "#64748b" }, ]; async function handleAddCategory(formData: FormData) { "use server"; const session = await auth(); if ( !session?.user?.discordId || session.user.discordId !== ALLOWED_DISCORD_ID ) { throw new Error("Non autorisé"); } const name = formData.get("name")?.toString().trim(); const color = formData.get("color")?.toString() || "#06b6d4"; if (!name) { throw new Error("Le nom est obligatoire"); } await addCategory(name, color); revalidatePath("/dashboard/categories"); revalidatePath("/dashboard"); } async function handleDeleteCategory(formData: FormData) { "use server"; const session = await auth(); if ( !session?.user?.discordId || session.user.discordId !== ALLOWED_DISCORD_ID ) { throw new Error("Non autorisé"); } const id = formData.get("id")?.toString(); if (!id) throw new Error("ID manquant"); await deleteCategory(id); revalidatePath("/dashboard/categories"); revalidatePath("/dashboard"); } async function handleUpdateCategory(formData: FormData) { "use server"; const session = await auth(); if ( !session?.user?.discordId || session.user.discordId !== ALLOWED_DISCORD_ID ) { throw new Error("Non autorisé"); } const id = formData.get("id")?.toString(); const name = formData.get("name")?.toString().trim(); const color = formData.get("color")?.toString(); if (!id || !name) { throw new Error("ID et nom sont obligatoires"); } await updateCategory(id, { name, color }); revalidatePath("/dashboard/categories"); revalidatePath("/dashboard"); } export default async function CategoriesPage() { const categories = await getAllCategories(); // Compter les tutoriels par catégorie const counts = await prisma.tutorial.groupBy({ by: ["categoryId"], _count: true, }); const countMap = new Map(counts.map((c) => [c.categoryId, c._count])); return (
{categories.length} catégorie {categories.length > 1 ? "s" : ""}
Aucune catégorie pour l'instant