src/app/api/admin/arborescence/route.ts
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.
Concepts détectés — comprends la théorie
ORM Prisma
5 occurrencesCe fichier accède à la base de données via Prisma. Prisma est l'ORM utilisé côté backend pour les requêtes typées sur PostgreSQL.
Voir l'article général
Route API Next.js
2 occurrencesCe fichier est une route API Next.js (App Router). Voir le contrat API complet pour les conventions de réponse et d'auth.
Voir l'article général
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),
})),
},
});
}
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),
})),
},
});
}