refactor(terminology): 统一术语标准并优化代码类型安全
- 将B2B统一为TOB术语 - 将状态值统一为大写格式 - 优化类型声明,避免使用any - 将float类型替换为decimal以提高精度 - 新增术语标准化文档 - 优化路由结构和菜单分类 - 添加TypeORM实体类 - 增强加密模块安全性 - 重构前端路由结构 - 完善任务模板和验收标准
This commit is contained in:
284
server/src/api/routes/omnichannel.ts
Normal file
284
server/src/api/routes/omnichannel.ts
Normal file
@@ -0,0 +1,284 @@
|
||||
import { Router } from 'express';
|
||||
import { requireTraceContext } from '../../core/guards/trace-context.guard';
|
||||
import { requirePermission } from '../../core/guards/rbac.guard';
|
||||
import {
|
||||
OmnichannelController,
|
||||
MarketingController,
|
||||
FulfillmentController,
|
||||
StoreCreationController,
|
||||
CrossBorderController,
|
||||
} from '../controllers/OmnichannelController';
|
||||
|
||||
const router = Router();
|
||||
|
||||
// [BE-CS005] Omnichannel message aggregation
|
||||
router.post(
|
||||
'/communication/aggregate',
|
||||
requireTraceContext,
|
||||
requirePermission('communication:read'),
|
||||
OmnichannelController.aggregateMessages
|
||||
);
|
||||
|
||||
// [BE-CS006] Intelligent automated customer service
|
||||
router.post(
|
||||
'/communication/auto-reply',
|
||||
requireTraceContext,
|
||||
requirePermission('communication:write'),
|
||||
OmnichannelController.autoReply
|
||||
);
|
||||
|
||||
// [BE-CS007] Team collaboration management
|
||||
router.post(
|
||||
'/communication/team-task',
|
||||
requireTraceContext,
|
||||
requirePermission('communication:write'),
|
||||
OmnichannelController.createTeamTask
|
||||
);
|
||||
|
||||
// [BE-CS008] Customer fine-grained management
|
||||
router.put(
|
||||
'/communication/customer/:customerId/profile',
|
||||
requireTraceContext,
|
||||
requirePermission('customer:write'),
|
||||
OmnichannelController.updateCustomerProfile
|
||||
);
|
||||
|
||||
// [BE-CS009] Cross-border communication adaptation
|
||||
router.post(
|
||||
'/communication/translate',
|
||||
requireTraceContext,
|
||||
requirePermission('communication:write'),
|
||||
OmnichannelController.translateMessage
|
||||
);
|
||||
|
||||
// [BE-AD004] Multi-channel integration
|
||||
router.post(
|
||||
'/marketing/channels',
|
||||
requireTraceContext,
|
||||
requirePermission('marketing:write'),
|
||||
MarketingController.integrateChannels
|
||||
);
|
||||
|
||||
// [BE-AD005] Intelligent marketing automation
|
||||
router.post(
|
||||
'/marketing/automation',
|
||||
requireTraceContext,
|
||||
requirePermission('marketing:write'),
|
||||
MarketingController.createAutomation
|
||||
);
|
||||
|
||||
// [BE-AD006] Marketing effect analysis
|
||||
router.get(
|
||||
'/marketing/campaign/:campaignId/analyze',
|
||||
requireTraceContext,
|
||||
requirePermission('marketing:read'),
|
||||
MarketingController.analyzeCampaign
|
||||
);
|
||||
|
||||
// [BE-AD007] A/B test automation
|
||||
router.post(
|
||||
'/marketing/ab-test',
|
||||
requireTraceContext,
|
||||
requirePermission('marketing:write'),
|
||||
MarketingController.runABTest
|
||||
);
|
||||
|
||||
// [BE-O005] Multi-platform order unification
|
||||
router.post(
|
||||
'/fulfillment/orders/unify',
|
||||
requireTraceContext,
|
||||
requirePermission('order:write'),
|
||||
FulfillmentController.unifyOrders
|
||||
);
|
||||
|
||||
// [BE-O006] Intelligent order routing
|
||||
router.post(
|
||||
'/fulfillment/order/:orderId/route',
|
||||
requireTraceContext,
|
||||
requirePermission('order:write'),
|
||||
FulfillmentController.routeOrder
|
||||
);
|
||||
|
||||
// [BE-O007] Full-process fulfillment management
|
||||
router.post(
|
||||
'/fulfillment/order/:orderId/manage',
|
||||
requireTraceContext,
|
||||
requirePermission('order:write'),
|
||||
FulfillmentController.manageFulfillment
|
||||
);
|
||||
|
||||
// [BE-O008] Cross-platform status sync
|
||||
router.post(
|
||||
'/fulfillment/order/:orderId/sync-status',
|
||||
requireTraceContext,
|
||||
requirePermission('order:write'),
|
||||
FulfillmentController.syncStatus
|
||||
);
|
||||
|
||||
// [BE-SC001] Template-based website design
|
||||
router.post(
|
||||
'/store/template',
|
||||
requireTraceContext,
|
||||
requirePermission('store:write'),
|
||||
StoreCreationController.createTemplate
|
||||
);
|
||||
|
||||
// [BE-SC002] Drag-and-drop page editor
|
||||
router.put(
|
||||
'/store/website/:websiteId/page/:pageId/components',
|
||||
requireTraceContext,
|
||||
requirePermission('store:write'),
|
||||
StoreCreationController.updatePageComponents
|
||||
);
|
||||
|
||||
// [BE-SC003] Responsive layout adaptation
|
||||
router.get(
|
||||
'/store/website/:websiteId/page/:pageId/adapt',
|
||||
requireTraceContext,
|
||||
StoreCreationController.adaptResponsiveLayout
|
||||
);
|
||||
|
||||
// [BE-SC004] Multilingual support
|
||||
router.post(
|
||||
'/store/website/:websiteId/multilingual',
|
||||
requireTraceContext,
|
||||
requirePermission('store:write'),
|
||||
StoreCreationController.setupMultilingual
|
||||
);
|
||||
|
||||
// [BE-SC005] Brand identity and visual design
|
||||
router.post(
|
||||
'/store/brand',
|
||||
requireTraceContext,
|
||||
requirePermission('store:write'),
|
||||
StoreCreationController.createBrand
|
||||
);
|
||||
|
||||
// [BE-SC006] Brand story and content management
|
||||
router.post(
|
||||
'/store/brand/:brandId/content',
|
||||
requireTraceContext,
|
||||
requirePermission('store:write'),
|
||||
StoreCreationController.manageContent
|
||||
);
|
||||
|
||||
// [BE-SC007] Ecommerce feature integration
|
||||
router.post(
|
||||
'/store/website/:websiteId/ecommerce',
|
||||
requireTraceContext,
|
||||
requirePermission('store:write'),
|
||||
StoreCreationController.integrateEcommerce
|
||||
);
|
||||
|
||||
// [BE-SC008] Marketing tool integration
|
||||
router.post(
|
||||
'/store/website/:websiteId/marketing',
|
||||
requireTraceContext,
|
||||
requirePermission('store:write'),
|
||||
StoreCreationController.integrateMarketing
|
||||
);
|
||||
|
||||
// [BE-SC009] Shipping and delivery configuration
|
||||
router.post(
|
||||
'/store/website/:websiteId/shipping',
|
||||
requireTraceContext,
|
||||
requirePermission('store:write'),
|
||||
StoreCreationController.configureShipping
|
||||
);
|
||||
|
||||
// [BE-SC010] Data analysis and reporting
|
||||
router.post(
|
||||
'/store/website/:websiteId/analytics',
|
||||
requireTraceContext,
|
||||
requirePermission('store:read'),
|
||||
StoreCreationController.generateAnalytics
|
||||
);
|
||||
|
||||
// [BE-SC011] SEO optimization
|
||||
router.post(
|
||||
'/store/website/:websiteId/seo',
|
||||
requireTraceContext,
|
||||
requirePermission('store:write'),
|
||||
StoreCreationController.optimizeSEO
|
||||
);
|
||||
|
||||
// [BE-SC012] Social media integration
|
||||
router.post(
|
||||
'/store/website/:websiteId/social',
|
||||
requireTraceContext,
|
||||
requirePermission('store:write'),
|
||||
StoreCreationController.integrateSocialMedia
|
||||
);
|
||||
|
||||
// [BE-SC013] Content marketing support
|
||||
router.post(
|
||||
'/store/website/:websiteId/content-marketing',
|
||||
requireTraceContext,
|
||||
requirePermission('store:write'),
|
||||
StoreCreationController.manageContentMarketing
|
||||
);
|
||||
|
||||
// [BE-SC014] Brand story spreading
|
||||
router.post(
|
||||
'/store/brand/:brandId/spread',
|
||||
requireTraceContext,
|
||||
requirePermission('store:write'),
|
||||
StoreCreationController.spreadBrandStory
|
||||
);
|
||||
|
||||
// [BE-CB006] Sellbrite platform integration
|
||||
router.post(
|
||||
'/cross-border/sellbrite',
|
||||
requireTraceContext,
|
||||
requirePermission('integration:write'),
|
||||
CrossBorderController.integrateSellbrite
|
||||
);
|
||||
|
||||
// [BE-CB007] Shoplazza platform integration
|
||||
router.post(
|
||||
'/cross-border/shoplazza',
|
||||
requireTraceContext,
|
||||
requirePermission('integration:write'),
|
||||
CrossBorderController.integrateShoplazza
|
||||
);
|
||||
|
||||
// [BE-CB008] SaleSmartly platform integration
|
||||
router.post(
|
||||
'/cross-border/salesmartly',
|
||||
requireTraceContext,
|
||||
requirePermission('integration:write'),
|
||||
CrossBorderController.integrateSaleSmartly
|
||||
);
|
||||
|
||||
// [BE-CB009] Multi-platform inventory sync
|
||||
router.post(
|
||||
'/cross-border/inventory/sync',
|
||||
requireTraceContext,
|
||||
requirePermission('inventory:write'),
|
||||
CrossBorderController.syncInventory
|
||||
);
|
||||
|
||||
// [BE-CB010] Omnichannel marketing integration
|
||||
router.post(
|
||||
'/cross-border/marketing',
|
||||
requireTraceContext,
|
||||
requirePermission('marketing:write'),
|
||||
CrossBorderController.integrateMarketing
|
||||
);
|
||||
|
||||
// Get integration status
|
||||
router.get(
|
||||
'/cross-border/integration',
|
||||
requireTraceContext,
|
||||
CrossBorderController.getIntegrationStatus
|
||||
);
|
||||
|
||||
// Disconnect platform
|
||||
router.delete(
|
||||
'/cross-border/integration/:platform',
|
||||
requireTraceContext,
|
||||
requirePermission('integration:write'),
|
||||
CrossBorderController.disconnectPlatform
|
||||
);
|
||||
|
||||
export default router;
|
||||
@@ -25,4 +25,15 @@ router.post('/', requireTraceContext, requirePermission('product:write'), Produc
|
||||
router.put('/:id', requireTraceContext, requirePermission('product:write'), ProductController.update);
|
||||
router.delete('/:id', requireTraceContext, requirePermission('product:delete'), ProductController.delete);
|
||||
|
||||
// [BE-P006] Multi-platform product mapping
|
||||
router.post('/platform-mapping', requireTraceContext, requirePermission('product:write'), ProductController.createPlatformMapping);
|
||||
router.get('/:productId/platform-mappings', requireTraceContext, ProductController.getPlatformMappings);
|
||||
|
||||
// [BE-P007] Batch operations
|
||||
router.post('/batch', requireTraceContext, requirePermission('product:write'), ProductController.batchOperation);
|
||||
|
||||
// [BE-P008] Cross-platform inventory sync
|
||||
router.post('/:productId/sync-inventory', requireTraceContext, requirePermission('product:write'), ProductController.syncInventory);
|
||||
router.get('/:productId/sync-status', requireTraceContext, ProductController.getSyncStatus);
|
||||
|
||||
export default router;
|
||||
|
||||
355
server/src/api/routes/settings.ts
Normal file
355
server/src/api/routes/settings.ts
Normal file
@@ -0,0 +1,355 @@
|
||||
import { Router } from 'express';
|
||||
import { requireTraceContext } from '../../core/guards/trace-context.guard';
|
||||
import { requirePermission } from '../../core/guards/rbac.guard';
|
||||
import {
|
||||
WinNodeController,
|
||||
TaskCenterController,
|
||||
IndependentSiteController,
|
||||
CostTemplateController,
|
||||
PlatformAccountController,
|
||||
ReturnController,
|
||||
} from '../controllers/SettingsController';
|
||||
|
||||
const router = Router();
|
||||
|
||||
// WinNode routes
|
||||
router.get(
|
||||
'/winnode',
|
||||
requireTraceContext,
|
||||
requirePermission('settings:read'),
|
||||
WinNodeController.list
|
||||
);
|
||||
|
||||
router.get(
|
||||
'/winnode/stats',
|
||||
requireTraceContext,
|
||||
requirePermission('settings:read'),
|
||||
WinNodeController.getStats
|
||||
);
|
||||
|
||||
router.get(
|
||||
'/winnode/:id',
|
||||
requireTraceContext,
|
||||
requirePermission('settings:read'),
|
||||
WinNodeController.getById
|
||||
);
|
||||
|
||||
router.post(
|
||||
'/winnode',
|
||||
requireTraceContext,
|
||||
requirePermission('settings:write'),
|
||||
WinNodeController.create
|
||||
);
|
||||
|
||||
router.put(
|
||||
'/winnode/:id',
|
||||
requireTraceContext,
|
||||
requirePermission('settings:write'),
|
||||
WinNodeController.update
|
||||
);
|
||||
|
||||
router.delete(
|
||||
'/winnode/:id',
|
||||
requireTraceContext,
|
||||
requirePermission('settings:write'),
|
||||
WinNodeController.delete
|
||||
);
|
||||
|
||||
router.post(
|
||||
'/winnode/:id/test',
|
||||
requireTraceContext,
|
||||
requirePermission('settings:write'),
|
||||
WinNodeController.testConnection
|
||||
);
|
||||
|
||||
router.post(
|
||||
'/winnode/:id/restart',
|
||||
requireTraceContext,
|
||||
requirePermission('settings:write'),
|
||||
WinNodeController.restart
|
||||
);
|
||||
|
||||
router.post(
|
||||
'/winnode/:id/heartbeat',
|
||||
WinNodeController.heartbeat
|
||||
);
|
||||
|
||||
// TaskCenter routes
|
||||
router.get(
|
||||
'/taskcenter',
|
||||
requireTraceContext,
|
||||
requirePermission('task:read'),
|
||||
TaskCenterController.list
|
||||
);
|
||||
|
||||
router.get(
|
||||
'/taskcenter/stats',
|
||||
requireTraceContext,
|
||||
requirePermission('task:read'),
|
||||
TaskCenterController.getStats
|
||||
);
|
||||
|
||||
router.get(
|
||||
'/taskcenter/:id',
|
||||
requireTraceContext,
|
||||
requirePermission('task:read'),
|
||||
TaskCenterController.getById
|
||||
);
|
||||
|
||||
router.post(
|
||||
'/taskcenter',
|
||||
requireTraceContext,
|
||||
requirePermission('task:write'),
|
||||
TaskCenterController.create
|
||||
);
|
||||
|
||||
router.put(
|
||||
'/taskcenter/:id/status',
|
||||
requireTraceContext,
|
||||
requirePermission('task:write'),
|
||||
TaskCenterController.updateStatus
|
||||
);
|
||||
|
||||
router.post(
|
||||
'/taskcenter/:id/cancel',
|
||||
requireTraceContext,
|
||||
requirePermission('task:write'),
|
||||
TaskCenterController.cancel
|
||||
);
|
||||
|
||||
router.post(
|
||||
'/taskcenter/:id/retry',
|
||||
requireTraceContext,
|
||||
requirePermission('task:write'),
|
||||
TaskCenterController.retry
|
||||
);
|
||||
|
||||
// IndependentSite routes
|
||||
router.get(
|
||||
'/independent-site',
|
||||
requireTraceContext,
|
||||
requirePermission('site:read'),
|
||||
IndependentSiteController.listSites
|
||||
);
|
||||
|
||||
router.get(
|
||||
'/independent-site/:id',
|
||||
requireTraceContext,
|
||||
requirePermission('site:read'),
|
||||
IndependentSiteController.getSiteById
|
||||
);
|
||||
|
||||
router.post(
|
||||
'/independent-site',
|
||||
requireTraceContext,
|
||||
requirePermission('site:write'),
|
||||
IndependentSiteController.createSite
|
||||
);
|
||||
|
||||
router.put(
|
||||
'/independent-site/:id',
|
||||
requireTraceContext,
|
||||
requirePermission('site:write'),
|
||||
IndependentSiteController.updateSite
|
||||
);
|
||||
|
||||
router.delete(
|
||||
'/independent-site/:id',
|
||||
requireTraceContext,
|
||||
requirePermission('site:write'),
|
||||
IndependentSiteController.deleteSite
|
||||
);
|
||||
|
||||
router.post(
|
||||
'/independent-site/:id/sync-products',
|
||||
requireTraceContext,
|
||||
requirePermission('site:write'),
|
||||
IndependentSiteController.syncProducts
|
||||
);
|
||||
|
||||
router.get(
|
||||
'/independent-site/:id/products',
|
||||
requireTraceContext,
|
||||
requirePermission('site:read'),
|
||||
IndependentSiteController.getSiteProducts
|
||||
);
|
||||
|
||||
router.get(
|
||||
'/independent-site/:id/orders',
|
||||
requireTraceContext,
|
||||
requirePermission('site:read'),
|
||||
IndependentSiteController.getSiteOrders
|
||||
);
|
||||
|
||||
router.get(
|
||||
'/independent-site/:id/analytics',
|
||||
requireTraceContext,
|
||||
requirePermission('site:read'),
|
||||
IndependentSiteController.getSiteAnalytics
|
||||
);
|
||||
|
||||
// CostTemplate routes
|
||||
router.get(
|
||||
'/cost-template',
|
||||
requireTraceContext,
|
||||
requirePermission('settings:read'),
|
||||
CostTemplateController.list
|
||||
);
|
||||
|
||||
router.get(
|
||||
'/cost-template/:id',
|
||||
requireTraceContext,
|
||||
requirePermission('settings:read'),
|
||||
CostTemplateController.getById
|
||||
);
|
||||
|
||||
router.post(
|
||||
'/cost-template',
|
||||
requireTraceContext,
|
||||
requirePermission('settings:write'),
|
||||
CostTemplateController.create
|
||||
);
|
||||
|
||||
router.put(
|
||||
'/cost-template/:id',
|
||||
requireTraceContext,
|
||||
requirePermission('settings:write'),
|
||||
CostTemplateController.update
|
||||
);
|
||||
|
||||
router.delete(
|
||||
'/cost-template/:id',
|
||||
requireTraceContext,
|
||||
requirePermission('settings:write'),
|
||||
CostTemplateController.delete
|
||||
);
|
||||
|
||||
router.post(
|
||||
'/cost-template/:id/duplicate',
|
||||
requireTraceContext,
|
||||
requirePermission('settings:write'),
|
||||
CostTemplateController.duplicate
|
||||
);
|
||||
|
||||
router.post(
|
||||
'/cost-template/:id/calculate',
|
||||
requireTraceContext,
|
||||
requirePermission('settings:read'),
|
||||
CostTemplateController.calculateCost
|
||||
);
|
||||
|
||||
// PlatformAccount routes
|
||||
router.get(
|
||||
'/platform-account',
|
||||
requireTraceContext,
|
||||
requirePermission('settings:read'),
|
||||
PlatformAccountController.list
|
||||
);
|
||||
|
||||
router.get(
|
||||
'/platform-account/stats',
|
||||
requireTraceContext,
|
||||
requirePermission('settings:read'),
|
||||
PlatformAccountController.getStats
|
||||
);
|
||||
|
||||
router.get(
|
||||
'/platform-account/:id',
|
||||
requireTraceContext,
|
||||
requirePermission('settings:read'),
|
||||
PlatformAccountController.getById
|
||||
);
|
||||
|
||||
router.post(
|
||||
'/platform-account',
|
||||
requireTraceContext,
|
||||
requirePermission('settings:write'),
|
||||
PlatformAccountController.create
|
||||
);
|
||||
|
||||
router.put(
|
||||
'/platform-account/:id',
|
||||
requireTraceContext,
|
||||
requirePermission('settings:write'),
|
||||
PlatformAccountController.update
|
||||
);
|
||||
|
||||
router.delete(
|
||||
'/platform-account/:id',
|
||||
requireTraceContext,
|
||||
requirePermission('settings:write'),
|
||||
PlatformAccountController.delete
|
||||
);
|
||||
|
||||
router.post(
|
||||
'/platform-account/:id/refresh-token',
|
||||
requireTraceContext,
|
||||
requirePermission('settings:write'),
|
||||
PlatformAccountController.refreshToken
|
||||
);
|
||||
|
||||
router.post(
|
||||
'/platform-account/:id/test',
|
||||
requireTraceContext,
|
||||
requirePermission('settings:write'),
|
||||
PlatformAccountController.testConnection
|
||||
);
|
||||
|
||||
router.post(
|
||||
'/platform-account/:id/sync',
|
||||
requireTraceContext,
|
||||
requirePermission('settings:write'),
|
||||
PlatformAccountController.sync
|
||||
);
|
||||
|
||||
// Return routes
|
||||
router.get(
|
||||
'/return/sku',
|
||||
requireTraceContext,
|
||||
requirePermission('return:read'),
|
||||
ReturnController.fetchSKUData
|
||||
);
|
||||
|
||||
router.put(
|
||||
'/return/sku/:id/status',
|
||||
requireTraceContext,
|
||||
requirePermission('return:write'),
|
||||
ReturnController.updateSKUStatus
|
||||
);
|
||||
|
||||
router.get(
|
||||
'/return',
|
||||
requireTraceContext,
|
||||
requirePermission('return:read'),
|
||||
ReturnController.fetchReturns
|
||||
);
|
||||
|
||||
router.post(
|
||||
'/return',
|
||||
requireTraceContext,
|
||||
requirePermission('return:write'),
|
||||
ReturnController.createReturn
|
||||
);
|
||||
|
||||
router.put(
|
||||
'/return/:id/status',
|
||||
requireTraceContext,
|
||||
requirePermission('return:write'),
|
||||
ReturnController.updateReturnStatus
|
||||
);
|
||||
|
||||
router.get(
|
||||
'/return/trend',
|
||||
requireTraceContext,
|
||||
requirePermission('return:read'),
|
||||
ReturnController.getTrend
|
||||
);
|
||||
|
||||
router.get(
|
||||
'/return/stats',
|
||||
requireTraceContext,
|
||||
requirePermission('return:read'),
|
||||
ReturnController.getStats
|
||||
);
|
||||
|
||||
export default router;
|
||||
Reference in New Issue
Block a user