55 lines
1.9 KiB
TypeScript
55 lines
1.9 KiB
TypeScript
import { NextRequest, NextResponse } from "next/server";
|
|
import {
|
|
PRODUCT_PLANNING_ADVANCED_DISABLED,
|
|
PRODUCT_PLANNING_ADVANCED_DISABLED_MESSAGE,
|
|
} from "@/lib/product-planning/advanced-disabled";
|
|
import { getResolvedProductPlanningApiConfig } from "@/lib/product-planning/server-config";
|
|
import {
|
|
isProductPlanningEnabled,
|
|
PRODUCT_PLANNING_DISABLED_MESSAGE,
|
|
} from "@/lib/product-planning/server-feature";
|
|
import { getProductPlanningToken } from "@/lib/product-planning/server-auth";
|
|
import { fetchProductPlanningJdItem } from "@/lib/product-planning/marketplace-items";
|
|
import type { ProductPlanningTaobaoItemResponse } from "@/lib/product-planning/types";
|
|
|
|
export const runtime = "nodejs";
|
|
|
|
function jsonError(status: number, error: string) {
|
|
const payload: ProductPlanningTaobaoItemResponse = {
|
|
success: false,
|
|
error,
|
|
};
|
|
return NextResponse.json(payload, { status });
|
|
}
|
|
|
|
export async function GET(request: NextRequest) {
|
|
if (PRODUCT_PLANNING_ADVANCED_DISABLED) {
|
|
return jsonError(503, PRODUCT_PLANNING_ADVANCED_DISABLED_MESSAGE);
|
|
}
|
|
|
|
const token = await getProductPlanningToken(request);
|
|
if (!token?.sub) {
|
|
return jsonError(401, "未登录");
|
|
}
|
|
if (!(await isProductPlanningEnabled())) {
|
|
return jsonError(403, PRODUCT_PLANNING_DISABLED_MESSAGE);
|
|
}
|
|
|
|
const itemId = String(request.nextUrl.searchParams.get("id") || "").trim();
|
|
if (!itemId) {
|
|
return jsonError(400, "缺少商品ID参数");
|
|
}
|
|
|
|
const config = await getResolvedProductPlanningApiConfig();
|
|
try {
|
|
const item = await fetchProductPlanningJdItem(itemId, config);
|
|
return NextResponse.json({
|
|
success: true,
|
|
item,
|
|
} satisfies ProductPlanningTaobaoItemResponse);
|
|
} catch (error) {
|
|
console.error("[ProductPlanning][JdItem] request failed:", error);
|
|
return jsonError(502, error instanceof Error ? error.message : "京东商品详情接口调用失败");
|
|
}
|
|
}
|