import { error, fail, redirect } from '@sveltejs/kit'; import { createApiClient } from '$lib/api.server'; import { getErrorMessage } from '$lib/errors'; export async function load({ params, fetch }) { const { id } = params; const api = createApiClient(fetch); const [personResult, docsResult] = await Promise.all([ api.GET('/api/persons/{id}', { params: { path: { id } } }), api.GET('/api/persons/{id}/documents', { params: { path: { id } } }) ]); if (!personResult.response.ok) { const code = (personResult.error as unknown as { code?: string })?.code; throw error(personResult.response.status, getErrorMessage(code)); } return { person: personResult.data!, documents: docsResult.data ?? [] }; } export const actions = { update: async ({ request, params, fetch }) => { const formData = await request.formData(); const firstName = formData.get('firstName')?.toString().trim(); const lastName = formData.get('lastName')?.toString().trim(); const alias = formData.get('alias')?.toString().trim() || undefined; const notes = formData.get('notes')?.toString().trim() || undefined; if (!firstName || !lastName) { return fail(400, { updateError: 'Vor- und Nachname sind Pflichtfelder.' }); } const api = createApiClient(fetch); const { error: apiError } = await api.PUT('/api/persons/{id}', { params: { path: { id: params.id } }, body: { firstName, lastName, ...(alias ? { alias } : {}), ...(notes ? { notes } : {}) } }); if (apiError) { return fail(400, { updateError: 'Speichern fehlgeschlagen.' }); } return { updated: true }; }, merge: async ({ request, params, fetch }) => { const formData = await request.formData(); const targetPersonId = formData.get('targetPersonId')?.toString(); if (!targetPersonId) { return fail(400, { mergeError: 'Bitte eine Zielperson auswählen.' }); } const api = createApiClient(fetch); const { error: apiError } = await api.POST('/api/persons/{id}/merge', { params: { path: { id: params.id } }, body: { targetPersonId } }); if (apiError) { return fail(400, { mergeError: 'Zusammenführen fehlgeschlagen.' }); } throw redirect(303, `/persons/${targetPersonId}`); } };