+ static searchForApi (options: {
+ actorId: number
+ search: string
+ start: number
+ count: number
+ sort: string
+ }) {
+ const attributesInclude = []
+ const escapedSearch = VideoModel.sequelize.escape(options.search)
+ const escapedLikeSearch = VideoModel.sequelize.escape('%' + options.search + '%')
+ attributesInclude.push(createSimilarityAttribute('VideoChannelModel.name', options.search))
+
+ const query = {
+ attributes: {
+ include: attributesInclude
+ },
+ offset: options.start,
+ limit: options.count,
+ order: getSort(options.sort),
+ where: {
+ [Sequelize.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 + '))'
+ )
+ ]
+ }
+ }
+
+ const scopes = {
+ method: [ ScopeNames.AVAILABLE_FOR_LIST, { actorId: options.actorId } as AvailableForListOptions ]
+ }
+ return VideoChannelModel
+ .scope(scopes)
+ .findAndCountAll(query)