]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/models/video/video-blacklist.ts
Delete actor too when deleting account/video channel
[github/Chocobozzz/PeerTube.git] / server / models / video / video-blacklist.ts
index ae8286285cd1bb37d1a29591625fc27834f7c8eb..26167174abe8ff6234045ae0ab14897f6e64e234 100644 (file)
-import * as Sequelize from 'sequelize'
-
-import { SortType } from '../../helpers'
-import { addMethodsToModel, getSortOnModel } from '../utils'
-import { VideoInstance } from './video-interface'
-import {
-  BlacklistedVideoInstance,
-  BlacklistedVideoAttributes,
-
-  BlacklistedVideoMethods
-} from './video-blacklist-interface'
-
-let BlacklistedVideo: Sequelize.Model<BlacklistedVideoInstance, BlacklistedVideoAttributes>
-let toFormattedJSON: BlacklistedVideoMethods.ToFormattedJSON
-let listForApi: BlacklistedVideoMethods.ListForApi
-let loadByVideoId: BlacklistedVideoMethods.LoadByVideoId
-
-export default function (sequelize: Sequelize.Sequelize, DataTypes: Sequelize.DataTypes) {
-  BlacklistedVideo = sequelize.define<BlacklistedVideoInstance, BlacklistedVideoAttributes>('BlacklistedVideo',
-    {},
+import { BelongsTo, Column, CreatedAt, ForeignKey, Model, Table, UpdatedAt } from 'sequelize-typescript'
+import { SortType } from '../../helpers/utils'
+import { getSortOnModel } from '../utils'
+import { VideoModel } from './video'
+
+@Table({
+  tableName: 'videoBlacklist',
+  indexes: [
     {
-      indexes: [
-        {
-          fields: [ 'videoId' ],
-          unique: true
-        }
-      ]
+      fields: [ 'videoId' ],
+      unique: true
     }
-  )
-
-  const classMethods = [
-    associate,
-
-    listForApi,
-    loadByVideoId
   ]
-  const instanceMethods = [
-    toFormattedJSON
-  ]
-  addMethodsToModel(BlacklistedVideo, classMethods, instanceMethods)
-
-  return BlacklistedVideo
-}
+})
+export class VideoBlacklistModel extends Model<VideoBlacklistModel> {
 
-// ------------------------------ METHODS ------------------------------
+  @CreatedAt
+  createdAt: Date
 
-toFormattedJSON = function (this: BlacklistedVideoInstance) {
-  let video: VideoInstance
+  @UpdatedAt
+  updatedAt: Date
 
-  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
-  }
-}
+  @ForeignKey(() => VideoModel)
+  @Column
+  videoId: number
 
-// ------------------------------ STATICS ------------------------------
-
-function associate (models) {
-  BlacklistedVideo.belongsTo(models.Video, {
+  @BelongsTo(() => VideoModel, {
     foreignKey: {
-      name: 'videoId',
       allowNull: false
     },
-    onDelete: 'CASCADE'
+    onDelete: 'cascade'
   })
-}
+  Video: VideoModel
+
+  static listForApi (start: number, count: number, sort: SortType) {
+    const query = {
+      offset: start,
+      limit: count,
+      order: getSortOnModel(sort.sortModel, sort.sortValue),
+      include: [ { model: VideoModel } ]
+    }
 
-listForApi = function (start: number, count: number, sort: SortType) {
-  const query = {
-    offset: start,
-    limit: count,
-    order: [ getSortOnModel(sort.sortModel, sort.sortValue) ],
-    include: [ { model: BlacklistedVideo['sequelize'].models.Video } ]
+    return VideoBlacklistModel.findAndCountAll(query)
+      .then(({ rows, count }) => {
+        return {
+          data: rows,
+          total: count
+        }
+      })
   }
 
-  return BlacklistedVideo.findAndCountAll(query).then(({ rows, count }) => {
-    return {
-      data: rows,
-      total: count
+  static loadByVideoId (id: number) {
+    const query = {
+      where: {
+        videoId: id
+      }
     }
-  })
-}
 
-loadByVideoId = function (id: number) {
-  const query = {
-    where: {
-      videoId: id
-    }
+    return VideoBlacklistModel.findOne(query)
   }
 
-  return BlacklistedVideo.findOne(query)
+  toFormattedJSON () {
+    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
+    }
+  }
 }