aboutsummaryrefslogtreecommitdiffhomepage
path: root/server
diff options
context:
space:
mode:
Diffstat (limited to 'server')
-rw-r--r--server/controllers/api/video-channel.ts11
-rw-r--r--server/middlewares/validators/search.ts15
-rw-r--r--server/models/video/video-channel.ts19
3 files changed, 37 insertions, 8 deletions
diff --git a/server/controllers/api/video-channel.ts b/server/controllers/api/video-channel.ts
index 4d8cfa340..d96998209 100644
--- a/server/controllers/api/video-channel.ts
+++ b/server/controllers/api/video-channel.ts
@@ -16,7 +16,7 @@ import {
16 videoPlaylistsSortValidator 16 videoPlaylistsSortValidator
17} from '../../middlewares' 17} from '../../middlewares'
18import { VideoChannelModel } from '../../models/video/video-channel' 18import { VideoChannelModel } from '../../models/video/video-channel'
19import { videoChannelsNameWithHostValidator, videosSortValidator } from '../../middlewares/validators' 19import { videoChannelsNameWithHostValidator, videosSortValidator, videoChannelsOwnSearchValidator } from '../../middlewares/validators'
20import { sendUpdateActor } from '../../lib/activitypub/send' 20import { sendUpdateActor } from '../../lib/activitypub/send'
21import { VideoChannelCreate, VideoChannelUpdate } from '../../../shared' 21import { VideoChannelCreate, VideoChannelUpdate } from '../../../shared'
22import { createLocalVideoChannel, federateAllVideosOfChannel } from '../../lib/video-channel' 22import { createLocalVideoChannel, federateAllVideosOfChannel } from '../../lib/video-channel'
@@ -48,6 +48,7 @@ videoChannelRouter.get('/',
48 videoChannelsSortValidator, 48 videoChannelsSortValidator,
49 setDefaultSort, 49 setDefaultSort,
50 setDefaultPagination, 50 setDefaultPagination,
51 videoChannelsOwnSearchValidator,
51 asyncMiddleware(listVideoChannels) 52 asyncMiddleware(listVideoChannels)
52) 53)
53 54
@@ -114,7 +115,13 @@ export {
114 115
115async function listVideoChannels (req: express.Request, res: express.Response) { 116async function listVideoChannels (req: express.Request, res: express.Response) {
116 const serverActor = await getServerActor() 117 const serverActor = await getServerActor()
117 const resultList = await VideoChannelModel.listForApi(serverActor.id, req.query.start, req.query.count, req.query.sort) 118 const resultList = await VideoChannelModel.listForApi({
119 actorId: serverActor.id,
120 start: req.query.start,
121 count: req.query.count,
122 sort: req.query.sort,
123 search: req.query.search
124 })
118 125
119 return res.json(getFormattedObjects(resultList.data, resultList.total)) 126 return res.json(getFormattedObjects(resultList.data, resultList.total))
120} 127}
diff --git a/server/middlewares/validators/search.ts b/server/middlewares/validators/search.ts
index b4faa8894..7313bc055 100644
--- a/server/middlewares/validators/search.ts
+++ b/server/middlewares/validators/search.ts
@@ -41,9 +41,22 @@ const videoChannelsSearchValidator = [
41 } 41 }
42] 42]
43 43
44const videoChannelsOwnSearchValidator = [
45 query('search').optional().not().isEmpty().withMessage('Should have a valid search'),
46
47 (req: express.Request, res: express.Response, next: express.NextFunction) => {
48 logger.debug('Checking video channels search query', { parameters: req.query })
49
50 if (areValidationErrors(req, res)) return
51
52 return next()
53 }
54]
55
44// --------------------------------------------------------------------------- 56// ---------------------------------------------------------------------------
45 57
46export { 58export {
59 videosSearchValidator,
47 videoChannelsSearchValidator, 60 videoChannelsSearchValidator,
48 videosSearchValidator 61 videoChannelsOwnSearchValidator
49} 62}
diff --git a/server/models/video/video-channel.ts b/server/models/video/video-channel.ts
index 03a3cdf81..f3401fb9c 100644
--- a/server/models/video/video-channel.ts
+++ b/server/models/video/video-channel.ts
@@ -54,6 +54,7 @@ export enum ScopeNames {
54 54
55type AvailableForListOptions = { 55type AvailableForListOptions = {
56 actorId: number 56 actorId: number
57 search?: string
57} 58}
58 59
59type AvailableWithStatsOptions = { 60type AvailableWithStatsOptions = {
@@ -309,15 +310,23 @@ export class VideoChannelModel extends Model<VideoChannelModel> {
309 return VideoChannelModel.count(query) 310 return VideoChannelModel.count(query)
310 } 311 }
311 312
312 static listForApi (actorId: number, start: number, count: number, sort: string) { 313 static listForApi (parameters: {
314 actorId: number
315 start: number
316 count: number
317 sort: string
318 search?: string
319 }) {
320 const { actorId, search } = parameters
321
313 const query = { 322 const query = {
314 offset: start, 323 offset: parameters.start,
315 limit: count, 324 limit: parameters.count,
316 order: getSort(sort) 325 order: getSort(parameters.sort)
317 } 326 }
318 327
319 const scopes = { 328 const scopes = {
320 method: [ ScopeNames.FOR_API, { actorId } as AvailableForListOptions ] 329 method: [ ScopeNames.FOR_API, { actorId, search } as AvailableForListOptions ]
321 } 330 }
322 return VideoChannelModel 331 return VideoChannelModel
323 .scope(scopes) 332 .scope(scopes)