| 123456789101112131415161718192021222324252627282930313233343536373839404142 |
- import { Router } from 'express';
- import { query } from 'express-validator';
- import { authenticate } from '../middleware/auth.js';
- import { asyncHandler } from '../middleware/error.js';
- import { validateRequest } from '../middleware/validate.js';
- import { WorkDayStatisticsService } from '../services/WorkDayStatisticsService.js';
- const router = Router();
- const workDayStatisticsService = new WorkDayStatisticsService();
- router.use(authenticate);
- /**
- * GET /api/dashboard/trend
- * 获取数据趋势(直接调用 Node 统计服务,不再经 Python 转发)
- * 按平台分组返回,每个平台一条曲线
- *
- * 查询参数:
- * - days: 天数(默认30天)
- * - account_id: 账号ID(可选,不填则查询所有平台)
- */
- router.get(
- '/trend',
- [
- query('days').optional().isInt({ min: 1, max: 30 }).withMessage('days 必须是 1-30 之间的整数'),
- query('account_id').optional().isInt().withMessage('account_id 必须是整数'),
- validateRequest,
- ],
- asyncHandler(async (req, res) => {
- const days = req.query.days ? parseInt(req.query.days as string) : 30;
- const accountId = req.query.account_id ? parseInt(req.query.account_id as string) : undefined;
- const data = await workDayStatisticsService.getTrend(req.user!.userId, {
- days,
- accountId,
- });
- return res.json({ success: true, data });
- })
- );
- export default router;
|