8c42dbc21fbb2dc74681e5bb7c9ea7e9cf17cd72
[oweals/peertube.git] / server / models / video / video-blacklist.ts
1 import * as Sequelize from 'sequelize'
2
3 import { addMethodsToModel, getSort } from '../utils'
4 import {
5   BlacklistedVideoInstance,
6   BlacklistedVideoAttributes,
7
8   BlacklistedVideoMethods
9 } from './video-blacklist-interface'
10
11 let BlacklistedVideo: Sequelize.Model<BlacklistedVideoInstance, BlacklistedVideoAttributes>
12 let toFormatedJSON: BlacklistedVideoMethods.ToFormatedJSON
13 let countTotal: BlacklistedVideoMethods.CountTotal
14 let list: BlacklistedVideoMethods.List
15 let listForApi: BlacklistedVideoMethods.ListForApi
16 let loadById: BlacklistedVideoMethods.LoadById
17 let loadByVideoId: BlacklistedVideoMethods.LoadByVideoId
18
19 export default function (sequelize: Sequelize.Sequelize, DataTypes: Sequelize.DataTypes) {
20   BlacklistedVideo = sequelize.define<BlacklistedVideoInstance, BlacklistedVideoAttributes>('BlacklistedVideo',
21     {},
22     {
23       indexes: [
24         {
25           fields: [ 'videoId' ],
26           unique: true
27         }
28       ]
29     }
30   )
31
32   const classMethods = [
33     associate,
34
35     countTotal,
36     list,
37     listForApi,
38     loadById,
39     loadByVideoId
40   ]
41   const instanceMethods = [
42     toFormatedJSON
43   ]
44   addMethodsToModel(BlacklistedVideo, classMethods, instanceMethods)
45
46   return BlacklistedVideo
47 }
48
49 // ------------------------------ METHODS ------------------------------
50
51 toFormatedJSON = function (this: BlacklistedVideoInstance) {
52   return {
53     id: this.id,
54     videoId: this.videoId,
55     createdAt: this.createdAt
56   }
57 }
58
59 // ------------------------------ STATICS ------------------------------
60
61 function associate (models) {
62   BlacklistedVideo.belongsTo(models.Video, {
63     foreignKey: 'videoId',
64     onDelete: 'cascade'
65   })
66 }
67
68 countTotal = function () {
69   return BlacklistedVideo.count()
70 }
71
72 list = function () {
73   return BlacklistedVideo.findAll()
74 }
75
76 listForApi = function (start: number, count: number, sort: string) {
77   const query = {
78     offset: start,
79     limit: count,
80     order: [ getSort(sort) ]
81   }
82
83   return BlacklistedVideo.findAndCountAll(query).then(({ rows, count }) => {
84     return {
85       data: rows,
86       total: count
87     }
88   })
89 }
90
91 loadById = function (id: number) {
92   return BlacklistedVideo.findById(id)
93 }
94
95 loadByVideoId = function (id: string) {
96   const query = {
97     where: {
98       videoId: id
99     }
100   }
101
102   return BlacklistedVideo.findOne(query)
103 }