'use strict'; const express = require('express'); const { requireDesktopPageAccess, requireExternalAutomationApiKey, } = require('../services/externalAutomationAuth'); const { listAlibaba1688Products, getAlibaba1688Product, createAlibaba1688Product, replaceAlibaba1688Product, updateAlibaba1688Product, deleteAlibaba1688Product, } = require('../services/alibaba1688ProductService'); const router = express.Router(); const requireAlibabaAccess = requireDesktopPageAccess('planning_upload', 'market_insight'); function requestContext(req) { return { apiKeyId: req.externalApiKey?.id || '', apiKeyName: req.externalApiKey?.name || '', remoteIp: req.externalApiKey?.remoteIp || '', }; } function handleError(res, error, fallbackMessage) { const statusCode = error.statusCode || error.status || 500; if (statusCode >= 500) console.error('[Alibaba1688ProductAPI] 请求失败:', error); return res.status(statusCode).json({ success: false, code: error.code || undefined, error: error.message || fallbackMessage, }); } router.get('/', requireExternalAutomationApiKey, requireAlibabaAccess, async (req, res) => { try { const data = await listAlibaba1688Products(req.query || {}); res.setHeader('Cache-Control', 'no-store'); return res.json({ success: true, data }); } catch (error) { return handleError(res, error, '查询 1688 商品失败'); } }); router.get('/:productId', requireExternalAutomationApiKey, requireAlibabaAccess, async (req, res) => { try { const data = await getAlibaba1688Product(req.params.productId); res.setHeader('Cache-Control', 'no-store'); return res.json({ success: true, data }); } catch (error) { return handleError(res, error, '查询 1688 商品详情失败'); } }); router.post('/', requireExternalAutomationApiKey, requireAlibabaAccess, async (req, res) => { try { const data = await createAlibaba1688Product(req.body || {}, requestContext(req)); return res.status(201).json({ success: true, data }); } catch (error) { return handleError(res, error, '新增 1688 商品失败'); } }); // 客户端同步使用 PUT。相同 productId 会完整覆盖快照,不做字段合并。 router.put('/:productId', requireExternalAutomationApiKey, requireAlibabaAccess, async (req, res) => { try { const data = await replaceAlibaba1688Product( req.params.productId, req.body || {}, requestContext(req) ); res.setHeader('Cache-Control', 'no-store'); return res.json({ success: true, data }); } catch (error) { return handleError(res, error, '覆盖 1688 商品失败'); } }); router.patch('/:productId', requireExternalAutomationApiKey, requireAlibabaAccess, async (req, res) => { try { const data = await updateAlibaba1688Product(req.params.productId, req.body || {}); return res.json({ success: true, data }); } catch (error) { return handleError(res, error, '修改 1688 商品状态失败'); } }); router.delete('/:productId', requireExternalAutomationApiKey, requireAlibabaAccess, async (req, res) => { try { const data = await deleteAlibaba1688Product(req.params.productId); return res.json({ success: true, data }); } catch (error) { return handleError(res, error, '删除 1688 商品失败'); } }); module.exports = router;