src/app/api/superadmin/categories/route.ts

route·app·2.5 KB · 63 lignes· Voir l'itinéraire
Annotation non disponible

Lance npm run annotate (nécessite ANTHROPIC_API_KEY dans .env.local) pour générer une annotation française par Claude Haiku 4.5.

4 exports

GETPOSTPUTDELETE

Code source· typescript

import { NextRequest, NextResponse } from "next/server";
import { prisma } from "@/lib/prisma/client";
import { getSession } from "@/lib/auth/session";

async function checkAuth() {
  const session = await getSession();
  if (!session || session.role !== "SUPER_ADMIN") return false;
  return true;
}

async function getCategories() {
  return prisma.categorieWari.findMany({
    where: { parentId: null },
    include: {
      enfants: { orderBy: { nom: "asc" } },
      _count: { select: { tenantsWari: true } },
    },
    orderBy: { nom: "asc" },
  });
}

export async function GET() {
  if (!await checkAuth()) return NextResponse.json({ error: "Non autorisé" }, { status: 401 });
  const cats = await getCategories();
  return NextResponse.json({
    categories: cats.map(c => ({
      id: c.id, nom: c.nom, slug: c.slug, couleur: c.couleur, emoji: c.emoji,
      nbVitrines: c._count.tenantsWari,
      enfants: c.enfants.map(e => ({ id: e.id, nom: e.nom, slug: e.slug, couleur: e.couleur, emoji: e.emoji })),
    }))
  });
}

export async function POST(req: NextRequest) {
  if (!await checkAuth()) return NextResponse.json({ error: "Non autorisé" }, { status: 401 });
  const { nom, slug, emoji, couleur, parentId } = await req.json();
  if (!nom || !slug) return NextResponse.json({ error: "Nom et slug requis" }, { status: 400 });
  const exists = await prisma.categorieWari.findUnique({ where: { slug } });
  if (exists) return NextResponse.json({ error: "Ce slug existe déjà" }, { status: 400 });
  const cat = await prisma.categorieWari.create({
    data: { nom, slug, emoji: emoji || null, couleur: couleur || null, parentId: parentId || null },
  });
  return NextResponse.json({ success: true, cat });
}

export async function PUT(req: NextRequest) {
  if (!await checkAuth()) return NextResponse.json({ error: "Non autorisé" }, { status: 401 });
  const { id, nom, slug, emoji, couleur } = await req.json();
  if (!id || !nom || !slug) return NextResponse.json({ error: "Données manquantes" }, { status: 400 });
  const cat = await prisma.categorieWari.update({
    where: { id },
    data: { nom, slug, emoji: emoji || null, couleur: couleur || null },
  });
  return NextResponse.json({ success: true, cat });
}

export async function DELETE(req: NextRequest) {
  if (!await checkAuth()) return NextResponse.json({ error: "Non autorisé" }, { status: 401 });
  const { id } = await req.json();
  await prisma.categorieWari.delete({ where: { id } });
  return NextResponse.json({ success: true });
}