src/app/api/admin/arborescence/route.ts

route·app·1.7 KB · 54 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.

1 export

GET

Code source· typescript

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

export async function GET() {
  const session = await getSession();
  if (!session || session.role !== "TENANT_ADMIN" || !session.tenantId) {
    return NextResponse.json({ error: "Non autorisé" }, { status: 401 });
  }

  const [categories, produits, categoriesServices, prestations] = await Promise.all([
    prisma.categorie.findMany({
      where: { tenantId: session.tenantId },
      include: { _count: { select: { produits: true } } },
      orderBy: { ordre: "asc" },
    }),
    prisma.produit.findMany({
      where: { tenantId: session.tenantId },
      select: { id: true, nom: true, categories: { select: { categorieId: true } } },
      orderBy: { nom: "asc" },
    }),
    prisma.categorieService.findMany({
      where: { tenantId: session.tenantId },
      orderBy: { ordre: "asc" },
    }),
    prisma.prestation.findMany({
      where: { tenantId: session.tenantId },
      select: { id: true, nom: true, categories: { select: { categorieId: true } } },
      orderBy: { nom: "asc" },
    }),
  ]);

  return NextResponse.json({
    produits: {
      categories: categories.map(c => ({
        id: c.id, nom: c.nom, parentId: c.parentId,
      })),
      items: produits.map(p => ({
        id: p.id, nom: p.nom,
        categorieIds: p.categories.map(c => c.categorieId),
      })),
    },
    prestations: {
      categories: categoriesServices.map(c => ({
        id: c.id, nom: c.nom, parentId: c.parentId,
      })),
      items: prestations.map(p => ({
        id: p.id, nom: p.nom,
        categorieIds: p.categories.map(c => c.categorieId),
      })),
    },
  });
}