100 lines
2.6 KiB
TypeScript
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 },
|
|
);
|
|
}
|
|
}
|