feat: 查积分、支付、拆弹、取消订单

This commit is contained in:
2026-07-28 18:39:34 +08:00
parent 53305757f8
commit c443109869
40 changed files with 1814 additions and 163 deletions
@@ -1,11 +1,63 @@
import type { Context } from '@netlify/functions'
import { guardMethod } from '../utils/method.js'
import { ok } from '../utils/http.js'
import { fail, ok } from '../utils/http.js'
import { prisma } from '../utils/prisma.js'
import { withErrorBoundary } from '../utils/handler.js'
const toProductDetail = (product: NonNullable<Awaited<ReturnType<typeof prisma.supplierProduct.findFirst>>>) => {
const picInfo = Array.isArray(product.picInfo) ? product.picInfo : []
const image = product.imageUrl || String(picInfo[0] || '')
const price = product.price.toFixed(2)
return {
id: product.id,
sku: product.sku,
number: product.number,
price,
name: product.name,
taxRate: Number(product.taxRate),
picInfo,
desc: product.description || '',
detail: product.detail || product.description || '',
originPrice: product.originPrice ? product.originPrice.toFixed(2) : price,
image,
imageUrl: image,
categoryId: product.categoryId || '',
category: product.category || '',
tag: product.tag || '',
sales: product.sales || '',
stock: product.stock
}
}
export default withErrorBoundary(async (request: Request, _context: Context) => {
const methodResponse = guardMethod(request, ['GET'])
if (methodResponse) return methodResponse
return ok({ message: '商品详情接口待实现' })
const url = new URL(request.url)
const id = (url.searchParams.get('id') || '').trim()
const sku = (url.searchParams.get('sku') || '').trim()
const numericId = Number(id)
const querySku = sku || (id && !Number.isInteger(numericId) ? id : '')
if (!id && !sku) {
return fail('商品参数不能为空')
}
const product = await prisma.supplierProduct.findFirst({
where: {
enabled: true,
deleted: 0,
OR: [
...(Number.isInteger(numericId) && numericId > 0 ? [{ id: numericId }] : []),
...(querySku ? [{ sku: querySku }] : [])
]
}
})
if (!product) {
return fail('商品不存在或已下架', 404, 'PRODUCT_NOT_FOUND')
}
return ok(toProductDetail(product))
})