type AvailableForListOptions = {
actorId: number
+ search?: string
}
type AvailableWithStatsOptions = {
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 = {
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,
},
required: true
}
- ]
+ ],
+ where
}
const scopes: string | ScopeOptions | (string | ScopeOptions)[] = [ ScopeNames.WITH_ACTOR ]