X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fmodels%2Faccount%2Faccount.ts;h=c72f9c63df3c418a8953f57b5025fbb95a1d460a;hb=b49f22d8f9a52ab75fd38db2d377249eb58fa678;hp=f97519b1403eac1c5d42280aa40ea5e8bf9e6a52;hpb=17aa80ed016bafa3ccb071af3f86054033823284;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/models/account/account.ts b/server/models/account/account.ts index f97519b14..c72f9c63d 100644 --- a/server/models/account/account.ts +++ b/server/models/account/account.ts @@ -1,3 +1,4 @@ +import { FindOptions, Includeable, IncludeOptions, Op, Transaction, WhereOptions } from 'sequelize' import { AllowNull, BeforeDestroy, @@ -15,27 +16,33 @@ import { Table, UpdatedAt } from 'sequelize-typescript' +import { ModelCache } from '@server/models/model-cache' import { Account, AccountSummary } from '../../../shared/models/actors' import { isAccountDescriptionValid } from '../../helpers/custom-validators/accounts' +import { CONSTRAINTS_FIELDS, SERVER_ACTOR_NAME, WEBSERVER } from '../../initializers/constants' import { sendDeleteActor } from '../../lib/activitypub/send' +import { + MAccount, + MAccountActor, + MAccountAP, + MAccountDefault, + MAccountFormattable, + MAccountSummaryFormattable, + MChannelActor +} from '../../types/models' import { ActorModel } from '../activitypub/actor' +import { ActorFollowModel } from '../activitypub/actor-follow' import { ApplicationModel } from '../application/application' +import { AvatarModel } from '../avatar/avatar' import { ServerModel } from '../server/server' +import { ServerBlocklistModel } from '../server/server-blocklist' import { getSort, throwIfNotValid } from '../utils' +import { VideoModel } from '../video/video' import { VideoChannelModel } from '../video/video-channel' import { VideoCommentModel } from '../video/video-comment' -import { UserModel } from './user' -import { AvatarModel } from '../avatar/avatar' import { VideoPlaylistModel } from '../video/video-playlist' -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, MAccountAP, MAccountDefault, MAccountFormattable, MAccountSummaryFormattable, MAccount } from '../../types/models' -import * as Bluebird from 'bluebird' -import { ModelCache } from '@server/models/model-cache' -import { VideoModel } from '../video/video' +import { UserModel } from './user' export enum ScopeNames { SUMMARY = 'SUMMARY' @@ -65,28 +72,29 @@ export type SummaryOptions = { required: false } - const query: FindOptions = { - attributes: [ 'id', 'name', 'actorId' ], - include: [ - { - attributes: [ 'id', 'preferredUsername', 'url', 'serverId', 'avatarId' ], - model: ActorModel.unscoped(), - required: options.actorRequired ?? true, - where: whereActor, - include: [ - serverInclude, + const queryInclude: Includeable[] = [ + { + attributes: [ 'id', 'preferredUsername', 'url', 'serverId', 'avatarId' ], + model: ActorModel.unscoped(), + required: options.actorRequired ?? true, + where: whereActor, + include: [ + serverInclude, - { - model: AvatarModel.unscoped(), - required: false - } - ] - } - ] + { + model: AvatarModel.unscoped(), + required: false + } + ] + } + ] + + const query: FindOptions = { + attributes: [ 'id', 'name', 'actorId' ] } if (options.withAccountBlockerIds) { - query.include.push({ + queryInclude.push({ attributes: [ 'id' ], model: AccountBlocklistModel.unscoped(), as: 'BlockedAccounts', @@ -112,6 +120,8 @@ export type SummaryOptions = { ] } + query.include = queryInclude + return query } })) @@ -130,7 +140,7 @@ export type SummaryOptions = { } ] }) -export class AccountModel extends Model { +export class AccountModel extends Model { @AllowNull(false) @Column @@ -228,6 +238,7 @@ export class AccountModel extends Model { } await ActorFollowModel.removeFollowsOf(instance.Actor.id, options.transaction) + if (instance.isOwned()) { return sendDeleteActor(instance.Actor, options.transaction) } @@ -235,11 +246,11 @@ export class AccountModel extends Model { return undefined } - static load (id: number, transaction?: Transaction): Bluebird { + static load (id: number, transaction?: Transaction): Promise { return AccountModel.findByPk(id, { transaction }) } - static loadByNameWithHost (nameWithHost: string): Bluebird { + static loadByNameWithHost (nameWithHost: string): Promise { const [ accountName, host ] = nameWithHost.split('@') if (!host || host === WEBSERVER.HOST) return AccountModel.loadLocalByName(accountName) @@ -247,7 +258,7 @@ export class AccountModel extends Model { return AccountModel.loadByNameAndHost(accountName, host) } - static loadLocalByName (name: string): Bluebird { + static loadLocalByName (name: string): Promise { const fun = () => { const query = { where: { @@ -287,7 +298,7 @@ export class AccountModel extends Model { }) } - static loadByNameAndHost (name: string, host: string): Bluebird { + static loadByNameAndHost (name: string, host: string): Promise { const query = { include: [ { @@ -312,7 +323,7 @@ export class AccountModel extends Model { return AccountModel.findOne(query) } - static loadByUrl (url: string, transaction?: Transaction): Bluebird { + static loadByUrl (url: string, transaction?: Transaction): Promise { const query = { include: [ { @@ -345,7 +356,7 @@ export class AccountModel extends Model { }) } - static loadAccountIdFromVideo (videoId: number): Bluebird { + static loadAccountIdFromVideo (videoId: number): Promise { const query = { include: [ { @@ -368,7 +379,7 @@ export class AccountModel extends Model { return AccountModel.findOne(query) } - static listLocalsForSitemap (sort: string): Bluebird { + static listLocalsForSitemap (sort: string): Promise { const query = { attributes: [ ], offset: 0, @@ -440,6 +451,10 @@ export class AccountModel extends Model { return this.name } + getLocalUrl (this: MAccountActor | MChannelActor) { + return WEBSERVER.URL + `/accounts/` + this.Actor.preferredUsername + } + isBlocked () { return this.BlockedAccounts && this.BlockedAccounts.length !== 0 }