From d525fc399a14a8b16eaad6d4c0bc0a9c4093c3c9 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Fri, 20 Jul 2018 14:35:18 +0200 Subject: Add videos list filters --- server/controllers/api/accounts.ts | 12 +++++++++--- server/controllers/api/search.ts | 16 ++++++++-------- server/controllers/api/video-channel.ts | 12 +++++++++--- server/controllers/api/videos/index.ts | 12 +++++++++--- 4 files changed, 35 insertions(+), 17 deletions(-) (limited to 'server/controllers/api') diff --git a/server/controllers/api/accounts.ts b/server/controllers/api/accounts.ts index 8e937276c..0117fc8c6 100644 --- a/server/controllers/api/accounts.ts +++ b/server/controllers/api/accounts.ts @@ -1,7 +1,7 @@ import * as express from 'express' import { getFormattedObjects } from '../../helpers/utils' import { - asyncMiddleware, + asyncMiddleware, commonVideosFiltersValidator, listVideoAccountChannelsValidator, optionalAuthenticate, paginationValidator, @@ -11,7 +11,7 @@ import { import { accountsNameWithHostGetValidator, accountsSortValidator, videosSortValidator } from '../../middlewares/validators' import { AccountModel } from '../../models/account/account' import { VideoModel } from '../../models/video/video' -import { isNSFWHidden } from '../../helpers/express-utils' +import { buildNSFWFilter } from '../../helpers/express-utils' import { VideoChannelModel } from '../../models/video/video-channel' const accountsRouter = express.Router() @@ -36,6 +36,7 @@ accountsRouter.get('/:accountName/videos', setDefaultSort, setDefaultPagination, optionalAuthenticate, + commonVideosFiltersValidator, asyncMiddleware(listAccountVideos) ) @@ -77,7 +78,12 @@ async function listAccountVideos (req: express.Request, res: express.Response, n start: req.query.start, count: req.query.count, sort: req.query.sort, - hideNSFW: isNSFWHidden(res), + categoryOneOf: req.query.categoryOneOf, + licenceOneOf: req.query.licenceOneOf, + languageOneOf: req.query.languageOneOf, + tagsOneOf: req.query.tagsOneOf, + tagsAllOf: req.query.tagsAllOf, + nsfw: buildNSFWFilter(res, req.query.nsfw), withFiles: false, accountId: account.id }) diff --git a/server/controllers/api/search.ts b/server/controllers/api/search.ts index 2ff340b59..f810c7452 100644 --- a/server/controllers/api/search.ts +++ b/server/controllers/api/search.ts @@ -1,9 +1,10 @@ import * as express from 'express' -import { isNSFWHidden } from '../../helpers/express-utils' +import { buildNSFWFilter } from '../../helpers/express-utils' import { getFormattedObjects } from '../../helpers/utils' import { VideoModel } from '../../models/video/video' import { asyncMiddleware, + commonVideosFiltersValidator, optionalAuthenticate, paginationValidator, searchValidator, @@ -11,6 +12,7 @@ import { setDefaultSearchSort, videosSearchSortValidator } from '../../middlewares' +import { VideosSearchQuery } from '../../../shared/models/search' const searchRouter = express.Router() @@ -20,6 +22,7 @@ searchRouter.get('/videos', videosSearchSortValidator, setDefaultSearchSort, optionalAuthenticate, + commonVideosFiltersValidator, searchValidator, asyncMiddleware(searchVideos) ) @@ -31,13 +34,10 @@ export { searchRouter } // --------------------------------------------------------------------------- async function searchVideos (req: express.Request, res: express.Response) { - const resultList = await VideoModel.searchAndPopulateAccountAndServer( - req.query.search as string, - req.query.start as number, - req.query.count as number, - req.query.sort as string, - isNSFWHidden(res) - ) + const query: VideosSearchQuery = req.query + + const options = Object.assign(query, { nsfw: buildNSFWFilter(res, query.nsfw) }) + const resultList = await VideoModel.searchAndPopulateAccountAndServer(options) return res.json(getFormattedObjects(resultList.data, resultList.total)) } diff --git a/server/controllers/api/video-channel.ts b/server/controllers/api/video-channel.ts index 1707732ee..0488ba8f5 100644 --- a/server/controllers/api/video-channel.ts +++ b/server/controllers/api/video-channel.ts @@ -3,7 +3,7 @@ import { getFormattedObjects, resetSequelizeInstance } from '../../helpers/utils import { asyncMiddleware, asyncRetryTransactionMiddleware, - authenticate, + authenticate, commonVideosFiltersValidator, optionalAuthenticate, paginationValidator, setDefaultPagination, @@ -19,7 +19,7 @@ import { videosSortValidator } from '../../middlewares/validators' import { sendUpdateActor } from '../../lib/activitypub/send' import { VideoChannelCreate, VideoChannelUpdate } from '../../../shared' import { createVideoChannel } from '../../lib/video-channel' -import { createReqFiles, isNSFWHidden } from '../../helpers/express-utils' +import { createReqFiles, buildNSFWFilter } from '../../helpers/express-utils' import { setAsyncActorKeys } from '../../lib/activitypub' import { AccountModel } from '../../models/account/account' import { CONFIG, IMAGE_MIMETYPE_EXT, sequelizeTypescript } from '../../initializers' @@ -79,6 +79,7 @@ videoChannelRouter.get('/:id/videos', setDefaultSort, setDefaultPagination, optionalAuthenticate, + commonVideosFiltersValidator, asyncMiddleware(listVideoChannelVideos) ) @@ -189,7 +190,12 @@ async function listVideoChannelVideos (req: express.Request, res: express.Respon start: req.query.start, count: req.query.count, sort: req.query.sort, - hideNSFW: isNSFWHidden(res), + categoryOneOf: req.query.categoryOneOf, + licenceOneOf: req.query.licenceOneOf, + languageOneOf: req.query.languageOneOf, + tagsOneOf: req.query.tagsOneOf, + tagsAllOf: req.query.tagsAllOf, + nsfw: buildNSFWFilter(res, req.query.nsfw), withFiles: false, videoChannelId: videoChannelInstance.id }) diff --git a/server/controllers/api/videos/index.ts b/server/controllers/api/videos/index.ts index 547522123..101183eab 100644 --- a/server/controllers/api/videos/index.ts +++ b/server/controllers/api/videos/index.ts @@ -31,6 +31,7 @@ import { asyncMiddleware, asyncRetryTransactionMiddleware, authenticate, + commonVideosFiltersValidator, optionalAuthenticate, paginationValidator, setDefaultPagination, @@ -49,7 +50,7 @@ import { blacklistRouter } from './blacklist' import { videoCommentRouter } from './comment' import { rateVideoRouter } from './rate' import { VideoFilter } from '../../../../shared/models/videos/video-query.type' -import { createReqFiles, isNSFWHidden } from '../../../helpers/express-utils' +import { createReqFiles, buildNSFWFilter } from '../../../helpers/express-utils' import { ScheduleVideoUpdateModel } from '../../../models/video/schedule-video-update' import { videoCaptionsRouter } from './captions' @@ -90,6 +91,7 @@ videosRouter.get('/', setDefaultSort, setDefaultPagination, optionalAuthenticate, + commonVideosFiltersValidator, asyncMiddleware(listVideos) ) videosRouter.put('/:id', @@ -401,8 +403,12 @@ async function listVideos (req: express.Request, res: express.Response, next: ex start: req.query.start, count: req.query.count, sort: req.query.sort, - category: req.query.category, - hideNSFW: isNSFWHidden(res), + categoryOneOf: req.query.categoryOneOf, + licenceOneOf: req.query.licenceOneOf, + languageOneOf: req.query.languageOneOf, + tagsOneOf: req.query.tagsOneOf, + tagsAllOf: req.query.tagsAllOf, + nsfw: buildNSFWFilter(res, req.query.nsfw), filter: req.query.filter as VideoFilter, withFiles: false }) -- cgit v1.2.3