42 lines
1.6 KiB
TypeScript
42 lines
1.6 KiB
TypeScript
import { error, fail, redirect } from '@sveltejs/kit';
|
|||
|
|
import { modeleSchema } from '$lib/schemas';
|
||
|
|
import { erreursZod, modeleDepuisFormulaire } from '$lib/server/formulaires';
|
||
|
|
import { ecrireRegistre, lireRegistre } from '$lib/server/stockage';
|
||
|
|
import type { Actions, PageServerLoad } from './$types';
|
||
|
|
|
||
|
|
export const load: PageServerLoad = async ({ params }) => {
|
||
|
|
const registre = await lireRegistre();
|
||
|
|
const modele = registre.find((m) => m.id === params.id);
|
||
|
|
if (!modele) error(404, 'Modèle introuvable');
|
||
|
|
return { modele };
|
||
|
|
};
|
||
|
|
|
||
|
|
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');
|
||
|
|
}
|
||
|
|
};
|