diff options
author | Chocobozzz <me@florianbigard.com> | 2021-02-19 09:50:13 +0100 |
---|---|---|
committer | Chocobozzz <me@florianbigard.com> | 2021-02-19 10:06:52 +0100 |
commit | 9d6b9d10ef8cbef39e89bc709285abffb0d8caa1 (patch) | |
tree | 3425b22556e00d1b15de15c72b2802cfc9374473 /server/models | |
parent | fae6e4da8f516a9d6c3bad9bf6f35811ccacbad8 (diff) | |
download | PeerTube-9d6b9d10ef8cbef39e89bc709285abffb0d8caa1.tar.gz PeerTube-9d6b9d10ef8cbef39e89bc709285abffb0d8caa1.tar.zst PeerTube-9d6b9d10ef8cbef39e89bc709285abffb0d8caa1.zip |
Fix video comments display with deleted comments
Diffstat (limited to 'server/models')
-rw-r--r-- | server/models/utils.ts | 2 | ||||
-rw-r--r-- | server/models/video/video-comment.ts | 60 |
2 files changed, 39 insertions, 23 deletions
diff --git a/server/models/utils.ts b/server/models/utils.ts index 143c1a23c..5337ae75d 100644 --- a/server/models/utils.ts +++ b/server/models/utils.ts | |||
@@ -134,7 +134,7 @@ function buildBlockedAccountSQL (blockerIds: number[]) { | |||
134 | const blockerIdsString = blockerIds.join(', ') | 134 | const blockerIdsString = blockerIds.join(', ') |
135 | 135 | ||
136 | return 'SELECT "targetAccountId" AS "id" FROM "accountBlocklist" WHERE "accountId" IN (' + blockerIdsString + ')' + | 136 | return 'SELECT "targetAccountId" AS "id" FROM "accountBlocklist" WHERE "accountId" IN (' + blockerIdsString + ')' + |
137 | ' UNION ALL ' + | 137 | ' UNION ' + |
138 | 'SELECT "account"."id" AS "id" FROM account INNER JOIN "actor" ON account."actorId" = actor.id ' + | 138 | 'SELECT "account"."id" AS "id" FROM account INNER JOIN "actor" ON account."actorId" = actor.id ' + |
139 | 'INNER JOIN "serverBlocklist" ON "actor"."serverId" = "serverBlocklist"."targetServerId" ' + | 139 | 'INNER JOIN "serverBlocklist" ON "actor"."serverId" = "serverBlocklist"."targetServerId" ' + |
140 | 'WHERE "serverBlocklist"."accountId" IN (' + blockerIdsString + ')' | 140 | 'WHERE "serverBlocklist"."accountId" IN (' + blockerIdsString + ')' |
diff --git a/server/models/video/video-comment.ts b/server/models/video/video-comment.ts index 8d1c38826..cfd1d5b7a 100644 --- a/server/models/video/video-comment.ts +++ b/server/models/video/video-comment.ts | |||
@@ -414,7 +414,15 @@ export class VideoCommentModel extends Model { | |||
414 | 414 | ||
415 | const blockerAccountIds = await VideoCommentModel.buildBlockerAccountIds({ videoId, user, isVideoOwned }) | 415 | const blockerAccountIds = await VideoCommentModel.buildBlockerAccountIds({ videoId, user, isVideoOwned }) |
416 | 416 | ||
417 | const query = { | 417 | const accountBlockedWhere = { |
418 | accountId: { | ||
419 | [Op.notIn]: Sequelize.literal( | ||
420 | '(' + buildBlockedAccountSQL(blockerAccountIds) + ')' | ||
421 | ) | ||
422 | } | ||
423 | } | ||
424 | |||
425 | const queryList = { | ||
418 | offset: start, | 426 | offset: start, |
419 | limit: count, | 427 | limit: count, |
420 | order: getCommentSort(sort), | 428 | order: getCommentSort(sort), |
@@ -428,13 +436,7 @@ export class VideoCommentModel extends Model { | |||
428 | }, | 436 | }, |
429 | { | 437 | { |
430 | [Op.or]: [ | 438 | [Op.or]: [ |
431 | { | 439 | accountBlockedWhere, |
432 | accountId: { | ||
433 | [Op.notIn]: Sequelize.literal( | ||
434 | '(' + buildBlockedAccountSQL(blockerAccountIds) + ')' | ||
435 | ) | ||
436 | } | ||
437 | }, | ||
438 | { | 440 | { |
439 | accountId: null | 441 | accountId: null |
440 | } | 442 | } |
@@ -444,19 +446,27 @@ export class VideoCommentModel extends Model { | |||
444 | } | 446 | } |
445 | } | 447 | } |
446 | 448 | ||
447 | const scopes: (string | ScopeOptions)[] = [ | 449 | const scopesList: (string | ScopeOptions)[] = [ |
448 | ScopeNames.WITH_ACCOUNT_FOR_API, | 450 | ScopeNames.WITH_ACCOUNT_FOR_API, |
449 | { | 451 | { |
450 | method: [ ScopeNames.ATTRIBUTES_FOR_API, blockerAccountIds ] | 452 | method: [ ScopeNames.ATTRIBUTES_FOR_API, blockerAccountIds ] |
451 | } | 453 | } |
452 | ] | 454 | ] |
453 | 455 | ||
454 | return VideoCommentModel | 456 | const queryCount = { |
455 | .scope(scopes) | 457 | where: { |
456 | .findAndCountAll(query) | 458 | videoId, |
457 | .then(({ rows, count }) => { | 459 | deletedAt: null, |
458 | return { total: count, data: rows } | 460 | ...accountBlockedWhere |
459 | }) | 461 | } |
462 | } | ||
463 | |||
464 | return Promise.all([ | ||
465 | VideoCommentModel.scope(scopesList).findAndCountAll(queryList), | ||
466 | VideoCommentModel.count(queryCount) | ||
467 | ]).then(([ { rows, count }, totalNotDeletedComments ]) => { | ||
468 | return { total: count, data: rows, totalNotDeletedComments } | ||
469 | }) | ||
460 | } | 470 | } |
461 | 471 | ||
462 | static async listThreadCommentsForApi (parameters: { | 472 | static async listThreadCommentsForApi (parameters: { |
@@ -477,11 +487,18 @@ export class VideoCommentModel extends Model { | |||
477 | { id: threadId }, | 487 | { id: threadId }, |
478 | { originCommentId: threadId } | 488 | { originCommentId: threadId } |
479 | ], | 489 | ], |
480 | accountId: { | 490 | [Op.or]: [ |
481 | [Op.notIn]: Sequelize.literal( | 491 | { |
482 | '(' + buildBlockedAccountSQL(blockerAccountIds) + ')' | 492 | accountId: { |
483 | ) | 493 | [Op.notIn]: Sequelize.literal( |
484 | } | 494 | '(' + buildBlockedAccountSQL(blockerAccountIds) + ')' |
495 | ) | ||
496 | } | ||
497 | }, | ||
498 | { | ||
499 | accountId: null | ||
500 | } | ||
501 | ] | ||
485 | } | 502 | } |
486 | } | 503 | } |
487 | 504 | ||
@@ -492,8 +509,7 @@ export class VideoCommentModel extends Model { | |||
492 | } | 509 | } |
493 | ] | 510 | ] |
494 | 511 | ||
495 | return VideoCommentModel | 512 | return VideoCommentModel.scope(scopes) |
496 | .scope(scopes) | ||
497 | .findAndCountAll(query) | 513 | .findAndCountAll(query) |
498 | .then(({ rows, count }) => { | 514 | .then(({ rows, count }) => { |
499 | return { total: count, data: rows } | 515 | return { total: count, data: rows } |