import { Router } from 'express'; import type { Request, Response } from 'express'; import type { ApiResponse, EventsQueryParams } from '../lib/types'; import { getEvents, getEventsSummary, getTimeSeriesData, getGeoAnalytics, getDeviceAnalytics } from '../lib/analytics'; const router = Router(); // 获取事件列表 router.get('/', async (req: Request, res: Response) => { try { const params: EventsQueryParams = { startTime: req.query.startTime as string, endTime: req.query.endTime as string, eventType: req.query.eventType as string, linkId: req.query.linkId as string, linkSlug: req.query.linkSlug as string, userId: req.query.userId as string, teamId: req.query.teamId as string, projectId: req.query.projectId as string, page: req.query.page ? parseInt(req.query.page as string, 10) : 1, pageSize: req.query.pageSize ? parseInt(req.query.pageSize as string, 10) : 20, sortBy: req.query.sortBy as string, sortOrder: req.query.sortOrder as 'asc' | 'desc' }; const { events, total } = await getEvents(params); const response: ApiResponse = { success: true, data: events, meta: { total, page: params.page, pageSize: params.pageSize } }; res.json(response); } catch (error) { const response: ApiResponse = { success: false, error: error instanceof Error ? error.message : 'Unknown error occurred' }; res.status(500).json(response); } }); // 获取事件概览 router.get('/summary', async (req: Request, res: Response) => { try { const summary = await getEventsSummary({ startTime: req.query.startTime as string, endTime: req.query.endTime as string, linkId: req.query.linkId as string }); const response: ApiResponse = { success: true, data: summary }; res.json(response); } catch (error) { const response: ApiResponse = { success: false, error: error instanceof Error ? error.message : 'Unknown error occurred' }; res.status(500).json(response); } }); // 获取时间序列数据 router.get('/time-series', async (req: Request, res: Response) => { try { const data = await getTimeSeriesData({ startTime: req.query.startTime as string, endTime: req.query.endTime as string, linkId: req.query.linkId as string, granularity: (req.query.granularity || 'day') as 'hour' | 'day' | 'week' | 'month' }); const response: ApiResponse = { success: true, data }; res.json(response); } catch (error) { const response: ApiResponse = { success: false, error: error instanceof Error ? error.message : 'Unknown error occurred' }; res.status(500).json(response); } }); // 获取地理位置分析 router.get('/geo', async (req: Request, res: Response) => { try { const data = await getGeoAnalytics({ startTime: req.query.startTime as string, endTime: req.query.endTime as string, linkId: req.query.linkId as string, groupBy: (req.query.groupBy || 'country') as 'country' | 'city' }); const response: ApiResponse = { success: true, data }; res.json(response); } catch (error) { const response: ApiResponse = { success: false, error: error instanceof Error ? error.message : 'Unknown error occurred' }; res.status(500).json(response); } }); // 获取设备分析 router.get('/devices', async (req: Request, res: Response) => { try { const data = await getDeviceAnalytics({ startTime: req.query.startTime as string, endTime: req.query.endTime as string, linkId: req.query.linkId as string }); const response: ApiResponse = { success: true, data }; res.json(response); } catch (error) { const response: ApiResponse = { success: false, error: error instanceof Error ? error.message : 'Unknown error occurred' }; res.status(500).json(response); } }); export default router;