Add reportee stats for deleted videos
This commit is contained in:
parent
0251197e24
commit
efa012edad
|
@ -149,7 +149,7 @@
|
||||||
<span class="text-muted">{{ videoAbuse.video.channel.ownerAccount ? createByString(videoAbuse.video.channel.ownerAccount) : '' }}</span>
|
<span class="text-muted">{{ videoAbuse.video.channel.ownerAccount ? createByString(videoAbuse.video.channel.ownerAccount) : '' }}</span>
|
||||||
</div>
|
</div>
|
||||||
</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>
|
{videoAbuse.countReportsForReportee, plural, =1 {1 report} other {{{ videoAbuse.countReportsForReportee }} reports}}<span class="ml-1 glyphicon glyphicon-flag"></span>
|
||||||
</a>
|
</a>
|
||||||
</span>
|
</span>
|
||||||
|
|
|
@ -15,7 +15,7 @@ import { VideoAbuseState, VideoDetails } from '../../../shared'
|
||||||
import { CONSTRAINTS_FIELDS, VIDEO_ABUSE_STATES } from '../../initializers/constants'
|
import { CONSTRAINTS_FIELDS, VIDEO_ABUSE_STATES } from '../../initializers/constants'
|
||||||
import { MUserAccountId, MVideoAbuse, MVideoAbuseFormattable, MVideoAbuseVideo } from '../../typings/models'
|
import { MUserAccountId, MVideoAbuse, MVideoAbuseFormattable, MVideoAbuseVideo } from '../../typings/models'
|
||||||
import * as Bluebird from 'bluebird'
|
import * as Bluebird from 'bluebird'
|
||||||
import { literal, Op, Sequelize } from 'sequelize'
|
import { literal, Op } from 'sequelize'
|
||||||
import { ThumbnailModel } from './thumbnail'
|
import { ThumbnailModel } from './thumbnail'
|
||||||
import { VideoBlacklistModel } from './video-blacklist'
|
import { VideoBlacklistModel } from './video-blacklist'
|
||||||
import { ScopeNames as VideoChannelScopeNames, SummaryOptions, VideoChannelModel } from './video-channel'
|
import { ScopeNames as VideoChannelScopeNames, SummaryOptions, VideoChannelModel } from './video-channel'
|
||||||
|
@ -75,6 +75,7 @@ export enum ScopeNames {
|
||||||
attributes: {
|
attributes: {
|
||||||
include: [
|
include: [
|
||||||
[
|
[
|
||||||
|
// we don't care about this count for deleted videos, so there are not included
|
||||||
literal(
|
literal(
|
||||||
'(' +
|
'(' +
|
||||||
'SELECT count(*) ' +
|
'SELECT count(*) ' +
|
||||||
|
@ -85,6 +86,7 @@ export enum ScopeNames {
|
||||||
'countReportsForVideo'
|
'countReportsForVideo'
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
|
// we don't care about this count for deleted videos, so there are not included
|
||||||
literal(
|
literal(
|
||||||
'(' +
|
'(' +
|
||||||
'SELECT t.nth ' +
|
'SELECT t.nth ' +
|
||||||
|
@ -109,7 +111,17 @@ export enum ScopeNames {
|
||||||
'WHERE "account"."id" = "VideoAbuseModel"."reporterAccountId" ' +
|
'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(
|
literal(
|
||||||
|
@ -118,10 +130,23 @@ export enum ScopeNames {
|
||||||
'FROM "videoAbuse" ' +
|
'FROM "videoAbuse" ' +
|
||||||
'INNER JOIN "video" ON "video"."id" = "videoAbuse"."videoId" ' +
|
'INNER JOIN "video" ON "video"."id" = "videoAbuse"."videoId" ' +
|
||||||
'INNER JOIN "videoChannel" ON "videoChannel"."id" = "video"."channelId" ' +
|
'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'
|
'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__deletedVideo'
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -270,8 +295,10 @@ export class VideoAbuseModel extends Model<VideoAbuseModel> {
|
||||||
toFormattedJSON (this: MVideoAbuseFormattable): VideoAbuse {
|
toFormattedJSON (this: MVideoAbuseFormattable): VideoAbuse {
|
||||||
const countReportsForVideo = this.get('countReportsForVideo') as number
|
const countReportsForVideo = this.get('countReportsForVideo') as number
|
||||||
const nthReportForVideo = this.get('nthReportForVideo') as number
|
const nthReportForVideo = this.get('nthReportForVideo') as number
|
||||||
const countReportsForReporter = this.get('countReportsForReporter') as number
|
const countReportsForReporterVideo = this.get('countReportsForReporter__video') as number
|
||||||
const countReportsForReportee = this.get('countReportsForReportee') 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
|
const video = this.Video
|
||||||
? this.Video
|
? this.Video
|
||||||
|
@ -300,8 +327,8 @@ export class VideoAbuseModel extends Model<VideoAbuseModel> {
|
||||||
updatedAt: this.updatedAt,
|
updatedAt: this.updatedAt,
|
||||||
count: countReportsForVideo || 0,
|
count: countReportsForVideo || 0,
|
||||||
nth: nthReportForVideo || 0,
|
nth: nthReportForVideo || 0,
|
||||||
countReportsForReporter: countReportsForReporter || 0,
|
countReportsForReporter: (countReportsForReporterVideo || 0) + (countReportsForReporterDeletedVideo || 0),
|
||||||
countReportsForReportee: countReportsForReportee || 0
|
countReportsForReportee: (countReportsForReporteeVideo || 0) + (countReportsForReporteeDeletedVideo || 0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue