1 import express from 'express'
2 import { param } from 'express-validator'
3 import { isValidStatTimeserieMetric } from '@server/helpers/custom-validators/video-stats'
4 import { HttpStatusCode, UserRight } from '@shared/models'
5 import { logger } from '../../../helpers/logger'
6 import { areValidationErrors, checkUserCanManageVideo, doesVideoExist, isValidVideoIdParam } from '../shared'
8 const videoOverallStatsValidator = [
9 isValidVideoIdParam('videoId'),
11 async (req: express.Request, res: express.Response, next: express.NextFunction) => {
12 logger.debug('Checking videoOverallStatsValidator parameters', { parameters: req.body })
14 if (areValidationErrors(req, res)) return
15 if (!await commonStatsCheck(req, res)) return
21 const videoRetentionStatsValidator = [
22 isValidVideoIdParam('videoId'),
24 async (req: express.Request, res: express.Response, next: express.NextFunction) => {
25 logger.debug('Checking videoRetentionStatsValidator parameters', { parameters: req.body })
27 if (areValidationErrors(req, res)) return
28 if (!await commonStatsCheck(req, res)) return
30 if (res.locals.videoAll.isLive) {
32 status: HttpStatusCode.BAD_REQUEST_400,
33 message: 'Cannot get retention stats of live video'
41 const videoTimeserieStatsValidator = [
42 isValidVideoIdParam('videoId'),
45 .custom(isValidStatTimeserieMetric)
46 .withMessage('Should have a valid timeserie metric'),
48 async (req: express.Request, res: express.Response, next: express.NextFunction) => {
49 logger.debug('Checking videoTimeserieStatsValidator parameters', { parameters: req.body })
51 if (areValidationErrors(req, res)) return
52 if (!await commonStatsCheck(req, res)) return
58 // ---------------------------------------------------------------------------
61 videoOverallStatsValidator,
62 videoTimeserieStatsValidator,
63 videoRetentionStatsValidator
66 // ---------------------------------------------------------------------------
68 async function commonStatsCheck (req: express.Request, res: express.Response) {
69 if (!await doesVideoExist(req.params.videoId, res, 'all')) return false
70 if (!checkUserCanManageVideo(res.locals.oauth.token.User, res.locals.videoAll, UserRight.SEE_ALL_VIDEOS, res)) return false