]>
Commit | Line | Data |
---|---|---|
1 | import express from 'express' | |
2 | import { LocalVideoViewerModel } from '@server/models/view/local-video-viewer' | |
3 | import { VideoStatsOverallQuery, VideoStatsTimeserieMetric, VideoStatsTimeserieQuery } from '@shared/models' | |
4 | import { | |
5 | asyncMiddleware, | |
6 | authenticate, | |
7 | videoOverallStatsValidator, | |
8 | videoRetentionStatsValidator, | |
9 | videoTimeserieStatsValidator | |
10 | } from '../../../middlewares' | |
11 | ||
12 | const statsRouter = express.Router() | |
13 | ||
14 | statsRouter.get('/:videoId/stats/overall', | |
15 | authenticate, | |
16 | asyncMiddleware(videoOverallStatsValidator), | |
17 | asyncMiddleware(getOverallStats) | |
18 | ) | |
19 | ||
20 | statsRouter.get('/:videoId/stats/timeseries/:metric', | |
21 | authenticate, | |
22 | asyncMiddleware(videoTimeserieStatsValidator), | |
23 | asyncMiddleware(getTimeserieStats) | |
24 | ) | |
25 | ||
26 | statsRouter.get('/:videoId/stats/retention', | |
27 | authenticate, | |
28 | asyncMiddleware(videoRetentionStatsValidator), | |
29 | asyncMiddleware(getRetentionStats) | |
30 | ) | |
31 | ||
32 | // --------------------------------------------------------------------------- | |
33 | ||
34 | export { | |
35 | statsRouter | |
36 | } | |
37 | ||
38 | // --------------------------------------------------------------------------- | |
39 | ||
40 | async function getOverallStats (req: express.Request, res: express.Response) { | |
41 | const video = res.locals.videoAll | |
42 | const query = req.query as VideoStatsOverallQuery | |
43 | ||
44 | const stats = await LocalVideoViewerModel.getOverallStats({ | |
45 | video, | |
46 | startDate: query.startDate, | |
47 | endDate: query.endDate | |
48 | }) | |
49 | ||
50 | return res.json(stats) | |
51 | } | |
52 | ||
53 | async function getRetentionStats (req: express.Request, res: express.Response) { | |
54 | const video = res.locals.videoAll | |
55 | ||
56 | const stats = await LocalVideoViewerModel.getRetentionStats(video) | |
57 | ||
58 | return res.json(stats) | |
59 | } | |
60 | ||
61 | async function getTimeserieStats (req: express.Request, res: express.Response) { | |
62 | const video = res.locals.videoAll | |
63 | const metric = req.params.metric as VideoStatsTimeserieMetric | |
64 | ||
65 | const query = req.query as VideoStatsTimeserieQuery | |
66 | ||
67 | const stats = await LocalVideoViewerModel.getTimeserieStats({ | |
68 | video, | |
69 | metric, | |
70 | startDate: query.startDate ?? video.createdAt.toISOString(), | |
71 | endDate: query.endDate ?? new Date().toISOString() | |
72 | }) | |
73 | ||
74 | return res.json(stats) | |
75 | } |