Files
makemd/server/src/api/routes/product.ts

40 lines
2.5 KiB
TypeScript
Raw Normal View History

import { Router } from 'express';
import { TurboGateway } from '../../core/gateway/TurboGateway';
import { requireTraceContext } from '../../core/guards/trace-context.guard';
import { requirePermission } from '../../core/guards/rbac.guard';
import { ProductController } from '../controllers/ProductController';
const router = Router();
// Standard CRUD
router.get('/', TurboGateway.cache(300), ProductController.getAll);
// Enhanced Crawlful AI functions
router.post('/autonomous-listing', requireTraceContext, ProductController.startAutonomousListing);
router.post('/collect-async', requireTraceContext, ProductController.collectAsync);
router.get('/collect-and-optimize', TurboGateway.throttle(10, 60000), ProductController.collectAndOptimize);
router.get('/:id/arbitrage-analyze', requireTraceContext, ProductController.analyzeArbitrage);
router.get('/visual-match', TurboGateway.cache(600), ProductController.findSimilar);
router.post('/:id/review', requireTraceContext, requirePermission('product:write'), ProductController.approve);
router.post('/:id/pulse', requireTraceContext, ProductController.checkPulse);
router.post('/:id/wash', requireTraceContext, requirePermission('product:write'), ProductController.washAndLocalize);
router.post('/:id/inquiry', requireTraceContext, requirePermission('product:write'), ProductController.generateInquiry);
router.get('/:id/price-advice', ProductController.getPriceAdvice);
router.get('/:id', TurboGateway.cache(300), ProductController.getById);
router.post('/', requireTraceContext, requirePermission('product:write'), ProductController.create);
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;