]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/models/video/schedule-video-update.ts
add quarantine videos feature (#1637)
[github/Chocobozzz/PeerTube.git] / server / models / video / schedule-video-update.ts
1 import { AllowNull, BelongsTo, Column, CreatedAt, Default, ForeignKey, Model, Sequelize, Table, UpdatedAt } from 'sequelize-typescript'
2 import { ScopeNames as VideoScopeNames, VideoModel } from './video'
3 import { VideoPrivacy } from '../../../shared/models/videos'
4 import { Transaction } from 'sequelize'
5
6 @Table({
7 tableName: 'scheduleVideoUpdate',
8 indexes: [
9 {
10 fields: [ 'videoId' ],
11 unique: true
12 },
13 {
14 fields: [ 'updateAt' ]
15 }
16 ]
17 })
18 export class ScheduleVideoUpdateModel extends Model<ScheduleVideoUpdateModel> {
19
20 @AllowNull(false)
21 @Default(null)
22 @Column
23 updateAt: Date
24
25 @AllowNull(true)
26 @Default(null)
27 @Column
28 privacy: VideoPrivacy.PUBLIC | VideoPrivacy.UNLISTED
29
30 @CreatedAt
31 createdAt: Date
32
33 @UpdatedAt
34 updatedAt: Date
35
36 @ForeignKey(() => VideoModel)
37 @Column
38 videoId: number
39
40 @BelongsTo(() => VideoModel, {
41 foreignKey: {
42 allowNull: false
43 },
44 onDelete: 'cascade'
45 })
46 Video: VideoModel
47
48 static areVideosToUpdate () {
49 const query = {
50 logging: false,
51 attributes: [ 'id' ],
52 where: {
53 updateAt: {
54 [Sequelize.Op.lte]: new Date()
55 }
56 }
57 }
58
59 return ScheduleVideoUpdateModel.findOne(query)
60 .then(res => !!res)
61 }
62
63 static listVideosToUpdate (t: Transaction) {
64 const query = {
65 where: {
66 updateAt: {
67 [Sequelize.Op.lte]: new Date()
68 }
69 },
70 include: [
71 {
72 model: VideoModel.scope(
73 [
74 VideoScopeNames.WITH_FILES,
75 VideoScopeNames.WITH_ACCOUNT_DETAILS,
76 VideoScopeNames.WITH_BLACKLISTED
77 ]
78 )
79 }
80 ],
81 transaction: t
82 }
83
84 return ScheduleVideoUpdateModel.findAll(query)
85 }
86
87 static deleteByVideoId (videoId: number, t: Transaction) {
88 const query = {
89 where: {
90 videoId
91 },
92 transaction: t
93 }
94
95 return ScheduleVideoUpdateModel.destroy(query)
96 }
97
98 toFormattedJSON () {
99 return {
100 updateAt: this.updateAt,
101 privacy: this.privacy || undefined
102 }
103 }
104 }