]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/models/video/video-blacklist.ts
Add downloadingEnabled property to video model
[github/Chocobozzz/PeerTube.git] / server / models / video / video-blacklist.ts
index 26167174abe8ff6234045ae0ab14897f6e64e234..67f7cd4871c0aeef041996ff11f557002e26ebfd 100644 (file)
@@ -1,7 +1,23 @@
-import { BelongsTo, Column, CreatedAt, ForeignKey, Model, Table, UpdatedAt } from 'sequelize-typescript'
-import { SortType } from '../../helpers/utils'
-import { getSortOnModel } from '../utils'
+import {
+  AfterCreate,
+  AfterDestroy,
+  AllowNull,
+  BelongsTo,
+  Column,
+  CreatedAt,
+  DataType,
+  ForeignKey,
+  Is,
+  Model,
+  Table,
+  UpdatedAt
+} from 'sequelize-typescript'
+import { getSortOnModel, SortType, throwIfNotValid } from '../utils'
 import { VideoModel } from './video'
+import { isVideoBlacklistReasonValid } from '../../helpers/custom-validators/video-blacklist'
+import { Emailer } from '../../lib/emailer'
+import { VideoBlacklist } 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,12 +53,27 @@ 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,
       limit: count,
       order: getSortOnModel(sort.sortModel, sort.sortValue),
-      include: [ { model: VideoModel } ]
+      include: [
+        {
+          model: VideoModel,
+          required: true
+        }
+      ]
     }
 
     return VideoBlacklistModel.findAndCountAll(query)
@@ -59,22 +95,26 @@ export class VideoBlacklistModel extends Model<VideoBlacklistModel> {
     return VideoBlacklistModel.findOne(query)
   }
 
-  toFormattedJSON () {
+  toFormattedJSON (): VideoBlacklist {
     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
+      }
     }
   }
 }