import { NextRequest, NextResponse } from 'next/server'; import { prisma } from '@/lib/prisma'; import { getCurrentUser } from '@/lib/auth'; // GET - Liste tous les rôles avec leurs permissions export async function GET(request: NextRequest) { try { const user = await getCurrentUser(); if (!user) { return NextResponse.json({ error: 'Non autorisé' }, { status: 401 }); } const roles = await prisma.role.findMany({ include: { permissions: { include: { permission: true, }, }, _count: { select: { users: true, }, }, }, orderBy: { name: 'asc', }, }); return NextResponse.json(roles); } catch (error) { console.error('Erreur lors de la récupération des rôles:', error); return NextResponse.json( { error: 'Erreur serveur' }, { status: 500 } ); } } // POST - Créer un nouveau rôle export async function POST(request: NextRequest) { try { const user = await getCurrentUser(); if (!user) { return NextResponse.json({ error: 'Non autorisé' }, { status: 401 }); } const body = await request.json(); const { name, description, permissionIds } = body; if (!name) { return NextResponse.json( { error: 'Le nom du rôle est requis' }, { status: 400 } ); } // Vérifier si le rôle existe déjà const existing = await prisma.role.findUnique({ where: { name }, }); if (existing) { return NextResponse.json( { error: 'Ce rôle existe déjà' }, { status: 400 } ); } // Créer le rôle avec ses permissions const role = await prisma.role.create({ data: { name, description: description || null, permissions: permissionIds && permissionIds.length > 0 ? { create: permissionIds.map((permissionId: string) => ({ permissionId, })), } : undefined, }, include: { permissions: { include: { permission: true, }, }, _count: { select: { users: true, }, }, }, }); return NextResponse.json(role, { status: 201 }); } catch (error) { console.error('Erreur lors de la création du rôle:', error); return NextResponse.json( { error: 'Erreur serveur' }, { status: 500 } ); } }