X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fmodels%2Fvideo%2Fvideo-import.ts;h=5c73fb07c8a07bc7087e2766e05afbe61afdb5cb;hb=9e2e51dc0bee5dc065a61c927e787ae021e8aa73;hp=f596eea9d259f1a256b6c1d9d14f81fb543df0d2;hpb=453e83ea5d81d203ba34bc43cd5c2c750ba40568;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/models/video/video-import.ts b/server/models/video/video-import.ts index f596eea9d..5c73fb07c 100644 --- a/server/models/video/video-import.ts +++ b/server/models/video/video-import.ts @@ -13,15 +13,16 @@ import { Table, UpdatedAt } from 'sequelize-typescript' +import { afterCommitIfTransaction } from '@server/helpers/database-utils' +import { MVideoImportDefault, MVideoImportFormattable } from '@server/types/models/video/video-import' +import { AttributesOnly } from '@shared/core-utils' +import { VideoImport, VideoImportState } from '../../../shared' +import { isVideoImportStateValid, isVideoImportTargetUrlValid } from '../../helpers/custom-validators/video-imports' +import { isVideoMagnetUriValid } from '../../helpers/custom-validators/videos' import { CONSTRAINTS_FIELDS, VIDEO_IMPORT_STATES } from '../../initializers/constants' +import { UserModel } from '../user/user' import { getSort, throwIfNotValid } from '../utils' import { ScopeNames as VideoModelScopeNames, VideoModel } from './video' -import { isVideoImportStateValid, isVideoImportTargetUrlValid } from '../../helpers/custom-validators/video-imports' -import { VideoImport, VideoImportState } from '../../../shared' -import { isVideoMagnetUriValid } from '../../helpers/custom-validators/videos' -import { UserModel } from '../account/user' -import * as Bluebird from 'bluebird' -import { MVideoImportDefault } from '@server/typings/models/video/video-import' @DefaultScope(() => ({ include: [ @@ -52,7 +53,7 @@ import { MVideoImportDefault } from '@server/typings/models/video/video-import' } ] }) -export class VideoImportModel extends Model { +export class VideoImportModel extends Model>> { @CreatedAt createdAt: Date @@ -114,13 +115,13 @@ export class VideoImportModel extends Model { @AfterUpdate static deleteVideoIfFailed (instance: VideoImportModel, options) { if (instance.state === VideoImportState.FAILED) { - return instance.Video.destroy({ transaction: options.transaction }) + return afterCommitIfTransaction(options.transaction, () => instance.Video.destroy()) } return undefined } - static loadAndPopulateVideo (id: number): Bluebird { + static loadAndPopulateVideo (id: number): Promise { return VideoImportModel.findByPk(id) } @@ -129,6 +130,7 @@ export class VideoImportModel extends Model { distinct: true, include: [ { + attributes: [ 'id' ], model: UserModel.unscoped(), // FIXME: Without this, sequelize try to COUNT(DISTINCT(*)) which is an invalid SQL query required: true } @@ -154,7 +156,7 @@ export class VideoImportModel extends Model { return this.targetUrl || this.magnetUri || this.torrentName } - toFormattedJSON (): VideoImport { + toFormattedJSON (this: MVideoImportFormattable): VideoImport { const videoFormatOptions = { completeDescription: true, additionalAttributes: { state: true, waitTranscoding: true, scheduledUpdate: true }