Delete actor too when deleting account/video channel
authorChocobozzz <me@florianbigard.com>
Mon, 30 Jul 2018 09:33:58 +0000 (11:33 +0200)
committerChocobozzz <me@florianbigard.com>
Mon, 30 Jul 2018 09:34:34 +0000 (11:34 +0200)
server/models/account/account.ts
server/models/activitypub/actor.ts
server/models/video/video-channel.ts

index 2eed66fc2696641fbcbf785581adc7d64270c28a..ce0f3f7c5b843373eff18683137964ce87e1c7ec 100644 (file)
@@ -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<AccountModel> {
       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<AccountModel> {
     }
 
     return AccountModel.findAndCountAll(query)
-      .then(({ rows, count }) => {
-        return {
-          data: rows,
-          total: count
-        }
-      })
+                       .then(({ rows, count }) => {
+                         return {
+                           data: rows,
+                           total: count
+                         }
+                       })
   }
 
   toFormattedJSON (): Account {
index 267032e2ab7e6ff9058a7025e34f432fe0a5c508..f231dba742df7d940a46cf48ff49f63383057021 100644 (file)
@@ -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<ActorModel> {
 
   @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)
   }
index 6567b00d69475bc9037218442740eff6a1f2345c..33a19f0ff224706503bbde130c56aa22fb651f2c 100644 (file)
@@ -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<VideoChannelModel> {
       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) {