Refactor schedule update

pull/4126/head
Chocobozzz 2021-06-11 14:33:16 +02:00
parent 20a206c3d1
commit fd6a74a835
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
3 changed files with 15 additions and 38 deletions

View File

@ -7,6 +7,7 @@ import { SCHEDULER_INTERVALS_MS } from '../../initializers/constants'
import { Notifier } from '../notifier'
import { sequelizeTypescript } from '../../initializers/database'
import { MVideoFullLight } from '@server/types/models'
import { VideoModel } from '@server/models/video/video'
export class UpdateVideosScheduler extends AbstractScheduler {
@ -25,12 +26,13 @@ export class UpdateVideosScheduler extends AbstractScheduler {
private async updateVideos () {
if (!await ScheduleVideoUpdateModel.areVideosToUpdate()) return undefined
const publishedVideos = await sequelizeTypescript.transaction(async t => {
const schedules = await ScheduleVideoUpdateModel.listVideosToUpdate(t)
const publishedVideos: MVideoFullLight[] = []
const schedules = await ScheduleVideoUpdateModel.listVideosToUpdate()
const publishedVideos: MVideoFullLight[] = []
for (const schedule of schedules) {
await sequelizeTypescript.transaction(async t => {
const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(schedule.videoId, t)
for (const schedule of schedules) {
const video = schedule.Video
logger.info('Executing scheduled video update on %s.', video.uuid)
if (schedule.privacy) {
@ -42,16 +44,13 @@ export class UpdateVideosScheduler extends AbstractScheduler {
await federateVideoIfNeeded(video, isNewVideo, t)
if (wasConfidentialVideo) {
const videoToPublish: MVideoFullLight = Object.assign(video, { ScheduleVideoUpdate: schedule, UserVideoHistories: [] })
publishedVideos.push(videoToPublish)
publishedVideos.push(video)
}
}
await schedule.destroy({ transaction: t })
}
return publishedVideos
})
})
}
for (const v of publishedVideos) {
Notifier.Instance.notifyOnNewVideoIfNeeded(v)

View File

@ -1,9 +1,9 @@
import { Op, Transaction } from 'sequelize'
import { AllowNull, BelongsTo, Column, CreatedAt, Default, ForeignKey, Model, Table, UpdatedAt } from 'sequelize-typescript'
import { MScheduleVideoUpdateFormattable, MScheduleVideoUpdateVideoAll } from '@server/types/models'
import { MScheduleVideoUpdateFormattable, MScheduleVideoUpdate } from '@server/types/models'
import { AttributesOnly } from '@shared/core-utils'
import { VideoPrivacy } from '../../../shared/models/videos'
import { ScopeNames as VideoScopeNames, VideoModel } from './video'
import { VideoModel } from './video'
@Table({
tableName: 'scheduleVideoUpdate',
@ -62,31 +62,17 @@ export class ScheduleVideoUpdateModel extends Model<Partial<AttributesOnly<Sched
.then(res => !!res)
}
static listVideosToUpdate (t: Transaction) {
static listVideosToUpdate (transaction?: Transaction) {
const query = {
where: {
updateAt: {
[Op.lte]: new Date()
}
},
include: [
{
model: VideoModel.scope(
[
VideoScopeNames.WITH_WEBTORRENT_FILES,
VideoScopeNames.WITH_STREAMING_PLAYLISTS,
VideoScopeNames.WITH_ACCOUNT_DETAILS,
VideoScopeNames.WITH_BLACKLISTED,
VideoScopeNames.WITH_THUMBNAILS,
VideoScopeNames.WITH_TAGS
]
)
}
],
transaction: t
transaction
}
return ScheduleVideoUpdateModel.findAll<MScheduleVideoUpdateVideoAll>(query)
return ScheduleVideoUpdateModel.findAll<MScheduleVideoUpdate>(query)
}
static deleteByVideoId (videoId: number, t: Transaction) {

View File

@ -1,8 +1,4 @@
import { ScheduleVideoUpdateModel } from '../../../models/video/schedule-video-update'
import { PickWith } from '@shared/core-utils'
import { MVideoAPWithoutCaption, MVideoWithBlacklistLight } from './video'
type Use<K extends keyof ScheduleVideoUpdateModel, M> = PickWith<ScheduleVideoUpdateModel, K, M>
// ############################################################################
@ -10,10 +6,6 @@ export type MScheduleVideoUpdate = Omit<ScheduleVideoUpdateModel, 'Video'>
// ############################################################################
export type MScheduleVideoUpdateVideoAll =
MScheduleVideoUpdate &
Use<'Video', MVideoAPWithoutCaption & MVideoWithBlacklistLight>
// Format for API or AP object
export type MScheduleVideoUpdateFormattable = Pick<MScheduleVideoUpdate, 'updateAt' | 'privacy'>