]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/models/video/video-blacklist.ts
Add blacklist reason field
[github/Chocobozzz/PeerTube.git] / server / models / video / video-blacklist.ts
index 26167174abe8ff6234045ae0ab14897f6e64e234..1b8a338cb5e334e23dd5b1611ccec08bcfa88e5e 100644 (file)
@@ -1,7 +1,23 @@
-import { BelongsTo, Column, CreatedAt, ForeignKey, Model, Table, UpdatedAt } from 'sequelize-typescript'
+import {
+  AfterCreate,
+  AfterDestroy,
+  AllowNull,
+  BelongsTo,
+  Column,
+  CreatedAt, DataType,
+  ForeignKey,
+  Is,
+  Model,
+  Table,
+  UpdatedAt
+} from 'sequelize-typescript'
 import { SortType } from '../../helpers/utils'
-import { getSortOnModel } from '../utils'
+import { getSortOnModel, throwIfNotValid } from '../utils'
 import { VideoModel } from './video'
+import { isVideoBlacklistReasonValid } from '../../helpers/custom-validators/video-blacklist'
+import { Emailer } from '../../lib/emailer'
+import { BlacklistedVideo } from '../../../shared/models/videos'
+import { CONSTRAINTS_FIELDS } from '../../initializers'
 
 @Table({
   tableName: 'videoBlacklist',
@@ -14,6 +30,11 @@ import { VideoModel } from './video'
 })
 export class VideoBlacklistModel extends Model<VideoBlacklistModel> {
 
+  @AllowNull(true)
+  @Is('VideoBlacklistReason', value => throwIfNotValid(value, isVideoBlacklistReasonValid, 'reason'))
+  @Column(DataType.STRING(CONSTRAINTS_FIELDS.VIDEO_BLACKLIST.REASON.max))
+  reason: string
+
   @CreatedAt
   createdAt: Date
 
@@ -32,6 +53,16 @@ export class VideoBlacklistModel extends Model<VideoBlacklistModel> {
   })
   Video: VideoModel
 
+  @AfterCreate
+  static sendBlacklistEmailNotification (instance: VideoBlacklistModel) {
+    return Emailer.Instance.addVideoBlacklistReportJob(instance.videoId, instance.reason)
+  }
+
+  @AfterDestroy
+  static sendUnblacklistEmailNotification (instance: VideoBlacklistModel) {
+    return Emailer.Instance.addVideoUnblacklistReportJob(instance.videoId)
+  }
+
   static listForApi (start: number, count: number, sort: SortType) {
     const query = {
       offset: start,
@@ -59,22 +90,26 @@ export class VideoBlacklistModel extends Model<VideoBlacklistModel> {
     return VideoBlacklistModel.findOne(query)
   }
 
-  toFormattedJSON () {
+  toFormattedJSON (): BlacklistedVideo {
     const video = this.Video
 
     return {
       id: this.id,
-      videoId: this.videoId,
       createdAt: this.createdAt,
       updatedAt: this.updatedAt,
-      name: video.name,
-      uuid: video.uuid,
-      description: video.description,
-      duration: video.duration,
-      views: video.views,
-      likes: video.likes,
-      dislikes: video.dislikes,
-      nsfw: video.nsfw
+      reason: this.reason,
+
+      video: {
+        id: video.id,
+        name: video.name,
+        uuid: video.uuid,
+        description: video.description,
+        duration: video.duration,
+        views: video.views,
+        likes: video.likes,
+        dislikes: video.dislikes,
+        nsfw: video.nsfw
+      }
     }
   }
 }