Optimize sql requests on broadcast
This commit is contained in:
parent
34450e1e55
commit
891a819661
1 changed files with 36 additions and 53 deletions
|
@ -2,12 +2,10 @@ import * as Bluebird from 'bluebird'
|
|||
import { AllowNull, BelongsTo, Column, CreatedAt, DataType, ForeignKey, Is, Model, Scopes, Table, UpdatedAt } from 'sequelize-typescript'
|
||||
import { isActivityPubUrlValid } from '../../helpers/custom-validators/activitypub/misc'
|
||||
import { CONSTRAINTS_FIELDS } from '../../initializers/constants'
|
||||
import { AccountModel } from '../account/account'
|
||||
import { ActorModel } from '../activitypub/actor'
|
||||
import { buildLocalActorIdsIn, throwIfNotValid } from '../utils'
|
||||
import { VideoModel } from './video'
|
||||
import { VideoChannelModel } from './video-channel'
|
||||
import { Op, Transaction } from 'sequelize'
|
||||
import { literal, Op, Transaction } from 'sequelize'
|
||||
import { MVideoShareActor, MVideoShareFull } from '../../typings/models/video'
|
||||
import { MActorDefault } from '../../typings/models'
|
||||
|
||||
|
@ -124,70 +122,55 @@ export class VideoShareModel extends Model<VideoShareModel> {
|
|||
}
|
||||
|
||||
return VideoShareModel.scope(ScopeNames.FULL).findAll(query)
|
||||
.then((res: MVideoShareFull[]) => res.map(r => r.Actor))
|
||||
.then((res: MVideoShareFull[]) => res.map(r => r.Actor))
|
||||
}
|
||||
|
||||
static loadActorsWhoSharedVideosOf (actorOwnerId: number, t: Transaction): Bluebird<MActorDefault[]> {
|
||||
const safeOwnerId = parseInt(actorOwnerId + '', 10)
|
||||
|
||||
// /!\ On actor model
|
||||
const query = {
|
||||
attributes: [],
|
||||
include: [
|
||||
{
|
||||
model: ActorModel,
|
||||
required: true
|
||||
},
|
||||
{
|
||||
attributes: [],
|
||||
model: VideoModel,
|
||||
required: true,
|
||||
include: [
|
||||
{
|
||||
attributes: [],
|
||||
model: VideoChannelModel.unscoped(),
|
||||
required: true,
|
||||
include: [
|
||||
{
|
||||
attributes: [],
|
||||
model: AccountModel.unscoped(),
|
||||
required: true,
|
||||
where: {
|
||||
actorId: actorOwnerId
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
where: {
|
||||
[Op.and]: [
|
||||
literal(
|
||||
`EXISTS (` +
|
||||
` SELECT 1 FROM "videoShare" ` +
|
||||
` INNER JOIN "video" ON "videoShare"."videoId" = "video"."id" ` +
|
||||
` INNER JOIN "videoChannel" ON "videoChannel"."id" = "video"."channelId" ` +
|
||||
` INNER JOIN "account" ON "account"."id" = "videoChannel"."accountId" ` +
|
||||
` WHERE "videoShare"."actorId" = "ActorModel"."id" AND "account"."actorId" = ${safeOwnerId} ` +
|
||||
` LIMIT 1` +
|
||||
`)`
|
||||
)
|
||||
]
|
||||
},
|
||||
transaction: t
|
||||
}
|
||||
|
||||
return VideoShareModel.scope(ScopeNames.FULL).findAll(query)
|
||||
.then(res => res.map(r => r.Actor))
|
||||
return ActorModel.findAll(query)
|
||||
}
|
||||
|
||||
static loadActorsByVideoChannel (videoChannelId: number, t: Transaction): Bluebird<MActorDefault[]> {
|
||||
const safeChannelId = parseInt(videoChannelId + '', 10)
|
||||
|
||||
// /!\ On actor model
|
||||
const query = {
|
||||
attributes: [],
|
||||
include: [
|
||||
{
|
||||
model: ActorModel,
|
||||
required: true
|
||||
},
|
||||
{
|
||||
attributes: [],
|
||||
model: VideoModel,
|
||||
required: true,
|
||||
where: {
|
||||
channelId: videoChannelId
|
||||
}
|
||||
}
|
||||
],
|
||||
where: {
|
||||
[Op.and]: [
|
||||
literal(
|
||||
`EXISTS (` +
|
||||
` SELECT 1 FROM "videoShare" ` +
|
||||
` INNER JOIN "video" ON "videoShare"."videoId" = "video"."id" ` +
|
||||
` WHERE "videoShare"."actorId" = "ActorModel"."id" AND "video"."channelId" = ${safeChannelId} ` +
|
||||
` LIMIT 1` +
|
||||
`)`
|
||||
)
|
||||
]
|
||||
},
|
||||
transaction: t
|
||||
}
|
||||
|
||||
return VideoShareModel.scope(ScopeNames.FULL)
|
||||
.findAll(query)
|
||||
.then(res => res.map(r => r.Actor))
|
||||
return ActorModel.findAll(query)
|
||||
}
|
||||
|
||||
static listAndCountByVideoId (videoId: number, start: number, count: number, t?: Transaction) {
|
||||
|
|
Loading…
Reference in a new issue