From bc99dfe54e093e69ba8fd06d36b36fbbda3f45de Mon Sep 17 00:00:00 2001 From: Rigel Kent Date: Wed, 15 Jul 2020 11:17:03 +0200 Subject: variable columns for users list, more columns possible, badge display for statuses --- server/controllers/api/video-channel.ts | 11 +++++++++-- server/middlewares/validators/search.ts | 15 ++++++++++++++- server/models/video/video-channel.ts | 19 ++++++++++++++----- 3 files changed, 37 insertions(+), 8 deletions(-) (limited to 'server') 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 { videoPlaylistsSortValidator } from '../../middlewares' import { VideoChannelModel } from '../../models/video/video-channel' -import { videoChannelsNameWithHostValidator, videosSortValidator } from '../../middlewares/validators' +import { videoChannelsNameWithHostValidator, videosSortValidator, videoChannelsOwnSearchValidator } from '../../middlewares/validators' import { sendUpdateActor } from '../../lib/activitypub/send' import { VideoChannelCreate, VideoChannelUpdate } from '../../../shared' import { createLocalVideoChannel, federateAllVideosOfChannel } from '../../lib/video-channel' @@ -48,6 +48,7 @@ videoChannelRouter.get('/', videoChannelsSortValidator, setDefaultSort, setDefaultPagination, + videoChannelsOwnSearchValidator, asyncMiddleware(listVideoChannels) ) @@ -114,7 +115,13 @@ export { async function listVideoChannels (req: express.Request, res: express.Response) { const serverActor = await getServerActor() - const resultList = await VideoChannelModel.listForApi(serverActor.id, req.query.start, req.query.count, req.query.sort) + const resultList = await VideoChannelModel.listForApi({ + actorId: serverActor.id, + start: req.query.start, + count: req.query.count, + sort: req.query.sort, + search: req.query.search + }) return res.json(getFormattedObjects(resultList.data, resultList.total)) } 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 = [ } ] +const videoChannelsOwnSearchValidator = [ + query('search').optional().not().isEmpty().withMessage('Should have a valid search'), + + (req: express.Request, res: express.Response, next: express.NextFunction) => { + logger.debug('Checking video channels search query', { parameters: req.query }) + + if (areValidationErrors(req, res)) return + + return next() + } +] + // --------------------------------------------------------------------------- export { + videosSearchValidator, videoChannelsSearchValidator, - videosSearchValidator + videoChannelsOwnSearchValidator } 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 { type AvailableForListOptions = { actorId: number + search?: string } type AvailableWithStatsOptions = { @@ -309,15 +310,23 @@ export class VideoChannelModel extends Model { return VideoChannelModel.count(query) } - static listForApi (actorId: number, start: number, count: number, sort: string) { + static listForApi (parameters: { + actorId: number + start: number + count: number + sort: string + search?: string + }) { + const { actorId, search } = parameters + const query = { - offset: start, - limit: count, - order: getSort(sort) + offset: parameters.start, + limit: parameters.count, + order: getSort(parameters.sort) } const scopes = { - method: [ ScopeNames.FOR_API, { actorId } as AvailableForListOptions ] + method: [ ScopeNames.FOR_API, { actorId, search } as AvailableForListOptions ] } return VideoChannelModel .scope(scopes) -- cgit v1.2.3