X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fmodels%2Fvideo%2Fvideo-channel.ts;h=9da965bbc20a1710db8e7e2d821cdfa7017bd230;hb=6fad8e51c47b9d07bea99b777c1f55c10f6d576d;hp=03a3cdf81da8c7c7f6d84cc89666bbc67936cbbe;hpb=17aa80ed016bafa3ccb071af3f86054033823284;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/models/video/video-channel.ts b/server/models/video/video-channel.ts index 03a3cdf81..9da965bbc 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,11 +310,18 @@ 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 + }) { + const { actorId } = parameters + const query = { - offset: start, - limit: count, - order: getSort(sort) + offset: parameters.start, + limit: parameters.count, + order: getSort(parameters.sort) } const scopes = { @@ -396,7 +404,23 @@ export class VideoChannelModel extends Model { count: number sort: string withStats?: boolean + search?: string }) { + const escapedSearch = VideoModel.sequelize.escape(options.search) + const escapedLikeSearch = VideoModel.sequelize.escape('%' + options.search + '%') + const where = options.search + ? { + [Op.or]: [ + Sequelize.literal( + 'lower(immutable_unaccent("VideoChannelModel"."name")) % lower(immutable_unaccent(' + escapedSearch + '))' + ), + Sequelize.literal( + 'lower(immutable_unaccent("VideoChannelModel"."name")) LIKE lower(immutable_unaccent(' + escapedLikeSearch + '))' + ) + ] + } + : null + const query = { offset: options.start, limit: options.count, @@ -409,7 +433,8 @@ export class VideoChannelModel extends Model { }, required: true } - ] + ], + where } const scopes: string | ScopeOptions | (string | ScopeOptions)[] = [ ScopeNames.WITH_ACTOR ]