import { getFormattedObjects } from '../../../helpers/utils'
import { changeVideoChannelShare } from '../../../lib/activitypub'
import { sendUpdateVideo } from '../../../lib/activitypub/send'
+import { VideoModel } from '../../../models/video/video'
const ownershipVideoRouter = express.Router()
async function acceptOwnership (req: express.Request, res: express.Response) {
return sequelizeTypescript.transaction(async t => {
const videoChangeOwnership = res.locals.videoChangeOwnership
- const targetVideo = videoChangeOwnership.Video
const channel = res.locals.videoChannel
+ // We need more attributes for federation
+ const targetVideo = await VideoModel.loadAndPopulateAccountAndServerAndTags(videoChangeOwnership.Video.id)
+
const oldVideoChannel = await VideoChannelModel.loadByIdAndPopulateAccount(targetVideo.channelId)
- targetVideo.set('channelId', channel.id)
+ targetVideo.channelId = channel.id
+
const targetVideoUpdated = await targetVideo.save({ transaction: t })
targetVideoUpdated.VideoChannel = channel
await sendUpdateVideo(targetVideoUpdated, t, oldVideoChannel.Account.Actor)
}
- videoChangeOwnership.set('status', VideoChangeOwnershipStatus.ACCEPTED)
+ videoChangeOwnership.status = VideoChangeOwnershipStatus.ACCEPTED
await videoChangeOwnership.save({ transaction: t })
return res.sendStatus(204)
return sequelizeTypescript.transaction(async t => {
const videoChangeOwnership = res.locals.videoChangeOwnership
- videoChangeOwnership.set('status', VideoChangeOwnershipStatus.REFUSED)
+ videoChangeOwnership.status = VideoChangeOwnershipStatus.REFUSED
await videoChangeOwnership.save({ transaction: t })
return res.sendStatus(204)
import { AllowNull, BelongsTo, Column, CreatedAt, ForeignKey, Model, Scopes, Table, UpdatedAt } from 'sequelize-typescript'
import { AccountModel } from '../account/account'
-import { VideoModel } from './video'
+import { ScopeNames as VideoScopeNames, VideoModel } from './video'
import { VideoChangeOwnership, VideoChangeOwnershipStatus } from '../../../shared/models/videos'
import { getSort } from '../utils'
-import { VideoFileModel } from './video-file'
enum ScopeNames {
- FULL = 'FULL'
+ WITH_ACCOUNTS = 'WITH_ACCOUNTS',
+ WITH_VIDEO = 'WITH_VIDEO'
}
@Table({
tableName: 'videoChangeOwnership',
indexes: [
{
- fields: ['videoId']
+ fields: [ 'videoId' ]
},
{
- fields: ['initiatorAccountId']
+ fields: [ 'initiatorAccountId' ]
},
{
- fields: ['nextOwnerAccountId']
+ fields: [ 'nextOwnerAccountId' ]
}
]
})
@Scopes(() => ({
- [ScopeNames.FULL]: {
+ [ScopeNames.WITH_ACCOUNTS]: {
include: [
{
model: AccountModel,
model: AccountModel,
as: 'NextOwner',
required: true
- },
+ }
+ ]
+ },
+ [ScopeNames.WITH_VIDEO]: {
+ include: [
{
- model: VideoModel,
- required: true,
- include: [
- { model: VideoFileModel }
- ]
+ model: VideoModel.scope([ VideoScopeNames.WITH_THUMBNAILS, VideoScopeNames.WITH_FILES ]),
+ required: true
}
]
}
}
}
- return VideoChangeOwnershipModel.scope(ScopeNames.FULL).findAndCountAll(query)
- .then(({ rows, count }) => ({ total: count, data: rows }))
+ return Promise.all([
+ VideoChangeOwnershipModel.scope(ScopeNames.WITH_ACCOUNTS).count(query),
+ VideoChangeOwnershipModel.scope([ ScopeNames.WITH_ACCOUNTS, ScopeNames.WITH_VIDEO ]).findAll(query)
+ ]).then(([ count, rows ]) => ({ total: count, data: rows }))
}
static load (id: number) {
- return VideoChangeOwnershipModel.scope(ScopeNames.FULL).findByPk(id)
+ return VideoChangeOwnershipModel.scope([ ScopeNames.WITH_ACCOUNTS, ScopeNames.WITH_VIDEO ])
+ .findByPk(id)
}
toFormattedJSON (): VideoChangeOwnership {