]>
Commit | Line | Data |
---|---|---|
b2111066 C |
1 | import express from 'express' |
2 | import { LocalVideoViewerModel } from '@server/models/view/local-video-viewer' | |
901bcf5c | 3 | import { VideoStatsTimeserieMetric, VideoStatsTimeserieQuery } from '@shared/models' |
b2111066 C |
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 | ||
43 | const stats = await LocalVideoViewerModel.getOverallStats(video) | |
44 | ||
45 | return res.json(stats) | |
46 | } | |
47 | ||
48 | async function getRetentionStats (req: express.Request, res: express.Response) { | |
49 | const video = res.locals.videoAll | |
50 | ||
51 | const stats = await LocalVideoViewerModel.getRetentionStats(video) | |
52 | ||
53 | return res.json(stats) | |
54 | } | |
55 | ||
56 | async function getTimeserieStats (req: express.Request, res: express.Response) { | |
57 | const video = res.locals.videoAll | |
58 | const metric = req.params.metric as VideoStatsTimeserieMetric | |
59 | ||
901bcf5c C |
60 | const query = req.query as VideoStatsTimeserieQuery |
61 | ||
b2111066 C |
62 | const stats = await LocalVideoViewerModel.getTimeserieStats({ |
63 | video, | |
901bcf5c C |
64 | metric, |
65 | startDate: query.startDate ?? buildOneMonthAgo().toISOString(), | |
66 | endDate: query.endDate ?? new Date().toISOString() | |
b2111066 C |
67 | }) |
68 | ||
69 | return res.json(stats) | |
70 | } | |
901bcf5c C |
71 | |
72 | function buildOneMonthAgo () { | |
73 | const monthAgo = new Date() | |
74 | monthAgo.setHours(0, 0, 0, 0) | |
75 | ||
76 | monthAgo.setDate(monthAgo.getDate() - 29) | |
77 | ||
78 | return monthAgo | |
79 | } |