// Force the actor creation, sometimes Sequelize skips the save() when it thinks the instance already exists
// (which could be false in a retried query)
- const actorCreated = await ActorModel.create(actor.toJSON(), { transaction: t })
+ const [ actorCreated ] = await ActorModel.findOrCreate({
+ defaults: actor.toJSON(),
+ where: {
+ url: actor.url
+ },
+ transaction: t
+ })
if (actorCreated.type === 'Person' || actorCreated.type === 'Application') {
const account = await saveAccount(actorCreated, result, t)
}
}
-function saveAccount (actor: ActorModel, result: FetchRemoteActorResult, t: Transaction) {
- const account = new AccountModel({
- name: result.name,
- actorId: actor.id
+async function saveAccount (actor: ActorModel, result: FetchRemoteActorResult, t: Transaction) {
+ const [ accountCreated ] = await AccountModel.findOrCreate({
+ defaults: {
+ name: result.name,
+ actorId: actor.id
+ },
+ where: {
+ actorId: actor.id
+ },
+ transaction: t
})
- return account.save({ transaction: t })
+ return accountCreated
}
async function saveVideoChannel (actor: ActorModel, result: FetchRemoteActorResult, ownerActor: ActorModel, t: Transaction) {
- const videoChannel = new VideoChannelModel({
- name: result.name,
- description: result.summary,
- actorId: actor.id,
- accountId: ownerActor.Account.id
+ const [ videoChannelCreated ] = await VideoChannelModel.findOrCreate({
+ defaults: {
+ name: result.name,
+ description: result.summary,
+ actorId: actor.id,
+ accountId: ownerActor.Account.id
+ },
+ where: {
+ actorId: actor.id
+ },
+ transaction: t
})
- return videoChannel.save({ transaction: t })
+ return videoChannelCreated
}
async function refreshActorIfNeeded (actor: ActorModel) {
},
include: [
{
- model: VideoShareModel,
+ attributes: [ 'id' ],
+ model: VideoShareModel.unscoped(),
required: false,
where: {
[Sequelize.Op.and]: [
},
include: [
{
- model: ActorModel,
- required: true
+ attributes: [ 'id', 'url' ],
+ model: ActorModel.unscoped()
}
]
},
{
- model: VideoChannelModel,
+ model: VideoChannelModel.unscoped(),
required: true,
include: [
{
- model: AccountModel,
+ attributes: [ 'name' ],
+ model: AccountModel.unscoped(),
+ required: true,
+ include: [
+ {
+ attributes: [ 'id', 'url' ],
+ model: ActorModel.unscoped(),
+ required: true
+ }
+ ]
+ },
+ {
+ attributes: [ 'id', 'url' ],
+ model: ActorModel.unscoped(),
required: true
}
]
},
{
+ attributes: [ 'type' ],
model: AccountVideoRateModel,
- include: [ AccountModel ]
+ required: false,
+ include: [
+ {
+ attributes: [ 'id' ],
+ model: AccountModel.unscoped(),
+ include: [
+ {
+ attributes: [ 'url' ],
+ model: ActorModel.unscoped(),
+ include: [
+ {
+ attributes: [ 'host' ],
+ model: ServerModel,
+ required: false
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ attributes: [ 'url' ],
+ model: VideoCommentModel,
+ required: false
},
VideoFileModel,
- TagModel,
- VideoCommentModel
+ TagModel
]
}
import 'mocha'
import { Video, VideoPrivacy } from '../../../../shared/models/videos'
import { VideoComment, VideoCommentThreadTree } from '../../../../shared/models/videos/video-comment.model'
-import { checkVideoFilesWereRemoved, completeVideoCheck } from '../../utils'
+import { completeVideoCheck } from '../../utils'
import {
flushAndRunMultipleServers, flushTests, getVideosList, killallServers, ServerInfo, setAccessTokensToServers, uploadVideo,
let res = await getVideosList(servers[ 0 ].url)
expect(res.body.total).to.equal(1)
-
- await checkVideoFilesWereRemoved(video4.uuid, servers[0].serverNumber)
})
})
await wait(5000)
- const res = await getVideosList(servers[1].url)
- expect(res.body.data).to.be.an('array')
- expect(res.body.data).to.have.lengthOf(2)
-
const resVideo = await getVideo(servers[1].url, videos[0].uuid)
expect(resVideo.body).not.to.be.undefined