import type { RequestHandler } from './$types'; import { json, error, isHttpError } from '@sveltejs/kit'; import { z } from 'zod'; import { getDb } from '$lib/server/db'; import { parsePositiveIntParam, validateBody } from '$lib/server/api-helpers'; import { removeDomain, updateDomain, setDomainFavicon } from '$lib/server/domains/repository'; import { fetchAndStoreFavicon } from '$lib/server/domains/favicons'; import { IMAGE_DIR } from '$lib/server/paths'; const UpdateSchema = z.object({ domain: z.string().min(3).max(253).optional(), display_name: z.string().max(100).nullable().optional() }); export const PATCH: RequestHandler = async ({ params, request }) => { const id = parsePositiveIntParam(params.id, 'id'); const data = validateBody(await request.json().catch(() => null), UpdateSchema); try { const db = getDb(); const updated = updateDomain(db, id, data); if (!updated) error(404, { message: 'Not found' }); // Wenn updateDomain favicon_path genullt hat (Domain geƤndert), frisch laden. if (updated.favicon_path === null) { const path = await fetchAndStoreFavicon(updated.domain, IMAGE_DIR); if (path) { setDomainFavicon(db, updated.id, path); updated.favicon_path = path; } } return json(updated); } catch (e) { // HTTP-Errors aus error() durchreichen, sonst landet ein 404 als 409. if (isHttpError(e)) throw e; error(409, { message: (e as Error).message }); } }; export const DELETE: RequestHandler = async ({ params }) => { const id = parsePositiveIntParam(params.id, 'id'); removeDomain(getDb(), id); return json({ ok: true }); };