From e04551d796adf69703a41af123207b2624237292 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Mon, 30 Jul 2018 11:33:58 +0200 Subject: Delete actor too when deleting account/video channel --- server/models/account/account.ts | 21 +++++++-------------- server/models/activitypub/actor.ts | 25 +++++++++++++++++-------- server/models/video/video-channel.ts | 30 ++++++++++++++++++------------ 3 files changed, 42 insertions(+), 34 deletions(-) (limited to 'server/models') diff --git a/server/models/account/account.ts b/server/models/account/account.ts index 2eed66fc2..ce0f3f7c5 100644 --- a/server/models/account/account.ts +++ b/server/models/account/account.ts @@ -16,8 +16,6 @@ import { } from 'sequelize-typescript' import { Account } from '../../../shared/models/actors' import { isAccountDescriptionValid } from '../../helpers/custom-validators/accounts' -import { logger } from '../../helpers/logger' -import { sendDeleteActor } from '../../lib/activitypub/send' import { ActorModel } from '../activitypub/actor' import { ApplicationModel } from '../application/application' import { AvatarModel } from '../avatar/avatar' @@ -138,12 +136,7 @@ export class AccountModel extends Model { instance.Actor = await instance.$get('Actor', { transaction: options.transaction }) as ActorModel } - if (instance.isOwned()) { - logger.debug('Sending delete of actor of account %s.', instance.Actor.url) - return sendDeleteActor(instance.Actor, options.transaction) - } - - return undefined + return instance.Actor.destroy({ transaction: options.transaction }) } static load (id: number) { @@ -246,12 +239,12 @@ export class AccountModel extends Model { } return AccountModel.findAndCountAll(query) - .then(({ rows, count }) => { - return { - data: rows, - total: count - } - }) + .then(({ rows, count }) => { + return { + data: rows, + total: count + } + }) } toFormattedJSON (): Account { diff --git a/server/models/activitypub/actor.ts b/server/models/activitypub/actor.ts index 267032e2a..f231dba74 100644 --- a/server/models/activitypub/actor.ts +++ b/server/models/activitypub/actor.ts @@ -3,6 +3,7 @@ import { extname } from 'path' import * as Sequelize from 'sequelize' import { AllowNull, + BeforeDestroy, BelongsTo, Column, CreatedAt, @@ -37,6 +38,8 @@ import { ServerModel } from '../server/server' import { throwIfNotValid } from '../utils' import { VideoChannelModel } from '../video/video-channel' import { ActorFollowModel } from './actor-follow' +import { logger } from '../../helpers/logger' +import { sendDeleteActor } from '../../lib/activitypub/send' enum ScopeNames { FULL = 'FULL' @@ -224,22 +227,28 @@ export class ActorModel extends Model { @HasOne(() => AccountModel, { foreignKey: { - allowNull: true - }, - onDelete: 'cascade', - hooks: true + allowNull: false + } }) Account: AccountModel @HasOne(() => VideoChannelModel, { foreignKey: { - allowNull: true - }, - onDelete: 'cascade', - hooks: true + allowNull: false + } }) VideoChannel: VideoChannelModel + @BeforeDestroy + static async sendDeleteIfOwned (instance: ActorModel, options) { + if (instance.isOwned()) { + logger.debug('Sending delete of actor %s.', instance.url) + return sendDeleteActor(instance, options.transaction) + } + + return undefined + } + static load (id: number) { return ActorModel.unscoped().findById(id) } diff --git a/server/models/video/video-channel.ts b/server/models/video/video-channel.ts index 6567b00d6..33a19f0ff 100644 --- a/server/models/video/video-channel.ts +++ b/server/models/video/video-channel.ts @@ -1,15 +1,27 @@ import { - AllowNull, BeforeDestroy, BelongsTo, Column, CreatedAt, DefaultScope, ForeignKey, HasMany, Is, Model, Scopes, Table, - UpdatedAt, Default, DataType + AllowNull, + BeforeDestroy, + BelongsTo, + Column, + CreatedAt, + DataType, + Default, + DefaultScope, + ForeignKey, + HasMany, + Is, + Model, + Scopes, + Table, + UpdatedAt } from 'sequelize-typescript' import { ActivityPubActor } from '../../../shared/models/activitypub' import { VideoChannel } from '../../../shared/models/videos' import { - isVideoChannelDescriptionValid, isVideoChannelNameValid, + isVideoChannelDescriptionValid, + isVideoChannelNameValid, isVideoChannelSupportValid } from '../../helpers/custom-validators/video-channels' -import { logger } from '../../helpers/logger' -import { sendDeleteActor } from '../../lib/activitypub/send' import { AccountModel } from '../account/account' import { ActorModel } from '../activitypub/actor' import { getSort, throwIfNotValid } from '../utils' @@ -139,13 +151,7 @@ export class VideoChannelModel extends Model { instance.Actor = await instance.$get('Actor', { transaction: options.transaction }) as ActorModel } - if (instance.Actor.isOwned()) { - logger.debug('Sending delete of actor of video channel %s.', instance.Actor.url) - - return sendDeleteActor(instance.Actor, options.transaction) - } - - return undefined + return instance.Actor.destroy({ transaction: options.transaction }) } static countByAccount (accountId: number) { -- cgit v1.2.3