+ @HasMany(() => VideoCommentAbuseModel, {
+ foreignKey: {
+ name: 'commentId',
+ allowNull: true
+ },
+ onDelete: 'set null'
+ })
+ CommentAbuses: VideoCommentAbuseModel[]
+
+ @BeforeDestroy
+ static async saveEssentialDataToAbuses (instance: VideoCommentModel, options) {
+ const tasks: Promise<any>[] = []
+
+ if (!Array.isArray(instance.CommentAbuses)) {
+ instance.CommentAbuses = await instance.$get('CommentAbuses')
+
+ if (instance.CommentAbuses.length === 0) return undefined
+ }
+
+ if (!instance.Video) {
+ instance.Video = await instance.$get('Video')
+ }
+
+ logger.info('Saving video comment %s for abuse.', instance.url)
+
+ const details = Object.assign(instance.toFormattedJSON(), {
+ Video: {
+ id: instance.Video.id,
+ name: instance.Video.name,
+ uuid: instance.Video.uuid
+ }
+ })
+
+ for (const abuse of instance.CommentAbuses) {
+ abuse.deletedComment = details
+
+ tasks.push(abuse.save({ transaction: options.transaction }))
+ }
+
+ Promise.all(tasks)
+ .catch(err => {
+ logger.error('Some errors when saving details of comment %s in its abuses before destroy hook.', instance.url, { err })
+ })
+
+ return undefined
+ }
+