type AvailableForListIDsOptions = {
serverAccountId: number
- actorId: number
+ followerActorId: number
includeLocalVideos: boolean
filter?: VideoFilter
categoryOneOf?: number[]
accountId?: number
videoChannelId?: number
trendingDays?: number
- user?: UserModel
+ user?: UserModel,
+ historyOfUser?: UserModel
}
@Scopes({
query.include.push(videoChannelInclude)
}
- if (options.actorId) {
+ if (options.followerActorId) {
let localVideosReq = ''
if (options.includeLocalVideos === true) {
localVideosReq = ' UNION ALL ' +
}
// Force actorId to be a number to avoid SQL injections
- const actorIdNumber = parseInt(options.actorId.toString(), 10)
+ const actorIdNumber = parseInt(options.followerActorId.toString(), 10)
query.where[ 'id' ][ Sequelize.Op.and ].push({
[ Sequelize.Op.in ]: Sequelize.literal(
'(' +
query.subQuery = false
}
+ if (options.historyOfUser) {
+ query.include.push({
+ model: UserVideoHistoryModel,
+ required: true,
+ where: {
+ userId: options.historyOfUser.id
+ }
+ })
+ }
+
return query
},
[ ScopeNames.WITH_ACCOUNT_DETAILS ]: {
filter?: VideoFilter,
accountId?: number,
videoChannelId?: number,
- actorId?: number
+ followerActorId?: number
trendingDays?: number,
- user?: UserModel
+ user?: UserModel,
+ historyOfUser?: UserModel
}, countVideos = true) {
if (options.filter && options.filter === 'all-local' && !options.user.hasRight(UserRight.SEE_ALL_VIDEOS)) {
throw new Error('Try to filter all-local but no user has not the see all videos right')
const serverActor = await getServerActor()
- // actorId === null has a meaning, so just check undefined
- const actorId = options.actorId !== undefined ? options.actorId : serverActor.id
+ // followerActorId === null has a meaning, so just check undefined
+ const followerActorId = options.followerActorId !== undefined ? options.followerActorId : serverActor.id
const queryOptions = {
- actorId,
+ followerActorId,
serverAccountId: serverActor.Account.id,
nsfw: options.nsfw,
categoryOneOf: options.categoryOneOf,
videoChannelId: options.videoChannelId,
includeLocalVideos: options.includeLocalVideos,
user: options.user,
+ historyOfUser: options.historyOfUser,
trendingDays
}
const serverActor = await getServerActor()
const queryOptions = {
- actorId: serverActor.id,
+ followerActorId: serverActor.id,
serverAccountId: serverActor.Account.id,
includeLocalVideos: options.includeLocalVideos,
nsfw: options.nsfw,
// threshold corresponds to how many video the field should have to be returned
static async getRandomFieldSamples (field: 'category' | 'channelId', threshold: number, count: number) {
const serverActor = await getServerActor()
- const actorId = serverActor.id
+ const followerActorId = serverActor.id
const scopeOptions: AvailableForListIDsOptions = {
serverAccountId: serverActor.Account.id,
- actorId,
+ followerActorId,
includeLocalVideos: true
}
}
const [ count, rowsId ] = await Promise.all([
- countVideos ? VideoModel.scope(countScope).count(countQuery) : Promise.resolve(undefined),
+ countVideos ? VideoModel.scope(countScope).count(countQuery) : Promise.resolve<number>(undefined),
VideoModel.scope(idsScope).findAll(query)
])
const ids = rowsId.map(r => r.id)