Optimize videos list SQL queries workflow

pull/2393/head
Chocobozzz 2020-01-08 11:36:37 +01:00
parent 8ee988c316
commit ddc07312b0
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
1 changed files with 12 additions and 9 deletions

View File

@ -1750,17 +1750,25 @@ export class VideoModel extends Model<VideoModel> {
]
}
const [ count, ids ] = await Promise.all([
const [ count, rows ] = await Promise.all([
countVideos
? VideoModel.scope(countScope).count(countQuery)
: Promise.resolve<number>(undefined),
VideoModel.scope(idsScope)
.findAll(query)
.findAll(Object.assign({}, query, { raw: true }))
.then(rows => rows.map(r => r.id))
.then(ids => VideoModel.loadCompleteVideosForApi(ids, query, options))
])
if (ids.length === 0) return { data: [], total: count }
return {
data: rows,
total: count
}
}
private static loadCompleteVideosForApi (ids: number[], query: FindOptions, options: AvailableForListIDsOptions) {
if (ids.length === 0) return []
const secondQuery: FindOptions = {
offset: 0,
@ -1789,12 +1797,7 @@ export class VideoModel extends Model<VideoModel> {
]
})
const rows = await VideoModel.scope(apiScope).findAll(secondQuery)
return {
data: rows,
total: count
}
return VideoModel.scope(apiScope).findAll(secondQuery)
}
private static isPrivacyForFederation (privacy: VideoPrivacy) {