X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fmodels%2Faccount%2Faccount.ts;h=a0081f25995cfefc34b4d4cc5d442e925d428be6;hb=3f87a46f1dd01485e4a28422f74c3a1b0f56729f;hp=ba1094536f9721e4e6c3e0a248ffc84bf848e016;hpb=00aab0666c6f772548c160fdfa871a8843b88f37;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/models/account/account.ts b/server/models/account/account.ts index ba1094536..a0081f259 100644 --- a/server/models/account/account.ts +++ b/server/models/account/account.ts @@ -27,13 +27,14 @@ import { VideoCommentModel } from '../video/video-comment' import { UserModel } from './user' import { AvatarModel } from '../avatar/avatar' import { VideoPlaylistModel } from '../video/video-playlist' -import { CONSTRAINTS_FIELDS, WEBSERVER } from '../../initializers/constants' +import { CONSTRAINTS_FIELDS, SERVER_ACTOR_NAME, WEBSERVER } from '../../initializers/constants' import { FindOptions, IncludeOptions, Op, Transaction, WhereOptions } from 'sequelize' import { AccountBlocklistModel } from './account-blocklist' import { ServerBlocklistModel } from '../server/server-blocklist' import { ActorFollowModel } from '../activitypub/actor-follow' -import { MAccountActor, MAccountDefault, MAccountSummaryFormattable, MAccountFormattable, MAccountAP } from '../../typings/models' +import { MAccountActor, MAccountAP, MAccountDefault, MAccountFormattable, MAccountSummaryFormattable } from '../../typings/models' import * as Bluebird from 'bluebird' +import { ModelCache } from '@server/models/model-cache' export enum ScopeNames { SUMMARY = 'SUMMARY' @@ -53,7 +54,7 @@ export type SummaryOptions = { ] })) @Scopes(() => ({ - [ ScopeNames.SUMMARY ]: (options: SummaryOptions = {}) => { + [ScopeNames.SUMMARY]: (options: SummaryOptions = {}) => { const whereActor = options.whereActor || undefined const serverInclude: IncludeOptions = { @@ -201,7 +202,7 @@ export class AccountModel extends Model { @HasMany(() => VideoCommentModel, { foreignKey: { - allowNull: false + allowNull: true }, onDelete: 'cascade', hooks: true @@ -221,7 +222,7 @@ export class AccountModel extends Model { @BeforeDestroy static async sendDeleteIfOwned (instance: AccountModel, options) { if (!instance.Actor) { - instance.Actor = await instance.$get('Actor', { transaction: options.transaction }) as ActorModel + instance.Actor = await instance.$get('Actor', { transaction: options.transaction }) } await ActorFollowModel.removeFollowsOf(instance.Actor.id, options.transaction) @@ -245,33 +246,43 @@ export class AccountModel extends Model { } static loadLocalByName (name: string): Bluebird { - const query = { - where: { - [ Op.or ]: [ - { - userId: { - [ Op.ne ]: null + const fun = () => { + const query = { + where: { + [Op.or]: [ + { + userId: { + [Op.ne]: null + } + }, + { + applicationId: { + [Op.ne]: null + } } - }, + ] + }, + include: [ { - applicationId: { - [ Op.ne ]: null + model: ActorModel, + required: true, + where: { + preferredUsername: name } } ] - }, - include: [ - { - model: ActorModel, - required: true, - where: { - preferredUsername: name - } - } - ] + } + + return AccountModel.findOne(query) } - return AccountModel.findOne(query) + return ModelCache.Instance.doCache({ + cacheType: 'local-account-name', + key: name, + fun, + // The server actor never change, so we can easily cache it + whitelist: () => name === SERVER_ACTOR_NAME + }) } static loadByNameAndHost (name: string, host: string): Bluebird {