import { db } from '$lib/server/db'; import { fail, redirect, type Actions, type ServerLoad } from '@sveltejs/kit'; import { nanoid } from 'nanoid'; export const load: ServerLoad = async ({ locals: { guard }, params }) => { guard.requiresAdmin().orRedirects(); const group = db.data.groups.find((g) => g.id === params.slug); if (!group && params.slug !== 'new') { redirect(302, '/dashboard/groups'); } return { devices: db.data.devices, group, }; }; export const actions: Actions = { update: async ({ request, locals: { guard }, params }) => { if (guard.requiresAdmin().isFailed()) { return fail(403); } const form = await request.formData(); const name = form.get('name')?.toString(); const devices = form.getAll('devices').map((d) => d.toString()); if (!name) { // TODO better validation return { error: 'MISSING_FIELDS', }; } if (params.slug === 'new') { await db.update(({ groups }) => { groups.push({ id: nanoid(), name, devices, }); }); } else { await db.update(({ groups }) => { let group = groups.find((g) => g.id === params.slug); if (!group) { return; } group.name = name; group.devices = devices; }); } redirect(302, '/dashboard/groups'); }, delete: async ({ locals: { guard }, params }) => { if (guard.requiresAdmin().isFailed()) { return fail(403); } db.data.groups = db.data.groups.filter((g) => g.id !== params.slug); db.data.users.forEach((u) => { u.groups = u.groups.filter((g) => g !== params.slug); }); db.write(); redirect(302, '/dashboard/groups'); }, };