import { NextRequest, NextResponse } from 'next/server' import { auth } from '@/lib/auth' import { PrismaClient } from '@prisma/client' import bcrypt from 'bcryptjs' const prisma = new PrismaClient() // PUT /api/users/[id] - update user export async function PUT( request: NextRequest, { params }: { params: Promise<{ id: string }> } ) { try { const session = await auth() if (!session || (session.user.role !== 'ADMIN' && session.user.role !== 'SUPER_ADMIN')) { return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }) } const { id: rawId } = await params const id = parseInt(rawId) if (isNaN(id)) { return NextResponse.json({ error: 'Ungültige ID' }, { status: 400 }) } const data = await request.json() const { email, name, password, role, isActive } = data // Check if user exists const existingUser = await prisma.user.findUnique({ where: { id } }) if (!existingUser) { return NextResponse.json( { error: 'Benutzer nicht gefunden' }, { status: 404 } ) } // Check if email is already taken by another user if (email && email !== existingUser.email) { const emailExists = await prisma.user.findUnique({ where: { email } }) if (emailExists) { return NextResponse.json( { error: 'E-Mail wird bereits verwendet' }, { status: 400 } ) } } // Prepare update data const updateData: any = {} if (email) updateData.email = email if (name !== undefined) updateData.name = name || null if (role) updateData.role = role if (isActive !== undefined) updateData.isActive = isActive // Hash new password if provided if (password) { if (password.length < 6) { return NextResponse.json( { error: 'Passwort muss mindestens 6 Zeichen lang sein' }, { status: 400 } ) } updateData.password = await bcrypt.hash(password, 12) } // Update user const updatedUser = await prisma.user.update({ where: { id }, data: updateData, select: { id: true, email: true, name: true, role: true, isActive: true, createdAt: true, updatedAt: true } }) return NextResponse.json(updatedUser) } catch (error) { console.error('Error updating user:', error) return NextResponse.json( { error: 'Fehler beim Aktualisieren des Benutzers' }, { status: 500 } ) } } // DELETE /api/users/[id] - delete user export async function DELETE( request: NextRequest, { params }: { params: Promise<{ id: string }> } ) { try { const session = await auth() if (!session || (session.user.role !== 'ADMIN' && session.user.role !== 'SUPER_ADMIN')) { return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }) } const { id: rawId } = await params const id = parseInt(rawId) if (isNaN(id)) { return NextResponse.json({ error: 'Ungültige ID' }, { status: 400 }) } // Prevent self-deletion if (id === parseInt(session.user.id)) { return NextResponse.json( { error: 'Sie können sich nicht selbst löschen' }, { status: 400 } ) } // Check if user exists const existingUser = await prisma.user.findUnique({ where: { id } }) if (!existingUser) { return NextResponse.json( { error: 'Benutzer nicht gefunden' }, { status: 404 } ) } // Delete user await prisma.user.delete({ where: { id } }) return NextResponse.json({ message: 'Benutzer erfolgreich gelöscht' }) } catch (error) { console.error('Error deleting user:', error) return NextResponse.json( { error: 'Fehler beim Löschen des Benutzers' }, { status: 500 } ) } }