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