-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',
}
]
})
-export class ScheduleVideoUpdateModel extends Model<ScheduleVideoUpdateModel> {
+export class ScheduleVideoUpdateModel extends Model<Partial<AttributesOnly<ScheduleVideoUpdateModel>>> {
@AllowNull(false)
@Default(null)
@AllowNull(true)
@Default(null)
@Column
- privacy: VideoPrivacy
+ privacy: VideoPrivacy.PUBLIC | VideoPrivacy.UNLISTED | VideoPrivacy.INTERNAL
@CreatedAt
createdAt: Date
})
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
+ }
+ }
}