-import { AllowNull, BelongsTo, Column, CreatedAt, Default, ForeignKey, Model, Sequelize, Table, UpdatedAt } from 'sequelize-typescript'
+import { AllowNull, BelongsTo, Column, CreatedAt, Default, ForeignKey, Model, Table, UpdatedAt } from 'sequelize-typescript'
import { ScopeNames as VideoScopeNames, VideoModel } from './video'
import { VideoPrivacy } from '../../../shared/models/videos'
-import { Transaction } from 'sequelize'
+import { Op, Transaction } from 'sequelize'
+import { MScheduleVideoUpdateFormattable, MScheduleVideoUpdateVideoAll } from '@server/types/models'
@Table({
tableName: 'scheduleVideoUpdate',
@AllowNull(true)
@Default(null)
@Column
- privacy: VideoPrivacy
+ privacy: VideoPrivacy.PUBLIC | VideoPrivacy.UNLISTED | VideoPrivacy.INTERNAL
@CreatedAt
createdAt: Date
})
Video: VideoModel
+ static areVideosToUpdate () {
+ const query = {
+ logging: false,
+ attributes: [ 'id' ],
+ where: {
+ updateAt: {
+ [Op.lte]: new Date()
+ }
+ }
+ }
+
+ return ScheduleVideoUpdateModel.findOne(query)
+ .then(res => !!res)
+ }
+
static listVideosToUpdate (t: Transaction) {
const query = {
where: {
updateAt: {
- [Sequelize.Op.lte]: new Date()
+ [Op.lte]: new Date()
}
},
include: [
{
model: VideoModel.scope(
[
- VideoScopeNames.WITH_FILES,
- VideoScopeNames.WITH_ACCOUNT_DETAILS
+ VideoScopeNames.WITH_WEBTORRENT_FILES,
+ VideoScopeNames.WITH_STREAMING_PLAYLISTS,
+ VideoScopeNames.WITH_ACCOUNT_DETAILS,
+ VideoScopeNames.WITH_BLACKLISTED,
+ VideoScopeNames.WITH_THUMBNAILS,
+ VideoScopeNames.WITH_TAGS
]
)
}
transaction: t
}
- return ScheduleVideoUpdateModel.findAll(query)
+ return ScheduleVideoUpdateModel.findAll<MScheduleVideoUpdateVideoAll>(query)
+ }
+
+ static deleteByVideoId (videoId: number, t: Transaction) {
+ const query = {
+ where: {
+ videoId
+ },
+ transaction: t
+ }
+
+ return ScheduleVideoUpdateModel.destroy(query)
}
+ toFormattedJSON (this: MScheduleVideoUpdateFormattable) {
+ return {
+ updateAt: this.updateAt,
+ privacy: this.privacy || undefined
+ }
+ }
}