Add videos list filters
[oweals/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 }