import { error, fail, redirect } from '@sveltejs/kit'; import { modeleSchema } from '$lib/schemas'; import { erreursZod, modeleDepuisFormulaire } from '$lib/server/formulaires'; import { lireAlertes } from '$lib/server/alertes'; import { ecrireRegistre, lireRegistre } from '$lib/server/stockage'; import type { Actions, PageServerLoad } from './$types'; export const load: PageServerLoad = async ({ params, url }) => { const registre = await lireRegistre(); const modele = registre.find((m) => m.id === params.id); if (!modele) error(404, 'Modèle introuvable'); // Pré-remplissage depuis une alerte (action « Mettre à jour la fiche » de l'inbox) : // fusionne les sources, préfixe les notes du résumé — sans toucher aux champs vérifiés. const alerteId = url.searchParams.get('depuis_alerte'); let brut: Record | null = null; if (alerteId) { const alertes = await lireAlertes(); const alerte = alertes.find((a) => a.id === alerteId); if (alerte) { brut = { ...modele, sources: [...new Set([...modele.sources, ...alerte.sources])], notes: `${alerte.resume}\n\n${modele.notes ?? ''}`.trim() }; } } return { modele, brut }; }; export const actions: Actions = { enregistrer: async ({ request, params }) => { const data = await request.formData(); const brut = modeleDepuisFormulaire(data); // L'identifiant d'un modèle existant n'est pas modifiable (champ readonly). const resultat = modeleSchema.safeParse({ ...(brut as object), id: params.id }); if (!resultat.success) { return fail(400, { erreurs: erreursZod(resultat.error), brut }); } const registre = await lireRegistre(); const index = registre.findIndex((m) => m.id === params.id); if (index === -1) error(404, 'Modèle introuvable'); registre[index] = resultat.data; await ecrireRegistre(registre, `feat : mise à jour du modèle ${params.id}`); redirect(303, '/registre'); }, supprimer: async ({ params }) => { const registre = await lireRegistre(); const restant = registre.filter((m) => m.id !== params.id); if (restant.length === registre.length) error(404, 'Modèle introuvable'); await ecrireRegistre(restant, `feat : suppression du modèle ${params.id}`); redirect(303, '/registre'); } };