X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Flib%2Fvideo-comment.ts;h=02f160fe833f0970932462b9b7466551f55900d1;hb=37ff5005b47b9df2933a0b8812609a6c41faa170;hp=449aa74cb10a1f503bf48e58fd6229078c380f1f;hpb=970ceac0a6bf4990b8924738591df4949491ec9b;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/video-comment.ts b/server/lib/video-comment.ts index 449aa74cb..02f160fe8 100644 --- a/server/lib/video-comment.ts +++ b/server/lib/video-comment.ts @@ -1,17 +1,39 @@ +import { cloneDeep } from 'lodash' import * as Sequelize from 'sequelize' +import express from 'express' +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 { AccountModel } from '../models/account/account' -import { VideoModel } from '../models/video/video' +import { VideoCommentThreadTree } from '../../shared/models/videos/comment/video-comment.model' import { VideoCommentModel } from '../models/video/video-comment' -import { getVideoCommentActivityPubUrl } from './activitypub' -import { sendCreateVideoComment } from './activitypub/send' +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, req: express.Request, res: express.Response) { + const videoCommentInstanceBefore = cloneDeep(videoCommentInstance) + + await sequelizeTypescript.transaction(async t => { + if (videoCommentInstance.isOwned() || videoCommentInstance.Video.isOwned()) { + await sendDeleteVideoComment(videoCommentInstance, t) + } + + videoCommentInstance.markAsDeleted() + + await videoCommentInstance.save({ transaction: t }) + }) + + logger.info('Video comment %d deleted.', videoCommentInstance.id) + + Hooks.runAction('action:api.video-comment.deleted', { comment: videoCommentInstanceBefore, req, res }) +} async function createVideoComment (obj: { - text: string, - inReplyToComment: VideoCommentModel | null, - video: VideoModel - account: AccountModel + text: string + inReplyToComment: MComment | null + video: MVideoFullLight + account: MAccountDefault }, t: Sequelize.Transaction) { let originCommentId: number | null = null let inReplyToCommentId: number | null = null @@ -30,9 +52,9 @@ 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 = await comment.save({ transaction: t }) + const savedComment: MCommentOwnerVideoReply = await comment.save({ transaction: t }) savedComment.InReplyToVideoComment = obj.inReplyToComment savedComment.Video = obj.video savedComment.Account = obj.account @@ -77,6 +99,7 @@ function buildFormattedCommentTree (resultList: ResultList): // --------------------------------------------------------------------------- export { + removeComment, createVideoComment, buildFormattedCommentTree }