video-rates.ts 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import * as express from 'express'
  2. import { body, param, query } from 'express-validator'
  3. import { isIdOrUUIDValid } from '../../../helpers/custom-validators/misc'
  4. import { isRatingValid } from '../../../helpers/custom-validators/video-rates'
  5. import { isVideoRatingTypeValid } from '../../../helpers/custom-validators/videos'
  6. import { logger } from '../../../helpers/logger'
  7. import { areValidationErrors } from '../utils'
  8. import { AccountVideoRateModel } from '../../../models/account/account-video-rate'
  9. import { VideoRateType } from '../../../../shared/models/videos'
  10. import { isAccountNameValid } from '../../../helpers/custom-validators/accounts'
  11. import { doesVideoExist } from '../../../helpers/middlewares'
  12. import { HttpStatusCode } from '../../../../shared/core-utils/miscs/http-error-codes'
  13. const videoUpdateRateValidator = [
  14. param('id').custom(isIdOrUUIDValid).not().isEmpty().withMessage('Should have a valid id'),
  15. body('rating').custom(isVideoRatingTypeValid).withMessage('Should have a valid rate type'),
  16. async (req: express.Request, res: express.Response, next: express.NextFunction) => {
  17. logger.debug('Checking videoRate parameters', { parameters: req.body })
  18. if (areValidationErrors(req, res)) return
  19. if (!await doesVideoExist(req.params.id, res)) return
  20. return next()
  21. }
  22. ]
  23. const getAccountVideoRateValidatorFactory = function (rateType: VideoRateType) {
  24. return [
  25. param('name').custom(isAccountNameValid).withMessage('Should have a valid account name'),
  26. param('videoId').custom(isIdOrUUIDValid).not().isEmpty().withMessage('Should have a valid videoId'),
  27. async (req: express.Request, res: express.Response, next: express.NextFunction) => {
  28. logger.debug('Checking videoCommentGetValidator parameters.', { parameters: req.params })
  29. if (areValidationErrors(req, res)) return
  30. const rate = await AccountVideoRateModel.loadLocalAndPopulateVideo(rateType, req.params.name, req.params.videoId)
  31. if (!rate) {
  32. return res.status(HttpStatusCode.NOT_FOUND_404)
  33. .json({ error: 'Video rate not found' })
  34. }
  35. res.locals.accountVideoRate = rate
  36. return next()
  37. }
  38. ]
  39. }
  40. const videoRatingValidator = [
  41. query('rating').optional().custom(isRatingValid).withMessage('Value must be one of "like" or "dislike"'),
  42. (req: express.Request, res: express.Response, next: express.NextFunction) => {
  43. logger.debug('Checking rating parameter', { parameters: req.params })
  44. if (areValidationErrors(req, res)) return
  45. return next()
  46. }
  47. ]
  48. // ---------------------------------------------------------------------------
  49. export {
  50. videoUpdateRateValidator,
  51. getAccountVideoRateValidatorFactory,
  52. videoRatingValidator
  53. }