From e14717b2e7853705469275d64023bb902b195ebb Mon Sep 17 00:00:00 2001 From: Martin Kagamino Lehoux Date: Mon, 27 Jul 2026 18:31:26 +0200 Subject: feat: separate categories table + /categories management page - Categories table (id, name unique) with FK from groceries.category_id - /categories page for add/delete categories - Main page uses native + + @@ -28,64 +49,86 @@

List

-
- -
- {#if listItems.length === 0}

Nothing to buy

+{:else} +
+ {#each groupByCategory(listItems) as [cat, items] (cat)} +

{cat}

+ + {/each} +
{/if}

Catalog

-
- -
- {#if catalogItems.length === 0}

No items yet

+{:else} +
+ {#each groupByCategory(catalogItems) as [cat, items] (cat)} +

{cat}

+ + {/each} +
{/if} diff --git a/src/routes/categories/+page.server.ts b/src/routes/categories/+page.server.ts new file mode 100644 index 0000000..241370e --- /dev/null +++ b/src/routes/categories/+page.server.ts @@ -0,0 +1,38 @@ +import { fail } from '@sveltejs/kit'; +import { db } from '$lib/server/db'; +import { categories } from '$lib/server/db/schema'; +import { eq, asc } from 'drizzle-orm'; +import type { Actions, PageServerLoad } from './$types'; + +export const load: PageServerLoad = async () => { + const items = await db + .select() + .from(categories) + .orderBy(asc(categories.name)); + + return { categories: items }; +}; + +export const actions: Actions = { + add: async ({ request }) => { + const data = await request.formData(); + const name = data.get('name')?.toString().trim(); + + if (!name) { + return fail(400, { error: 'Name is required' }); + } + + await db.insert(categories).values({ name }); + + return { success: true }; + }, + + delete: async ({ request }) => { + const data = await request.formData(); + const id = Number(data.get('id')); + + await db.delete(categories).where(eq(categories.id, id)); + + return { success: true }; + }, +}; diff --git a/src/routes/categories/+page.svelte b/src/routes/categories/+page.svelte new file mode 100644 index 0000000..0dfc96c --- /dev/null +++ b/src/routes/categories/+page.svelte @@ -0,0 +1,134 @@ + + +

Categories

+ +
+ + +
+ +{#if form?.error} +

{form.error}

+{/if} + +
+ +
+ +{#if (data?.categories?.length ?? 0) === 0} +

No categories yet

+{/if} + + -- cgit v1.3