X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Flib%2Fvideo-comment.ts;h=736ebb2f8e7ed5a4db053502b61cc7ff971f2243;hb=4024c44f9027a32809931de0692d40d001df721c;hp=fe83d23e7b1c766646a0dbc2a4909024f72b56e2;hpb=c2777c1dfe688c8fab1ef2fed50e360100fa9198;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/video-comment.ts b/server/lib/video-comment.ts index fe83d23e7..736ebb2f8 100644 --- a/server/lib/video-comment.ts +++ b/server/lib/video-comment.ts @@ -1,10 +1,32 @@ +import { cloneDeep } from 'lodash' import * as Sequelize from 'sequelize' +import { logger } from '@server/helpers/logger' +import { sequelizeTypescript } from '@server/initializers/database' import { ResultList } from '../../shared/models' import { VideoCommentThreadTree } from '../../shared/models/videos/video-comment.model' import { VideoCommentModel } from '../models/video/video-comment' -import { getVideoCommentActivityPubUrl } from './activitypub' -import { sendCreateVideoComment } from './activitypub/send' -import { MAccountDefault, MComment, MCommentOwnerVideoReply, MVideoFullLight } from '../typings/models' +import { MAccountDefault, MComment, MCommentOwnerVideo, MCommentOwnerVideoReply, MVideoFullLight } from '../types/models' +import { sendCreateVideoComment, sendDeleteVideoComment } from './activitypub/send' +import { getLocalVideoCommentActivityPubUrl } from './activitypub/url' +import { Hooks } from './plugins/hooks' + +async function removeComment (videoCommentInstance: MCommentOwnerVideo) { + const videoCommentInstanceBefore = cloneDeep(videoCommentInstance) + + await sequelizeTypescript.transaction(async t => { + if (videoCommentInstance.isOwned() || videoCommentInstance.Video.isOwned()) { + await sendDeleteVideoComment(videoCommentInstance, t) + } + + markCommentAsDeleted(videoCommentInstance) + + await videoCommentInstance.save() + }) + + logger.info('Video comment %d deleted.', videoCommentInstance.id) + + Hooks.runAction('action:api.video-comment.deleted', { comment: videoCommentInstanceBefore }) +} async function createVideoComment (obj: { text: string @@ -29,7 +51,7 @@ async function createVideoComment (obj: { url: new Date().toISOString() }, { transaction: t, validate: false }) - comment.url = getVideoCommentActivityPubUrl(obj.video, comment) + comment.url = getLocalVideoCommentActivityPubUrl(obj.video, comment) const savedComment: MCommentOwnerVideoReply = await comment.save({ transaction: t }) savedComment.InReplyToVideoComment = obj.inReplyToComment @@ -73,7 +95,7 @@ function buildFormattedCommentTree (resultList: ResultList): return thread } -function markCommentAsDeleted (comment: MCommentOwnerVideoReply): void { +function markCommentAsDeleted (comment: MComment): void { comment.text = '' comment.deletedAt = new Date() comment.accountId = null @@ -82,6 +104,7 @@ function markCommentAsDeleted (comment: MCommentOwnerVideoReply): void { // --------------------------------------------------------------------------- export { + removeComment, createVideoComment, buildFormattedCommentTree, markCommentAsDeleted