diff --git a/server/controllers/api/videos/import.ts b/server/controllers/api/videos/import.ts index adc2f9aa2..a058b37ef 100644 --- a/server/controllers/api/videos/import.ts +++ b/server/controllers/api/videos/import.ts @@ -28,6 +28,7 @@ import { MChannelActorAccountDefault, MThumbnail, MUser, + MVideoTag, MVideoThumbnailAccountDefault, MVideoWithBlacklistLight } from '@server/typings/models' @@ -244,7 +245,7 @@ function insertIntoDB (parameters: { const sequelizeOptions = { transaction: t } // Save video object in database - const videoCreated = await video.save(sequelizeOptions) as (MVideoThumbnailAccountDefault & MVideoWithBlacklistLight) + const videoCreated = await video.save(sequelizeOptions) as (MVideoThumbnailAccountDefault & MVideoWithBlacklistLight & MVideoTag) videoCreated.VideoChannel = videoChannel if (thumbnailModel) await videoCreated.addAndSaveThumbnail(thumbnailModel, t) @@ -264,6 +265,9 @@ function insertIntoDB (parameters: { const tagInstances = await TagModel.findOrCreateTags(tags, t) await videoCreated.$set('Tags', tagInstances, sequelizeOptions) + videoCreated.Tags = tagInstances + } else { + videoCreated.Tags = [] } // Create video import object in database diff --git a/server/controllers/api/videos/index.ts b/server/controllers/api/videos/index.ts index 9af71d276..b4f656575 100644 --- a/server/controllers/api/videos/index.ts +++ b/server/controllers/api/videos/index.ts @@ -63,7 +63,7 @@ import { createVideoMiniatureFromExisting, generateVideoMiniature } from '../../ import { ThumbnailType } from '../../../../shared/models/videos/thumbnail.type' import { VideoTranscodingPayload } from '../../../lib/job-queue/handlers/video-transcoding' import { Hooks } from '../../../lib/plugins/hooks' -import { MVideoFullLight } from '@server/typings/models' +import { MVideoDetails, MVideoFullLight } from '@server/typings/models' const auditLogger = auditLoggerFactory('videos') const videosRouter = express.Router() @@ -198,7 +198,7 @@ async function addVideo (req: express.Request, res: express.Response) { originallyPublishedAt: videoInfo.originallyPublishedAt } - const video = new VideoModel(videoData) + const video = new VideoModel(videoData) as MVideoDetails video.url = getVideoActivityPubUrl(video) // We use the UUID, so set the URL after building the object const videoFile = new VideoFileModel({ diff --git a/server/lib/activitypub/videos.ts b/server/lib/activitypub/videos.ts index 5c10f9764..035994da8 100644 --- a/server/lib/activitypub/videos.ts +++ b/server/lib/activitypub/videos.ts @@ -65,9 +65,7 @@ import { MVideoFile, MVideoFullLight, MVideoId, - MVideoTag, - MVideoThumbnail, - MVideoWithAllFiles + MVideoThumbnail } from '../../typings/models' import { MThumbnail } from '../../typings/models/video/thumbnail' diff --git a/server/models/video/tag.ts b/server/models/video/tag.ts index 0fc3cfd4c..b110f2a43 100644 --- a/server/models/video/tag.ts +++ b/server/models/video/tag.ts @@ -6,6 +6,7 @@ import { throwIfNotValid } from '../utils' import { VideoModel } from './video' import { VideoTagModel } from './video-tag' import { VideoPrivacy, VideoState } from '../../../shared/models/videos' +import { MTag } from '@server/typings/models' @Table({ tableName: 'tag', @@ -37,10 +38,10 @@ export class TagModel extends Model { }) Videos: VideoModel[] - static findOrCreateTags (tags: string[], transaction: Transaction) { - if (tags === null) return [] + static findOrCreateTags (tags: string[], transaction: Transaction): Promise { + if (tags === null) return Promise.resolve([]) - const tasks: Bluebird[] = [] + const tasks: Bluebird[] = [] tags.forEach(tag => { const query = { where: { @@ -52,7 +53,7 @@ export class TagModel extends Model { transaction } - const promise = TagModel.findOrCreate(query) + const promise = TagModel.findOrCreate(query) .then(([ tagInstance ]) => tagInstance) tasks.push(promise) })