import { fail } from '@sveltejs/kit'; import { db } from '$lib/server/db'; import { groceries, categories, references } from '$lib/server/db/schema'; import { eq, desc } from 'drizzle-orm'; import type { Actions, PageServerLoad } from './$types'; export const load: PageServerLoad = async () => { const [items, cats, refs] = await Promise.all([ db.select().from(groceries).orderBy(desc(groceries.createdAt)), db.select().from(categories).orderBy(desc(categories.name)), db.select().from(references).orderBy(desc(references.qualityScore)), ]); const catMap = new Map(cats.map((c) => [c.id, c.name])); const bestRef = new Map(); for (const ref of refs) { if (!bestRef.has(ref.groceryId)) { bestRef.set(ref.groceryId, ref); } } return { items: items.map((i) => ({ ...i, categoryName: i.categoryId ? (catMap.get(i.categoryId) ?? null) : null, bestRef: bestRef.get(i.id) ?? null, })), categories: cats, }; }; export const actions: Actions = { toggle: async ({ request }) => { const data = await request.formData(); const id = Number(data.get('id')); const [item] = await db .select() .from(groceries) .where(eq(groceries.id, id)); if (!item) { return fail(404, { error: 'Item not found' }); } await db .update(groceries) .set({ checked: !item.checked }) .where(eq(groceries.id, id)); return { success: true }; }, };