]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/controllers/api/search.ts
Add videos list filters
[github/Chocobozzz/PeerTube.git] / server / controllers / api / search.ts
1 import * as express from 'express'
2 import { buildNSFWFilter } from '../../helpers/express-utils'
3 import { getFormattedObjects } from '../../helpers/utils'
4 import { VideoModel } from '../../models/video/video'
5 import {
6 asyncMiddleware,
7 commonVideosFiltersValidator,
8 optionalAuthenticate,
9 paginationValidator,
10 searchValidator,
11 setDefaultPagination,
12 setDefaultSearchSort,
13 videosSearchSortValidator
14 } from '../../middlewares'
15 import { VideosSearchQuery } from '../../../shared/models/search'
16
17 const searchRouter = express.Router()
18
19 searchRouter.get('/videos',
20 paginationValidator,
21 setDefaultPagination,
22 videosSearchSortValidator,
23 setDefaultSearchSort,
24 optionalAuthenticate,
25 commonVideosFiltersValidator,
26 searchValidator,
27 asyncMiddleware(searchVideos)
28 )
29
30 // ---------------------------------------------------------------------------
31
32 export { searchRouter }
33
34 // ---------------------------------------------------------------------------
35
36 async function searchVideos (req: express.Request, res: express.Response) {
37 const query: VideosSearchQuery = req.query
38
39 const options = Object.assign(query, { nsfw: buildNSFWFilter(res, query.nsfw) })
40 const resultList = await VideoModel.searchAndPopulateAccountAndServer(options)
41
42 return res.json(getFormattedObjects(resultList.data, resultList.total))
43 }