]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/models/video/schedule-video-update.ts
Fix pending transcoding with failed job
[github/Chocobozzz/PeerTube.git] / server / models / video / schedule-video-update.ts
index d4e37beb5ce245eaccb95e7a3923baa9257b8a6f..d462c20c763ca7df8917e8cd6a20b88759faec1e 100644 (file)
@@ -1,7 +1,9 @@
-import { AllowNull, BelongsTo, Column, CreatedAt, Default, ForeignKey, Model, Sequelize, Table, UpdatedAt } from 'sequelize-typescript'
-import { ScopeNames as VideoScopeNames, VideoModel } from './video'
+import { Op, Transaction } from 'sequelize'
+import { AllowNull, BelongsTo, Column, CreatedAt, Default, ForeignKey, Model, Table, UpdatedAt } from 'sequelize-typescript'
+import { MScheduleVideoUpdateFormattable, MScheduleVideoUpdate } from '@server/types/models'
+import { AttributesOnly } from '@shared/core-utils'
 import { VideoPrivacy } from '../../../shared/models/videos'
-import { Transaction } from 'sequelize'
+import { VideoModel } from './video'
 
 @Table({
   tableName: 'scheduleVideoUpdate',
@@ -15,7 +17,7 @@ import { Transaction } from 'sequelize'
     }
   ]
 })
-export class ScheduleVideoUpdateModel extends Model<ScheduleVideoUpdateModel> {
+export class ScheduleVideoUpdateModel extends Model<Partial<AttributesOnly<ScheduleVideoUpdateModel>>> {
 
   @AllowNull(false)
   @Default(null)
@@ -25,7 +27,7 @@ export class ScheduleVideoUpdateModel extends Model<ScheduleVideoUpdateModel> {
   @AllowNull(true)
   @Default(null)
   @Column
-  privacy: VideoPrivacy
+  privacy: VideoPrivacy.PUBLIC | VideoPrivacy.UNLISTED | VideoPrivacy.INTERNAL
 
   @CreatedAt
   createdAt: Date
@@ -45,27 +47,49 @@ export class ScheduleVideoUpdateModel extends Model<ScheduleVideoUpdateModel> {
   })
   Video: VideoModel
 
-  static listVideosToUpdate (t: Transaction) {
+  static areVideosToUpdate () {
     const query = {
+      logging: false,
+      attributes: [ 'id' ],
       where: {
         updateAt: {
-          [Sequelize.Op.lte]: new Date()
+          [Op.lte]: new Date()
         }
-      },
-      include: [
-        {
-          model: VideoModel.scope(
-            [
-              VideoScopeNames.WITH_FILES,
-              VideoScopeNames.WITH_ACCOUNT_DETAILS
-            ]
-          )
+      }
+    }
+
+    return ScheduleVideoUpdateModel.findOne(query)
+      .then(res => !!res)
+  }
+
+  static listVideosToUpdate (transaction?: Transaction) {
+    const query = {
+      where: {
+        updateAt: {
+          [Op.lte]: new Date()
         }
-      ],
+      },
+      transaction
+    }
+
+    return ScheduleVideoUpdateModel.findAll<MScheduleVideoUpdate>(query)
+  }
+
+  static deleteByVideoId (videoId: number, t: Transaction) {
+    const query = {
+      where: {
+        videoId
+      },
       transaction: t
     }
 
-    return ScheduleVideoUpdateModel.findAll(query)
+    return ScheduleVideoUpdateModel.destroy(query)
   }
 
+  toFormattedJSON (this: MScheduleVideoUpdateFormattable) {
+    return {
+      updateAt: this.updateAt,
+      privacy: this.privacy || undefined
+    }
+  }
 }