import type { Context } from '@netlify/functions' import { guardMethod } from '../utils/method.js' import { fail, ok } from '../utils/http.js' import { prisma } from '../utils/prisma.js' import { withErrorBoundary } from '../utils/handler.js' const toProductDetail = (product: NonNullable>>) => { 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 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)) })