]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/models/video/video-blacklist.ts
Add ability to unfederate a local video (on blacklist)
[github/Chocobozzz/PeerTube.git] / server / models / video / video-blacklist.ts
1 import { AllowNull, BelongsTo, Column, CreatedAt, DataType, ForeignKey, Is, Model, Table, UpdatedAt } from 'sequelize-typescript'
2 import { getSortOnModel, SortType, throwIfNotValid } from '../utils'
3 import { VideoModel } from './video'
4 import { isVideoBlacklistReasonValid } from '../../helpers/custom-validators/video-blacklist'
5 import { VideoBlacklist } from '../../../shared/models/videos'
6 import { CONSTRAINTS_FIELDS } from '../../initializers'
7
8 @Table({
9 tableName: 'videoBlacklist',
10 indexes: [
11 {
12 fields: [ 'videoId' ],
13 unique: true
14 }
15 ]
16 })
17 export class VideoBlacklistModel extends Model<VideoBlacklistModel> {
18
19 @AllowNull(true)
20 @Is('VideoBlacklistReason', value => throwIfNotValid(value, isVideoBlacklistReasonValid, 'reason'))
21 @Column(DataType.STRING(CONSTRAINTS_FIELDS.VIDEO_BLACKLIST.REASON.max))
22 reason: string
23
24 @AllowNull(false)
25 @Column
26 unfederated: boolean
27
28 @CreatedAt
29 createdAt: Date
30
31 @UpdatedAt
32 updatedAt: Date
33
34 @ForeignKey(() => VideoModel)
35 @Column
36 videoId: number
37
38 @BelongsTo(() => VideoModel, {
39 foreignKey: {
40 allowNull: false
41 },
42 onDelete: 'cascade'
43 })
44 Video: VideoModel
45
46 static listForApi (start: number, count: number, sort: SortType) {
47 const query = {
48 offset: start,
49 limit: count,
50 order: getSortOnModel(sort.sortModel, sort.sortValue),
51 include: [
52 {
53 model: VideoModel,
54 required: true
55 }
56 ]
57 }
58
59 return VideoBlacklistModel.findAndCountAll(query)
60 .then(({ rows, count }) => {
61 return {
62 data: rows,
63 total: count
64 }
65 })
66 }
67
68 static loadByVideoId (id: number) {
69 const query = {
70 where: {
71 videoId: id
72 }
73 }
74
75 return VideoBlacklistModel.findOne(query)
76 }
77
78 toFormattedJSON (): VideoBlacklist {
79 const video = this.Video
80
81 return {
82 id: this.id,
83 createdAt: this.createdAt,
84 updatedAt: this.updatedAt,
85 reason: this.reason,
86 unfederated: this.unfederated,
87
88 video: {
89 id: video.id,
90 name: video.name,
91 uuid: video.uuid,
92 description: video.description,
93 duration: video.duration,
94 views: video.views,
95 likes: video.likes,
96 dislikes: video.dislikes,
97 nsfw: video.nsfw
98 }
99 }
100 }
101 }