diff options
author | Chocobozzz <me@florianbigard.com> | 2018-01-18 14:59:27 +0100 |
---|---|---|
committer | Chocobozzz <me@florianbigard.com> | 2018-01-18 15:42:20 +0100 |
commit | 54e740594bc2eacd8026b5d2d6cfdfc06416a65b (patch) | |
tree | 486ce489a59653c667728be8f54ab038d37e1a99 /server/models | |
parent | f05a1c30c15d2ae35c11e241ca039a72eeb7d6ad (diff) | |
download | PeerTube-54e740594bc2eacd8026b5d2d6cfdfc06416a65b.tar.gz PeerTube-54e740594bc2eacd8026b5d2d6cfdfc06416a65b.tar.zst PeerTube-54e740594bc2eacd8026b5d2d6cfdfc06416a65b.zip |
Avoid too many requests and fetching outbox
Diffstat (limited to 'server/models')
-rw-r--r-- | server/models/activitypub/actor-follow.ts | 3 | ||||
-rw-r--r-- | server/models/activitypub/actor.ts | 51 | ||||
-rw-r--r-- | server/models/video/video.ts | 4 |
3 files changed, 50 insertions, 8 deletions
diff --git a/server/models/activitypub/actor-follow.ts b/server/models/activitypub/actor-follow.ts index ced481547..416496607 100644 --- a/server/models/activitypub/actor-follow.ts +++ b/server/models/activitypub/actor-follow.ts | |||
@@ -375,7 +375,8 @@ export class ActorFollowModel extends Model<ActorFollowModel> { | |||
375 | score: { | 375 | score: { |
376 | [Sequelize.Op.lte]: 0 | 376 | [Sequelize.Op.lte]: 0 |
377 | } | 377 | } |
378 | } | 378 | }, |
379 | logger: false | ||
379 | } | 380 | } |
380 | 381 | ||
381 | return ActorFollowModel.findAll(query) | 382 | return ActorFollowModel.findAll(query) |
diff --git a/server/models/activitypub/actor.ts b/server/models/activitypub/actor.ts index 408d4df23..269149a31 100644 --- a/server/models/activitypub/actor.ts +++ b/server/models/activitypub/actor.ts | |||
@@ -167,17 +167,17 @@ export class ActorModel extends Model<ActorModel> { | |||
167 | }, | 167 | }, |
168 | onDelete: 'cascade' | 168 | onDelete: 'cascade' |
169 | }) | 169 | }) |
170 | AccountFollowing: ActorFollowModel[] | 170 | ActorFollowing: ActorFollowModel[] |
171 | 171 | ||
172 | @HasMany(() => ActorFollowModel, { | 172 | @HasMany(() => ActorFollowModel, { |
173 | foreignKey: { | 173 | foreignKey: { |
174 | name: 'targetActorId', | 174 | name: 'targetActorId', |
175 | allowNull: false | 175 | allowNull: false |
176 | }, | 176 | }, |
177 | as: 'followers', | 177 | as: 'ActorFollowers', |
178 | onDelete: 'cascade' | 178 | onDelete: 'cascade' |
179 | }) | 179 | }) |
180 | AccountFollowers: ActorFollowModel[] | 180 | ActorFollowers: ActorFollowModel[] |
181 | 181 | ||
182 | @ForeignKey(() => ServerModel) | 182 | @ForeignKey(() => ServerModel) |
183 | @Column | 183 | @Column |
@@ -277,6 +277,45 @@ export class ActorModel extends Model<ActorModel> { | |||
277 | }) | 277 | }) |
278 | } | 278 | } |
279 | 279 | ||
280 | static async getActorsFollowerSharedInboxUrls (actors: ActorModel[], t: Sequelize.Transaction) { | ||
281 | const query = { | ||
282 | // attribute: [], | ||
283 | where: { | ||
284 | id: { | ||
285 | [Sequelize.Op.in]: actors.map(a => a.id) | ||
286 | } | ||
287 | }, | ||
288 | include: [ | ||
289 | { | ||
290 | // attributes: [ ], | ||
291 | model: ActorFollowModel.unscoped(), | ||
292 | required: true, | ||
293 | as: 'ActorFollowers', | ||
294 | where: { | ||
295 | state: 'accepted' | ||
296 | }, | ||
297 | include: [ | ||
298 | { | ||
299 | attributes: [ 'sharedInboxUrl' ], | ||
300 | model: ActorModel.unscoped(), | ||
301 | as: 'ActorFollower', | ||
302 | required: true | ||
303 | } | ||
304 | ] | ||
305 | } | ||
306 | ], | ||
307 | transaction: t | ||
308 | } | ||
309 | |||
310 | const hash: { [ id: number ]: string[] } = {} | ||
311 | const res = await ActorModel.findAll(query) | ||
312 | for (const actor of res) { | ||
313 | hash[actor.id] = actor.ActorFollowers.map(follow => follow.ActorFollower.sharedInboxUrl) | ||
314 | } | ||
315 | |||
316 | return hash | ||
317 | } | ||
318 | |||
280 | toFormattedJSON () { | 319 | toFormattedJSON () { |
281 | let avatar: Avatar = null | 320 | let avatar: Avatar = null |
282 | if (this.Avatar) { | 321 | if (this.Avatar) { |
@@ -347,10 +386,12 @@ export class ActorModel extends Model<ActorModel> { | |||
347 | attributes: [ 'sharedInboxUrl' ], | 386 | attributes: [ 'sharedInboxUrl' ], |
348 | include: [ | 387 | include: [ |
349 | { | 388 | { |
350 | model: ActorFollowModel, | 389 | attribute: [], |
390 | model: ActorFollowModel.unscoped(), | ||
351 | required: true, | 391 | required: true, |
352 | as: 'followers', | 392 | as: 'ActorFollowers', |
353 | where: { | 393 | where: { |
394 | state: 'accepted', | ||
354 | targetActorId: this.id | 395 | targetActorId: this.id |
355 | } | 396 | } |
356 | } | 397 | } |
diff --git a/server/models/video/video.ts b/server/models/video/video.ts index 514edfd9c..0d115367f 100644 --- a/server/models/video/video.ts +++ b/server/models/video/video.ts | |||
@@ -67,7 +67,7 @@ enum ScopeNames { | |||
67 | '$VideoChannel.Account.Actor.serverId$': null | 67 | '$VideoChannel.Account.Actor.serverId$': null |
68 | }, | 68 | }, |
69 | { | 69 | { |
70 | '$VideoChannel.Account.Actor.followers.actorId$': actorId | 70 | '$VideoChannel.Account.Actor.ActorFollowers.actorId$': actorId |
71 | }, | 71 | }, |
72 | { | 72 | { |
73 | id: { | 73 | id: { |
@@ -106,7 +106,7 @@ enum ScopeNames { | |||
106 | { | 106 | { |
107 | attributes: [ ], | 107 | attributes: [ ], |
108 | model: ActorFollowModel.unscoped(), | 108 | model: ActorFollowModel.unscoped(), |
109 | as: 'followers', | 109 | as: 'ActorFollowers', |
110 | required: false | 110 | required: false |
111 | } | 111 | } |
112 | ] | 112 | ] |