import { NextRequest, NextResponse } from 'next/server' import { auth } from '@/lib/auth' import { PrismaClient } from '@prisma/client' import bcrypt from 'bcryptjs' const prisma = new PrismaClient() // GET /api/users - get all users (admin only) export async function GET() { try { const session = await auth() if (!session || (session.user.role !== 'ADMIN' && session.user.role !== 'SUPER_ADMIN')) { return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }) } const users = await prisma.user.findMany({ select: { id: true, email: true, name: true, role: true, isActive: true, createdAt: true, updatedAt: true, createdByUser: { select: { email: true, name: true } } }, orderBy: { createdAt: 'desc' } }) return NextResponse.json(users) } catch (error) { console.error('Error fetching users:', error) return NextResponse.json( { error: 'Fehler beim Abrufen der Benutzer' }, { status: 500 } ) } } // POST /api/users - create new user (admin only) export async function POST(request: NextRequest) { try { const session = await auth() if (!session || (session.user.role !== 'ADMIN' && session.user.role !== 'SUPER_ADMIN')) { return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }) } const data = await request.json() const { email, name, password, role } = data // Validation if (!email || !password || !role) { return NextResponse.json( { error: 'E-Mail, Passwort und Rolle sind erforderlich' }, { status: 400 } ) } if (password.length < 6) { return NextResponse.json( { error: 'Passwort muss mindestens 6 Zeichen lang sein' }, { status: 400 } ) } // Check if user already exists const existingUser = await prisma.user.findUnique({ where: { email } }) if (existingUser) { return NextResponse.json( { error: 'Benutzer mit dieser E-Mail existiert bereits' }, { status: 400 } ) } // Hash password const hashedPassword = await bcrypt.hash(password, 12) // Create user const newUser = await prisma.user.create({ data: { email, name: name || null, password: hashedPassword, role, createdBy: parseInt(session.user.id) }, select: { id: true, email: true, name: true, role: true, isActive: true, createdAt: true } }) return NextResponse.json(newUser, { status: 201 }) } catch (error) { console.error('Error creating user:', error) return NextResponse.json( { error: 'Fehler beim Erstellen des Benutzers' }, { status: 500 } ) } }