aboutsummaryrefslogtreecommitdiff
path: root/src/routes/groceries/catalog/+page.server.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/routes/groceries/catalog/+page.server.ts')
-rw-r--r--src/routes/groceries/catalog/+page.server.ts49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/routes/groceries/catalog/+page.server.ts b/src/routes/groceries/catalog/+page.server.ts
new file mode 100644
index 0000000..22464dc
--- /dev/null
+++ b/src/routes/groceries/catalog/+page.server.ts
@@ -0,0 +1,49 @@
+import { fail } from '@sveltejs/kit';
+import {
+ loadAll,
+ toggle,
+ bulkUpdateGroceryCategory,
+} from '$lib/server/services/groceries';
+import {
+ numericId,
+ 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 CatalogOutput {
+ items: EnrichedGrocery[];
+ categories: Category[];
+}
+
+export const load: PageServerLoad = async () => {
+ return loadAll();
+};
+
+export const actions: Actions = {
+ 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 };
+ },
+
+ bulkUpdateCategory: async ({ request }) => {
+ const data = await request.formData();
+ const ids = data.getAll('ids').map(numericId);
+ const rawCategoryId = parseOptionalNumber(data.get('category_id'));
+ const categoryId = rawCategoryId === -1 ? null : rawCategoryId;
+
+ if (ids.length === 0) {
+ return fail(400, { error: 'Aucun article sélectionné' });
+ }
+
+ await bulkUpdateGroceryCategory(ids, categoryId);
+ return { success: true, type: 'bulkUpdate' as const };
+ },
+};