2025-11-26 15:00:05 +01:00

100 lines
2.6 KiB
TypeScript

import { NextResponse } from 'next/server';
import { prisma } from '@/lib/prisma';
export async function POST(req: Request) {
try {
const body = await req.json();
// 🔹 BULK: { names: string[], canEditDevices?: boolean }
if (Array.isArray(body?.names)) {
const rawNames = body.names as unknown[];
const trimmedNames = rawNames
.filter((n): n is string => typeof n === 'string')
.map((n) => n.trim())
.filter((n) => n.length > 0);
const uniqueNames = Array.from(new Set(trimmedNames));
const defaultCanEditDevices = Boolean(body.canEditDevices ?? false);
const groups = [];
for (const name of uniqueNames) {
const trimmedName = name.trim();
const isTEG = trimmedName.toUpperCase() === 'TEG';
// 👇 TEG immer true, sonst Default
const canEdit = isTEG ? true : defaultCanEditDevices;
const group = await prisma.userGroup.upsert({
where: { name: trimmedName },
update: {
canEditDevices: canEdit,
},
create: {
name: trimmedName,
canEditDevices: canEdit,
},
});
groups.push({
id: group.id,
name: group.name,
canEditDevices: group.canEditDevices,
});
}
return NextResponse.json({ groups }, { status: 200 });
}
// 🔹 SINGLE: { name: string, canEditDevices?: boolean }
const { name, canEditDevices } = body;
if (!name || typeof name !== 'string') {
return NextResponse.json(
{ error: 'Gruppenname ist erforderlich.' },
{ status: 400 },
);
}
const trimmed = name.trim();
if (!trimmed) {
return NextResponse.json(
{ error: 'Gruppenname darf nicht leer sein.' },
{ status: 400 },
);
}
const isTEG = trimmed.toUpperCase() === 'TEG';
// 👇 TEG immer true, sonst Flag aus Request (oder false)
const flag = isTEG ? true : Boolean(canEditDevices ?? false);
const group = await prisma.userGroup.upsert({
where: { name: trimmed },
update: {
canEditDevices: flag,
},
create: {
name: trimmed,
canEditDevices: flag,
},
});
return NextResponse.json(
{
id: group.id,
name: group.name,
canEditDevices: group.canEditDevices,
},
{ status: 200 },
);
} catch (err) {
console.error('[POST /api/user-groups]', err);
return NextResponse.json(
{ error: 'Interner Serverfehler beim Anlegen der User-Gruppe.' },
{ status: 500 },
);
}
}