Add reportee stats for deleted videos
authorRigel Kent <sendmemail@rigelk.eu>
Mon, 20 Apr 2020 13:15:10 +0000 (15:15 +0200)
committerRigel Kent <par@rigelk.eu>
Fri, 1 May 2020 14:41:02 +0000 (16:41 +0200)
client/src/app/+admin/moderation/video-abuse-list/video-abuse-list.component.html
server/models/video/video-abuse.ts

index 4afa2850bf5d37f20d6648fbe0524bd13e40c907..2f6e12d1c808213baee9eb74f28f3294ddfa4403 100644 (file)
                       <span class="text-muted">{{ videoAbuse.video.channel.ownerAccount ? createByString(videoAbuse.video.channel.ownerAccount) : '' }}</span>
                     </div>
                   </div>
-                  <a [routerLink]="[ '/admin/moderation/video-abuses/list' ]" [queryParams]="{ 'search': videoAbuse.video.channel.ownerAccount.displayName }" class="ml-auto text-muted video-details-links" *ngIf="!videoAbuse.video.deleted" i18n>
+                  <a [routerLink]="[ '/admin/moderation/video-abuses/list' ]" [queryParams]="{ 'search': videoAbuse.video.channel.ownerAccount.displayName }" class="ml-auto text-muted video-details-links" i18n>
                     {videoAbuse.countReportsForReportee, plural, =1 {1 report} other {{{ videoAbuse.countReportsForReportee }} reports}}<span class="ml-1 glyphicon glyphicon-flag"></span>
                   </a>
                 </span>
index 71b519cd9a2b8b6b05da709e75ce9d6a47c8e86a..285fb1fbc609a23b52915189f1235626c747a491 100644 (file)
@@ -15,7 +15,7 @@ import { VideoAbuseState, VideoDetails } from '../../../shared'
 import { CONSTRAINTS_FIELDS, VIDEO_ABUSE_STATES } from '../../initializers/constants'
 import { MUserAccountId, MVideoAbuse, MVideoAbuseFormattable, MVideoAbuseVideo } from '../../typings/models'
 import * as Bluebird from 'bluebird'
-import { literal, Op, Sequelize } from 'sequelize'
+import { literal, Op } from 'sequelize'
 import { ThumbnailModel } from './thumbnail'
 import { VideoBlacklistModel } from './video-blacklist'
 import { ScopeNames as VideoChannelScopeNames, SummaryOptions, VideoChannelModel } from './video-channel'
@@ -75,6 +75,7 @@ export enum ScopeNames {
       attributes: {
         include: [
           [
+            // we don't care about this count for deleted videos, so there are not included
             literal(
               '(' +
                 'SELECT count(*) ' +
@@ -85,6 +86,7 @@ export enum ScopeNames {
             'countReportsForVideo'
           ],
           [
+            // we don't care about this count for deleted videos, so there are not included
             literal(
               '(' +
                 'SELECT t.nth ' +
@@ -109,7 +111,17 @@ export enum ScopeNames {
                 'WHERE "account"."id" = "VideoAbuseModel"."reporterAccountId" ' +
               ')'
             ),
-            'countReportsForReporter'
+            'countReportsForReporter__video'
+          ],
+          [
+            literal(
+              '(' +
+                'SELECT count(DISTINCT "videoAbuse"."id") ' +
+                'FROM "videoAbuse" ' +
+                `WHERE CAST("deletedVideo"->'channel'->'ownerAccount'->>'id' AS INTEGER) = "VideoAbuseModel"."reporterAccountId" ` +
+              ')'
+            ),
+            'countReportsForReporter__deletedVideo'
           ],
           [
             literal(
@@ -118,10 +130,23 @@ export enum ScopeNames {
                 'FROM "videoAbuse" ' +
                 'INNER JOIN "video" ON "video"."id" = "videoAbuse"."videoId" ' +
                 'INNER JOIN "videoChannel" ON "videoChannel"."id" = "video"."channelId" ' +
-                'INNER JOIN "account" ON "videoChannel"."accountId" = "Video->VideoChannel"."accountId" ' +
+                'INNER JOIN "account" ON ' +
+                      '"videoChannel"."accountId" = "Video->VideoChannel"."accountId" ' +
+                   `OR "videoChannel"."accountId" = CAST("VideoAbuseModel"."deletedVideo"->'channel'->'ownerAccount'->>'id' AS INTEGER) ` +
+              ')'
+            ),
+            'countReportsForReportee__video'
+          ],
+          [
+            literal(
+              '(' +
+                'SELECT count(DISTINCT "videoAbuse"."id") ' +
+                'FROM "videoAbuse" ' +
+                `WHERE CAST("deletedVideo"->'channel'->'ownerAccount'->>'id' AS INTEGER) = "Video->VideoChannel"."accountId" ` +
+                   `OR CAST("deletedVideo"->'channel'->'ownerAccount'->>'id' AS INTEGER) = CAST("VideoAbuseModel"."deletedVideo"->'channel'->'ownerAccount'->>'id' AS INTEGER) ` +
               ')'
             ),
-            'countReportsForReportee'
+            'countReportsForReportee__deletedVideo'
           ]
         ]
       },
@@ -270,8 +295,10 @@ export class VideoAbuseModel extends Model<VideoAbuseModel> {
   toFormattedJSON (this: MVideoAbuseFormattable): VideoAbuse {
     const countReportsForVideo = this.get('countReportsForVideo') as number
     const nthReportForVideo = this.get('nthReportForVideo') as number
-    const countReportsForReporter = this.get('countReportsForReporter') as number
-    const countReportsForReportee = this.get('countReportsForReportee') as number
+    const countReportsForReporterVideo = this.get('countReportsForReporter__video') as number
+    const countReportsForReporterDeletedVideo = this.get('countReportsForReporter__deletedVideo') as number
+    const countReportsForReporteeVideo = this.get('countReportsForReportee__video') as number
+    const countReportsForReporteeDeletedVideo = this.get('countReportsForReportee__deletedVideo') as number
 
     const video = this.Video
       ? this.Video
@@ -300,8 +327,8 @@ export class VideoAbuseModel extends Model<VideoAbuseModel> {
       updatedAt: this.updatedAt,
       count: countReportsForVideo || 0,
       nth: nthReportForVideo || 0,
-      countReportsForReporter: countReportsForReporter || 0,
-      countReportsForReportee: countReportsForReportee || 0
+      countReportsForReporter: (countReportsForReporterVideo || 0) + (countReportsForReporterDeletedVideo || 0),
+      countReportsForReportee: (countReportsForReporteeVideo || 0) + (countReportsForReporteeDeletedVideo || 0)
     }
   }