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