From 901bcf5c188ea79350fecd499ad76460b866617b Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Thu, 7 Apr 2022 10:53:35 +0200 Subject: Add ability to set start/end date to timeserie --- .../middlewares/validators/videos/video-stats.ts | 41 ++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) (limited to 'server/middlewares') diff --git a/server/middlewares/validators/videos/video-stats.ts b/server/middlewares/validators/videos/video-stats.ts index 358b6b473..12509abde 100644 --- a/server/middlewares/validators/videos/video-stats.ts +++ b/server/middlewares/validators/videos/video-stats.ts @@ -1,7 +1,9 @@ import express from 'express' -import { param } from 'express-validator' +import { param, query } from 'express-validator' +import { isDateValid } from '@server/helpers/custom-validators/misc' import { isValidStatTimeserieMetric } from '@server/helpers/custom-validators/video-stats' -import { HttpStatusCode, UserRight } from '@shared/models' +import { STATS_TIMESERIE } from '@server/initializers/constants' +import { HttpStatusCode, UserRight, VideoStatsTimeserieQuery } from '@shared/models' import { logger } from '../../../helpers/logger' import { areValidationErrors, checkUserCanManageVideo, doesVideoExist, isValidVideoIdParam } from '../shared' @@ -45,12 +47,40 @@ const videoTimeserieStatsValidator = [ .custom(isValidStatTimeserieMetric) .withMessage('Should have a valid timeserie metric'), + query('startDate') + .optional() + .custom(isDateValid) + .withMessage('Should have a valid start date'), + + query('endDate') + .optional() + .custom(isDateValid) + .withMessage('Should have a valid end date'), + async (req: express.Request, res: express.Response, next: express.NextFunction) => { logger.debug('Checking videoTimeserieStatsValidator parameters', { parameters: req.body }) if (areValidationErrors(req, res)) return if (!await commonStatsCheck(req, res)) return + const query: VideoStatsTimeserieQuery = req.query + if ( + (query.startDate && !query.endDate) || + (!query.startDate && query.endDate) + ) { + return res.fail({ + status: HttpStatusCode.BAD_REQUEST_400, + message: 'Both start date and end date should be defined if one of them is specified' + }) + } + + if (query.startDate && getIntervalByDays(query.startDate, query.endDate) > STATS_TIMESERIE.MAX_DAYS) { + return res.fail({ + status: HttpStatusCode.BAD_REQUEST_400, + message: 'Star date and end date interval is too big' + }) + } + return next() } ] @@ -71,3 +101,10 @@ async function commonStatsCheck (req: express.Request, res: express.Response) { return true } + +function getIntervalByDays (startDateString: string, endDateString: string) { + const startDate = new Date(startDateString) + const endDate = new Date(endDateString) + + return (endDate.getTime() - startDate.getTime()) / 1000 / 86400 +} -- cgit v1.2.3