fix: fall back when Convex manual queries fail
This commit is contained in:
parent
207e6194b2
commit
09bc131407
1 changed files with 27 additions and 10 deletions
|
|
@ -61,6 +61,15 @@ export type ConvexAdminOrder = {
|
||||||
items: ConvexOrderItem[]
|
items: ConvexOrderItem[]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function safeFetchQuery<TData>(label: string, query: Promise<TData>, fallback: TData): Promise<TData> {
|
||||||
|
try {
|
||||||
|
return await query
|
||||||
|
} catch (error) {
|
||||||
|
console.error(`[convex-service] ${label} failed`, error)
|
||||||
|
return fallback
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function mapConvexProduct(product: ConvexProductDoc): Product {
|
function mapConvexProduct(product: ConvexProductDoc): Product {
|
||||||
return {
|
return {
|
||||||
id: product._id,
|
id: product._id,
|
||||||
|
|
@ -94,7 +103,7 @@ export async function listConvexProducts(): Promise<Product[]> {
|
||||||
return []
|
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)
|
return (products as ConvexProductDoc[]).map(mapConvexProduct)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -103,7 +112,11 @@ export async function listConvexAdminProducts(search?: string): Promise<Product[
|
||||||
return []
|
return []
|
||||||
}
|
}
|
||||||
|
|
||||||
const products = await fetchQuery(api.products.listAdmin, { search })
|
const products = await safeFetchQuery(
|
||||||
|
"products.listAdmin",
|
||||||
|
fetchQuery(api.products.listAdmin, { search }),
|
||||||
|
[] as ConvexProductDoc[],
|
||||||
|
)
|
||||||
return (products as ConvexProductDoc[]).map(mapConvexProduct)
|
return (products as ConvexProductDoc[]).map(mapConvexProduct)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -112,7 +125,7 @@ export async function getConvexProduct(id: string): Promise<Product | null> {
|
||||||
return null
|
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) => {
|
const match = (products as ConvexProductDoc[]).find((product) => {
|
||||||
return product._id === id || product.stripeProductId === id
|
return product._id === id || product.stripeProductId === id
|
||||||
})
|
})
|
||||||
|
|
@ -125,7 +138,7 @@ export async function listConvexManuals(): Promise<Manual[]> {
|
||||||
return []
|
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)
|
return (manuals as ConvexManualDoc[]).map(mapConvexManual)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -134,7 +147,7 @@ export async function getConvexManualDashboard() {
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
return await fetchQuery(api.manuals.dashboard, {})
|
return await safeFetchQuery("manuals.dashboard", fetchQuery(api.manuals.dashboard, {}), null)
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getConvexOrderMetrics() {
|
export async function getConvexOrderMetrics() {
|
||||||
|
|
@ -142,7 +155,7 @@ export async function getConvexOrderMetrics() {
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
return await fetchQuery(api.orders.getMetrics, {})
|
return await safeFetchQuery("orders.getMetrics", fetchQuery(api.orders.getMetrics, {}), null)
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function listConvexOrders(options?: {
|
export async function listConvexOrders(options?: {
|
||||||
|
|
@ -153,8 +166,12 @@ export async function listConvexOrders(options?: {
|
||||||
return []
|
return []
|
||||||
}
|
}
|
||||||
|
|
||||||
return await fetchQuery(api.orders.listAdmin, {
|
return await safeFetchQuery(
|
||||||
status: options?.status,
|
"orders.listAdmin",
|
||||||
search: options?.search,
|
fetchQuery(api.orders.listAdmin, {
|
||||||
})
|
status: options?.status,
|
||||||
|
search: options?.search,
|
||||||
|
}),
|
||||||
|
[] as ConvexAdminOrder[],
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue