import { fail, redirect, error } from '@sveltejs/kit'; import { loadUnchecked, loadAll, toggle, addOrUncheck, } from '$lib/server/services/groceries'; import { numericId, parseFormString, parseOptionalNumber, } from '$lib/server/services/validation'; import type { EnrichedGrocery } from '$lib/server/services/groceries'; import type { Category } from '$lib/server/services/types'; import type { Actions, PageServerLoad } from './$types'; export interface HomeOutput { items: EnrichedGrocery[]; categories: Category[]; catalog: EnrichedGrocery[]; } export const load: PageServerLoad = async () => { const unchecked = await loadUnchecked(); const all = await loadAll(); return { items: unchecked.items, categories: unchecked.categories, catalog: all.items, }; }; export const actions: Actions = { add: async ({ request }) => { const data = await request.formData(); const name = parseFormString(data.get('name')); const categoryId = parseOptionalNumber(data.get('category_id')); if (!name) { return fail(400, { error: 'Le nom est requis' }); } await addOrUncheck(name, categoryId); const { items } = await loadUnchecked(); return { success: true, items }; }, toggle: async ({ request }) => { const data = await request.formData(); try { const id = numericId(data.get('id')); await toggle(id); } catch { return fail(400, { error: 'ID invalide' }); } return { success: true }; }, addAndEdit: async ({ request }) => { const data = await request.formData(); const name = parseFormString(data.get('name')); const categoryId = parseOptionalNumber(data.get('category_id')); if (!name) { return fail(400, { error: 'Le nom est requis' }); } const { item, created } = await addOrUncheck(name, categoryId); throw redirect(303, `/grocery/${item.id}`); }, };