From 3b5d1947dd2f281860c9a6f303a229587a16c107 Mon Sep 17 00:00:00 2001 From: Andymick Date: Sat, 18 Jul 2026 08:53:05 +0100 Subject: [PATCH] Add error handling to stock page for Prisma queries --- src/app/admin/accounts/stock/page.tsx | 28 ++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/src/app/admin/accounts/stock/page.tsx b/src/app/admin/accounts/stock/page.tsx index aac2ea5..bc2dfd1 100644 --- a/src/app/admin/accounts/stock/page.tsx +++ b/src/app/admin/accounts/stock/page.tsx @@ -4,24 +4,34 @@ import AccountsNav from '@/components/AccountsNav'; import StockAdjustForm from '@/components/StockAdjustForm'; export default async function StockPage() { - const [levels, productRows] = await Promise.all([ - prisma.stockLevel.findMany({ - include: { product: true }, - orderBy: [{ product: { name: 'asc' } }, { color: 'asc' }, { size: 'asc' }], - }), - prisma.product.findMany({ orderBy: { name: 'asc' } }), - ]); + let levels = []; + let productRows = []; + + try { + [levels, productRows] = await Promise.all([ + prisma.stockLevel.findMany({ + include: { product: true }, + }), + prisma.product.findMany(), + ]); + } catch (err) { + console.error('Error fetching stock data:', err); + } const products = productRows.map((p) => ({ id: p.id, name: p.name, colors: JSON.parse(p.colors) as string[], sizes: p.sizes ? (JSON.parse(p.sizes) as string[]) : [], - })); + })).sort((a, b) => a.name.localeCompare(b.name)); // Group rows under their product for a readable table. const grouped = new Map(); - for (const level of levels) { + for (const level of levels.sort((a, b) => { + if (a.product.name !== b.product.name) return a.product.name.localeCompare(b.product.name); + if (a.color !== b.color) return a.color.localeCompare(b.color); + return (a.size || '').localeCompare(b.size || ''); + })) { const list = grouped.get(level.productId) ?? []; list.push(level); grouped.set(level.productId, list);