1
0
Fork 0

Refactor schedule update

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

View File

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

View File

@ -1,8 +1,4 @@
import { ScheduleVideoUpdateModel } from '../../../models/video/schedule-video-update' 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 // Format for API or AP object
export type MScheduleVideoUpdateFormattable = Pick<MScheduleVideoUpdate, 'updateAt' | 'privacy'> export type MScheduleVideoUpdateFormattable = Pick<MScheduleVideoUpdate, 'updateAt' | 'privacy'>