aboutsummaryrefslogtreecommitdiffhomepage
path: root/server/models/account/account.ts
diff options
context:
space:
mode:
authorChocobozzz <me@florianbigard.com>2019-12-27 13:33:16 +0100
committerChocobozzz <me@florianbigard.com>2019-12-27 13:33:16 +0100
commite4a686b4a202f3212fdce6e789136ce826ac801d (patch)
tree1eaf2ced273f5f9f6f9212bfa8945fd1333be715 /server/models/account/account.ts
parentf27a885a4368776ffb8158c917c6e3f3d21ef670 (diff)
downloadPeerTube-e4a686b4a202f3212fdce6e789136ce826ac801d.tar.gz
PeerTube-e4a686b4a202f3212fdce6e789136ce826ac801d.tar.zst
PeerTube-e4a686b4a202f3212fdce6e789136ce826ac801d.zip
Cache some SQL queries
Diffstat (limited to 'server/models/account/account.ts')
-rw-r--r--server/models/account/account.ts16
1 files changed, 15 insertions, 1 deletions
diff --git a/server/models/account/account.ts b/server/models/account/account.ts
index a818a5a4d..a757b7203 100644
--- a/server/models/account/account.ts
+++ b/server/models/account/account.ts
@@ -27,7 +27,7 @@ import { VideoCommentModel } from '../video/video-comment'
27import { UserModel } from './user' 27import { UserModel } from './user'
28import { AvatarModel } from '../avatar/avatar' 28import { AvatarModel } from '../avatar/avatar'
29import { VideoPlaylistModel } from '../video/video-playlist' 29import { VideoPlaylistModel } from '../video/video-playlist'
30import { CONSTRAINTS_FIELDS, WEBSERVER } from '../../initializers/constants' 30import { CONSTRAINTS_FIELDS, SERVER_ACTOR_NAME, WEBSERVER } from '../../initializers/constants'
31import { FindOptions, IncludeOptions, Op, Transaction, WhereOptions } from 'sequelize' 31import { FindOptions, IncludeOptions, Op, Transaction, WhereOptions } from 'sequelize'
32import { AccountBlocklistModel } from './account-blocklist' 32import { AccountBlocklistModel } from './account-blocklist'
33import { ServerBlocklistModel } from '../server/server-blocklist' 33import { ServerBlocklistModel } from '../server/server-blocklist'
@@ -218,6 +218,8 @@ export class AccountModel extends Model<AccountModel> {
218 }) 218 })
219 BlockedAccounts: AccountBlocklistModel[] 219 BlockedAccounts: AccountBlocklistModel[]
220 220
221 private static cache: { [ id: string ]: any } = {}
222
221 @BeforeDestroy 223 @BeforeDestroy
222 static async sendDeleteIfOwned (instance: AccountModel, options) { 224 static async sendDeleteIfOwned (instance: AccountModel, options) {
223 if (!instance.Actor) { 225 if (!instance.Actor) {
@@ -245,6 +247,11 @@ export class AccountModel extends Model<AccountModel> {
245 } 247 }
246 248
247 static loadLocalByName (name: string): Bluebird<MAccountDefault> { 249 static loadLocalByName (name: string): Bluebird<MAccountDefault> {
250 // The server actor never change, so we can easily cache it
251 if (name === SERVER_ACTOR_NAME && AccountModel.cache[name]) {
252 return Bluebird.resolve(AccountModel.cache[name])
253 }
254
248 const query = { 255 const query = {
249 where: { 256 where: {
250 [ Op.or ]: [ 257 [ Op.or ]: [
@@ -272,6 +279,13 @@ export class AccountModel extends Model<AccountModel> {
272 } 279 }
273 280
274 return AccountModel.findOne(query) 281 return AccountModel.findOne(query)
282 .then(account => {
283 if (name === SERVER_ACTOR_NAME) {
284 AccountModel.cache[name] = account
285 }
286
287 return account
288 })
275 } 289 }
276 290
277 static loadByNameAndHost (name: string, host: string): Bluebird<MAccountDefault> { 291 static loadByNameAndHost (name: string, host: string): Bluebird<MAccountDefault> {