Optimize list my playlists SQL query

This commit is contained in:
Chocobozzz
2020-01-09 09:26:59 +01:00
parent 119b16e5ac
commit 6b0c3c7ca9
3 changed files with 36 additions and 23 deletions

View File

@@ -68,7 +68,7 @@ type AvailableForListOptions = {
type?: VideoPlaylistType
accountId?: number
videoChannelId?: number
privateAndUnlisted?: boolean,
listMyPlaylists?: boolean,
search?: string
}
@@ -124,27 +124,31 @@ type AvailableForListOptions = {
]
},
[ ScopeNames.AVAILABLE_FOR_LIST ]: (options: AvailableForListOptions) => {
// Only list local playlists OR playlists that are on an instance followed by actorId
const inQueryInstanceFollow = buildServerIdsFollowedBy(options.followerActorId)
const whereActor = {
[ Op.or ]: [
{
serverId: null
},
{
serverId: {
[ Op.in ]: literal(inQueryInstanceFollow)
}
}
]
}
let whereActor: WhereOptions = {}
const whereAnd: WhereOptions[] = []
if (options.privateAndUnlisted !== true) {
if (options.listMyPlaylists !== true) {
whereAnd.push({
privacy: VideoPlaylistPrivacy.PUBLIC
})
// Only list local playlists OR playlists that are on an instance followed by actorId
const inQueryInstanceFollow = buildServerIdsFollowedBy(options.followerActorId)
whereActor = {
[ Op.or ]: [
{
serverId: null
},
{
serverId: {
[ Op.in ]: literal(inQueryInstanceFollow)
}
}
]
}
}
if (options.accountId) {
@@ -301,7 +305,7 @@ export class VideoPlaylistModel extends Model<VideoPlaylistModel> {
type?: VideoPlaylistType,
accountId?: number,
videoChannelId?: number,
privateAndUnlisted?: boolean,
listMyPlaylists?: boolean,
search?: string
}) {
const query = {
@@ -319,7 +323,7 @@ export class VideoPlaylistModel extends Model<VideoPlaylistModel> {
followerActorId: options.followerActorId,
accountId: options.accountId,
videoChannelId: options.videoChannelId,
privateAndUnlisted: options.privateAndUnlisted,
listMyPlaylists: options.listMyPlaylists,
search: options.search
} as AvailableForListOptions
]