123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- import { AllowNull, BelongsTo, Column, CreatedAt, Default, ForeignKey, Model, Sequelize, Table, UpdatedAt } from 'sequelize-typescript'
- import { ScopeNames as VideoScopeNames, VideoModel } from './video'
- import { VideoPrivacy } from '../../../shared/models/videos'
- import { Transaction } from 'sequelize'
- @Table({
- tableName: 'scheduleVideoUpdate',
- indexes: [
- {
- fields: [ 'videoId' ],
- unique: true
- },
- {
- fields: [ 'updateAt' ]
- }
- ]
- })
- export class ScheduleVideoUpdateModel extends Model<ScheduleVideoUpdateModel> {
- @AllowNull(false)
- @Default(null)
- @Column
- updateAt: Date
- @AllowNull(true)
- @Default(null)
- @Column
- privacy: VideoPrivacy.PUBLIC | VideoPrivacy.UNLISTED
- @CreatedAt
- createdAt: Date
- @UpdatedAt
- updatedAt: Date
- @ForeignKey(() => VideoModel)
- @Column
- videoId: number
- @BelongsTo(() => VideoModel, {
- foreignKey: {
- allowNull: false
- },
- onDelete: 'cascade'
- })
- Video: VideoModel
- static areVideosToUpdate () {
- const query = {
- logging: false,
- attributes: [ 'id' ],
- where: {
- updateAt: {
- [Sequelize.Op.lte]: new Date()
- }
- }
- }
- return ScheduleVideoUpdateModel.findOne(query)
- .then(res => !!res)
- }
- static listVideosToUpdate (t: Transaction) {
- const query = {
- where: {
- updateAt: {
- [Sequelize.Op.lte]: new Date()
- }
- },
- include: [
- {
- model: VideoModel.scope(
- [
- VideoScopeNames.WITH_FILES,
- VideoScopeNames.WITH_ACCOUNT_DETAILS
- ]
- )
- }
- ],
- transaction: t
- }
- return ScheduleVideoUpdateModel.findAll(query)
- }
- static deleteByVideoId (videoId: number, t: Transaction) {
- const query = {
- where: {
- videoId
- },
- transaction: t
- }
- return ScheduleVideoUpdateModel.destroy(query)
- }
- toFormattedJSON () {
- return {
- updateAt: this.updateAt,
- privacy: this.privacy || undefined
- }
- }
- }
|