diff --git a/lib/convex-service.ts b/lib/convex-service.ts index 4ab62876..281ad8f1 100644 --- a/lib/convex-service.ts +++ b/lib/convex-service.ts @@ -61,6 +61,15 @@ export type ConvexAdminOrder = { items: ConvexOrderItem[] } +async function safeFetchQuery(label: string, query: Promise, fallback: TData): Promise { + try { + return await query + } catch (error) { + console.error(`[convex-service] ${label} failed`, error) + return fallback + } +} + function mapConvexProduct(product: ConvexProductDoc): Product { return { id: product._id, @@ -94,7 +103,7 @@ export async function listConvexProducts(): Promise { return [] } - const products = await fetchQuery(api.products.listActive, {}) + const products = await safeFetchQuery("products.listActive", fetchQuery(api.products.listActive, {}), [] as ConvexProductDoc[]) return (products as ConvexProductDoc[]).map(mapConvexProduct) } @@ -103,7 +112,11 @@ export async function listConvexAdminProducts(search?: string): Promise { return null } - const products = await fetchQuery(api.products.listAdmin, {}) + const products = await safeFetchQuery("products.listAdmin", fetchQuery(api.products.listAdmin, {}), [] as ConvexProductDoc[]) const match = (products as ConvexProductDoc[]).find((product) => { return product._id === id || product.stripeProductId === id }) @@ -125,7 +138,7 @@ export async function listConvexManuals(): Promise { return [] } - const manuals = await fetchQuery(api.manuals.list, {}) + const manuals = await safeFetchQuery("manuals.list", fetchQuery(api.manuals.list, {}), [] as ConvexManualDoc[]) return (manuals as ConvexManualDoc[]).map(mapConvexManual) } @@ -134,7 +147,7 @@ export async function getConvexManualDashboard() { return null } - return await fetchQuery(api.manuals.dashboard, {}) + return await safeFetchQuery("manuals.dashboard", fetchQuery(api.manuals.dashboard, {}), null) } export async function getConvexOrderMetrics() { @@ -142,7 +155,7 @@ export async function getConvexOrderMetrics() { return null } - return await fetchQuery(api.orders.getMetrics, {}) + return await safeFetchQuery("orders.getMetrics", fetchQuery(api.orders.getMetrics, {}), null) } export async function listConvexOrders(options?: { @@ -153,8 +166,12 @@ export async function listConvexOrders(options?: { return [] } - return await fetchQuery(api.orders.listAdmin, { - status: options?.status, - search: options?.search, - }) + return await safeFetchQuery( + "orders.listAdmin", + fetchQuery(api.orders.listAdmin, { + status: options?.status, + search: options?.search, + }), + [] as ConvexAdminOrder[], + ) }