Files
makemd/server/src/api/controllers/PublishController.ts
wurenzhi 2748456d8a refactor(services): 重构服务文件结构,将服务按功能分类到不同目录
- 将服务文件按功能分类到core、ai、analytics、security等目录
- 修复logger导入路径问题,统一使用相对路径
- 更新相关文件的导入路径引用
- 添加新的批量操作组件导出文件
- 修复dashboard页面中的类型错误
- 添加dotenv依赖到package.json
2026-03-25 13:46:26 +08:00

64 lines
1.7 KiB
TypeScript

import { NextFunction, Request, Response } from 'express';
import { z } from 'zod';
import { PublishService } from '../../services/core/PublishService';
import { logger } from '../../utils/logger';
export class PublishController {
/**
* [CORE_INT_03] 提交商品发布请求
*/
static async publish(req: Request, res: Response, next: NextFunction) {
try {
const schema = z.object({
productId: z.string(),
shopId: z.string(),
platform: z.string(),
productData: z.object({
externalId: z.string(),
title: z.string(),
description: z.string(),
price: z.number(),
currency: z.string(),
images: z.array(z.string()),
skus: z.array(z.any())
})
});
const { productId, shopId, platform, productData } = schema.parse(req.body);
const { tenantId, traceId } = (req as any).traceContext;
const taskId = await PublishService.submitPublishTask({
tenantId,
shopId,
productId,
platform,
productData,
traceId
});
res.json({
success: true,
data: { taskId }
});
} catch (err: any) {
if (err instanceof z.ZodError) {
return res.status(400).json({ success: false, error: err.issues[0].message });
}
next(err);
}
}
/**
* [CORE_NODE_03] 接收 Node Agent 的执行回执
*/
static async reportReceipt(req: Request, res: Response, next: NextFunction) {
try {
const receipt = req.body;
await PublishService.handleNodeReceipt(receipt);
res.json({ success: true });
} catch (err: any) {
next(err);
}
}
}