else if (previousRate.type === VIDEO_RATE_TYPES.DISLIKE) dislikesToIncrement--
if (rateType === 'none') { // Destroy previous rate
- await previousRate.destroy()
+ await previousRate.destroy({ transaction: t })
} else { // Update previous rate
previousRate.type = rateType
- await previousRate.save()
+ await previousRate.save({ transaction: t })
}
} else if (rateType !== 'none') { // There was not a previous rate, insert a new one if there is a rate
const query = {
+import * as Bluebird from 'bluebird'
import { VideoChannelObject, VideoTorrentObject } from '../../../../shared'
import { ActivityUpdate } from '../../../../shared/models/activitypub/activity'
import { retryTransactionWrapper } from '../../../helpers/database-utils'
import { database as db } from '../../../initializers'
import { AccountInstance } from '../../../models/account/account-interface'
import { VideoInstance } from '../../../models/video/video-interface'
-import { videoActivityObjectToDBAttributes, videoFileActivityUrlToDBAttributes } from './misc'
-import Bluebird = require('bluebird')
import { getOrCreateAccountAndServer } from '../account'
+import { videoActivityObjectToDBAttributes, videoFileActivityUrlToDBAttributes } from './misc'
async function processUpdateActivity (activity: ActivityUpdate) {
const account = await getOrCreateAccountAndServer(activity.actor)
}
}
- const toAccountFollowers = await db.Account.listByFollowersUrls(followersUrls)
- const uris = await computeFollowerUris(toAccountFollowers, followersException)
+ const toAccountFollowers = await db.Account.listByFollowersUrls(followersUrls, t)
+ const uris = await computeFollowerUris(toAccountFollowers, followersException, t)
if (uris.length === 0) {
logger.info('0 followers for %s, no forwarding.', toAccountFollowers.map(a => a.id).join(', '))
t: Transaction,
followersException: AccountInstance[] = []
) {
- const uris = await computeFollowerUris(toAccountFollowers, followersException)
+ const uris = await computeFollowerUris(toAccountFollowers, followersException, t)
if (uris.length === 0) {
logger.info('0 followers for %s, no broadcasting.', toAccountFollowers.map(a => a.id).join(', '))
return undefined
}
}
-async function getAccountsInvolvedInVideo (video: VideoInstance) {
- const accountsToForwardView = await db.VideoShare.loadAccountsByShare(video.id)
+async function getAccountsInvolvedInVideo (video: VideoInstance, t: Transaction) {
+ const accountsToForwardView = await db.VideoShare.loadAccountsByShare(video.id, t)
accountsToForwardView.push(video.VideoChannel.Account)
return accountsToForwardView
}
-async function getAccountsInvolvedInVideoChannel (videoChannel: VideoChannelInstance) {
- const accountsToForwardView = await db.VideoChannelShare.loadAccountsByShare(videoChannel.id)
+async function getAccountsInvolvedInVideoChannel (videoChannel: VideoChannelInstance, t: Transaction) {
+ const accountsToForwardView = await db.VideoChannelShare.loadAccountsByShare(videoChannel.id, t)
accountsToForwardView.push(videoChannel.Account)
return accountsToForwardView
}
-async function getAudience (accountSender: AccountInstance, isPublic = true) {
- const followerInboxUrls = await accountSender.getFollowerSharedInboxUrls()
+async function getAudience (accountSender: AccountInstance, t: Transaction, isPublic = true) {
+ const followerInboxUrls = await accountSender.getFollowerSharedInboxUrls(t)
// Thanks Mastodon: https://github.com/tootsuite/mastodon/blob/master/app/lib/activitypub/tag_manager.rb#L47
let to = []
return { to, cc }
}
-async function computeFollowerUris (toAccountFollower: AccountInstance[], followersException: AccountInstance[]) {
+async function computeFollowerUris (toAccountFollower: AccountInstance[], followersException: AccountInstance[], t: Transaction) {
const toAccountFollowerIds = toAccountFollower.map(a => a.id)
- const result = await db.AccountFollow.listAcceptedFollowerSharedInboxUrls(toAccountFollowerIds)
+ const result = await db.AccountFollow.listAcceptedFollowerSharedInboxUrls(toAccountFollowerIds, t)
const followersSharedInboxException = followersException.map(f => f.sharedInboxUrl)
const uris = result.data.filter(sharedInbox => followersSharedInboxException.indexOf(sharedInbox) === -1)
const me = accountFollow.AccountFollowing
const url = getAccountFollowAcceptActivityPubUrl(accountFollow)
- const data = await acceptActivityData(url, me)
+ const data = acceptActivityData(url, me)
return unicastTo(data, me, follower.inboxUrl, t)
}
// ---------------------------------------------------------------------------
-async function acceptActivityData (url: string, byAccount: AccountInstance) {
+function acceptActivityData (url: string, byAccount: AccountInstance) {
const activity: ActivityAccept = {
type: 'Accept',
id: url,
const byAccount = video.VideoChannel.Account
const videoObject = video.toActivityPubObject()
- const data = await addActivityData(video.url, byAccount, video, video.VideoChannel.url, videoObject)
+ const data = await addActivityData(video.url, byAccount, video, video.VideoChannel.url, videoObject, t)
return broadcastToFollowers(data, byAccount, [ byAccount ], t)
}
-async function addActivityData (url: string, byAccount: AccountInstance, video: VideoInstance, target: string, object: any) {
+async function addActivityData (
+ url: string,
+ byAccount: AccountInstance,
+ video: VideoInstance,
+ target: string,
+ object: any,
+ t: Transaction
+) {
const videoPublic = video.privacy === VideoPrivacy.PUBLIC
- const { to, cc } = await getAudience(byAccount, videoPublic)
+ const { to, cc } = await getAudience(byAccount, t, videoPublic)
const activity: ActivityAdd = {
type: 'Add',
id: url,
const url = getAnnounceActivityPubUrl(video.url, byAccount)
const videoChannel = video.VideoChannel
- const announcedActivity = await addActivityData(url, videoChannel.Account, video, videoChannel.url, video.toActivityPubObject())
+ const announcedActivity = await addActivityData(url, videoChannel.Account, video, videoChannel.url, video.toActivityPubObject(), t)
- const accountsToForwardView = await getAccountsInvolvedInVideo(video)
+ const accountsToForwardView = await getAccountsInvolvedInVideo(video, t)
const audience = getObjectFollowersAudience(accountsToForwardView)
- const data = await announceActivityData(url, byAccount, announcedActivity, audience)
+ const data = await announceActivityData(url, byAccount, announcedActivity, t, audience)
return data
}
const url = getAnnounceActivityPubUrl(video.url, byAccount)
const videoChannel = video.VideoChannel
- const announcedActivity = await addActivityData(url, videoChannel.Account, video, videoChannel.url, video.toActivityPubObject())
+ const announcedActivity = await addActivityData(url, videoChannel.Account, video, videoChannel.url, video.toActivityPubObject(), t)
- const accountsInvolvedInVideo = await getAccountsInvolvedInVideo(video)
+ const accountsInvolvedInVideo = await getAccountsInvolvedInVideo(video, t)
const audience = getOriginVideoAudience(video, accountsInvolvedInVideo)
- const data = await createActivityData(url, byAccount, announcedActivity, audience)
+ const data = await createActivityData(url, byAccount, announcedActivity, t, audience)
return unicastTo(data, byAccount, videoChannel.Account.sharedInboxUrl, t)
}
async function buildVideoChannelAnnounceToFollowers (byAccount: AccountInstance, videoChannel: VideoChannelInstance, t: Transaction) {
const url = getAnnounceActivityPubUrl(videoChannel.url, byAccount)
- const announcedActivity = await createActivityData(url, videoChannel.Account, videoChannel.toActivityPubObject())
+ const announcedActivity = await createActivityData(url, videoChannel.Account, videoChannel.toActivityPubObject(), t)
- const accountsToForwardView = await getAccountsInvolvedInVideoChannel(videoChannel)
+ const accountsToForwardView = await getAccountsInvolvedInVideoChannel(videoChannel, t)
const audience = getObjectFollowersAudience(accountsToForwardView)
- const data = await announceActivityData(url, byAccount, announcedActivity, audience)
+ const data = await announceActivityData(url, byAccount, announcedActivity, t, audience)
return data
}
async function sendVideoChannelAnnounceToOrigin (byAccount: AccountInstance, videoChannel: VideoChannelInstance, t: Transaction) {
const url = getAnnounceActivityPubUrl(videoChannel.url, byAccount)
- const announcedActivity = await createActivityData(url, videoChannel.Account, videoChannel.toActivityPubObject())
+ const announcedActivity = await createActivityData(url, videoChannel.Account, videoChannel.toActivityPubObject(), t)
- const accountsInvolvedInVideo = await getAccountsInvolvedInVideoChannel(videoChannel)
+ const accountsInvolvedInVideo = await getAccountsInvolvedInVideoChannel(videoChannel, t)
const audience = getOriginVideoChannelAudience(videoChannel, accountsInvolvedInVideo)
- const data = await createActivityData(url, byAccount, announcedActivity, audience)
+ const data = await createActivityData(url, byAccount, announcedActivity, t, audience)
return unicastTo(data, byAccount, videoChannel.Account.sharedInboxUrl, t)
}
url: string,
byAccount: AccountInstance,
object: ActivityCreate | ActivityAdd,
+ t: Transaction,
audience?: ActivityAudience
) {
if (!audience) {
- audience = await getAudience(byAccount)
+ audience = await getAudience(byAccount, t)
}
const activity: ActivityAnnounce = {
broadcastToFollowers,
getAccountsInvolvedInVideo,
getAudience,
- getOriginVideoAudience,
getObjectFollowersAudience,
+ getOriginVideoAudience,
unicastTo
} from './misc'
const byAccount = videoChannel.Account
const videoChannelObject = videoChannel.toActivityPubObject()
- const data = await createActivityData(videoChannel.url, byAccount, videoChannelObject)
+ const data = await createActivityData(videoChannel.url, byAccount, videoChannelObject, t)
return broadcastToFollowers(data, byAccount, [ byAccount ], t)
}
const url = getVideoAbuseActivityPubUrl(videoAbuse)
const audience = { to: [ video.VideoChannel.Account.url ], cc: [] }
- const data = await createActivityData(url, byAccount, videoAbuse.toActivityPubObject(), audience)
+ const data = await createActivityData(url, byAccount, videoAbuse.toActivityPubObject(), t, audience)
return unicastTo(data, byAccount, video.VideoChannel.Account.sharedInboxUrl, t)
}
const url = getVideoViewActivityPubUrl(byAccount, video)
const viewActivity = createViewActivityData(byAccount, video)
- const accountsInvolvedInVideo = await getAccountsInvolvedInVideo(video)
+ const accountsInvolvedInVideo = await getAccountsInvolvedInVideo(video, t)
const audience = getOriginVideoAudience(video, accountsInvolvedInVideo)
- const data = await createActivityData(url, byAccount, viewActivity, audience)
+ const data = await createActivityData(url, byAccount, viewActivity, t, audience)
return unicastTo(data, byAccount, video.VideoChannel.Account.sharedInboxUrl, t)
}
const url = getVideoViewActivityPubUrl(byAccount, video)
const viewActivity = createViewActivityData(byAccount, video)
- const accountsToForwardView = await getAccountsInvolvedInVideo(video)
+ const accountsToForwardView = await getAccountsInvolvedInVideo(video, t)
const audience = getObjectFollowersAudience(accountsToForwardView)
- const data = await createActivityData(url, byAccount, viewActivity, audience)
+ const data = await createActivityData(url, byAccount, viewActivity, t, audience)
// Use the server account to send the view, because it could be an unregistered account
const serverAccount = await getServerAccount()
const url = getVideoDislikeActivityPubUrl(byAccount, video)
const dislikeActivity = createDislikeActivityData(byAccount, video)
- const accountsInvolvedInVideo = await getAccountsInvolvedInVideo(video)
+ const accountsInvolvedInVideo = await getAccountsInvolvedInVideo(video, t)
const audience = getOriginVideoAudience(video, accountsInvolvedInVideo)
- const data = await createActivityData(url, byAccount, dislikeActivity, audience)
+ const data = await createActivityData(url, byAccount, dislikeActivity, t, audience)
return unicastTo(data, byAccount, video.VideoChannel.Account.sharedInboxUrl, t)
}
const url = getVideoDislikeActivityPubUrl(byAccount, video)
const dislikeActivity = createDislikeActivityData(byAccount, video)
- const accountsToForwardView = await getAccountsInvolvedInVideo(video)
+ const accountsToForwardView = await getAccountsInvolvedInVideo(video, t)
const audience = getObjectFollowersAudience(accountsToForwardView)
- const data = await createActivityData(url, byAccount, dislikeActivity, audience)
+ const data = await createActivityData(url, byAccount, dislikeActivity, t, audience)
const followersException = [ byAccount ]
return broadcastToFollowers(data, byAccount, accountsToForwardView, t, followersException)
}
-async function createActivityData (url: string, byAccount: AccountInstance, object: any, audience?: ActivityAudience) {
+async function createActivityData (url: string, byAccount: AccountInstance, object: any, t: Transaction, audience?: ActivityAudience) {
if (!audience) {
- audience = await getAudience(byAccount)
+ audience = await getAudience(byAccount, t)
}
const activity: ActivityCreate = {
async function sendDeleteVideoChannel (videoChannel: VideoChannelInstance, t: Transaction) {
const byAccount = videoChannel.Account
- const data = await deleteActivityData(videoChannel.url, byAccount)
+ const data = deleteActivityData(videoChannel.url, byAccount)
- const accountsInvolved = await db.VideoChannelShare.loadAccountsByShare(videoChannel.id)
+ const accountsInvolved = await db.VideoChannelShare.loadAccountsByShare(videoChannel.id, t)
accountsInvolved.push(byAccount)
return broadcastToFollowers(data, byAccount, accountsInvolved, t)
async function sendDeleteVideo (video: VideoInstance, t: Transaction) {
const byAccount = video.VideoChannel.Account
- const data = await deleteActivityData(video.url, byAccount)
+ const data = deleteActivityData(video.url, byAccount)
- const accountsInvolved = await db.VideoShare.loadAccountsByShare(video.id)
+ const accountsInvolved = await db.VideoShare.loadAccountsByShare(video.id, t)
accountsInvolved.push(byAccount)
return broadcastToFollowers(data, byAccount, accountsInvolved, t)
// ---------------------------------------------------------------------------
-async function deleteActivityData (url: string, byAccount: AccountInstance) {
+function deleteActivityData (url: string, byAccount: AccountInstance) {
const activity: ActivityDelete = {
type: 'Delete',
id: url,
import { getAccountFollowActivityPubUrl } from '../url'
import { unicastTo } from './misc'
-async function sendFollow (accountFollow: AccountFollowInstance, t: Transaction) {
+function sendFollow (accountFollow: AccountFollowInstance, t: Transaction) {
const me = accountFollow.AccountFollower
const following = accountFollow.AccountFollowing
const url = getAccountFollowActivityPubUrl(accountFollow)
- const data = await followActivityData(url, me, following)
+ const data = followActivityData(url, me, following)
return unicastTo(data, me, following.inboxUrl, t)
}
-async function followActivityData (url: string, byAccount: AccountInstance, targetAccount: AccountInstance) {
+function followActivityData (url: string, byAccount: AccountInstance, targetAccount: AccountInstance) {
const activity: ActivityFollow = {
type: 'Follow',
id: url,
import { Transaction } from 'sequelize'
-import { ActivityLike } from '../../../../shared/models/activitypub/activity'
+import { ActivityAudience, ActivityLike } from '../../../../shared/models/activitypub/activity'
import { AccountInstance, VideoInstance } from '../../../models'
import { getVideoLikeActivityPubUrl } from '../url'
import {
async function sendLikeToOrigin (byAccount: AccountInstance, video: VideoInstance, t: Transaction) {
const url = getVideoLikeActivityPubUrl(byAccount, video)
- const accountsInvolvedInVideo = await getAccountsInvolvedInVideo(video)
+ const accountsInvolvedInVideo = await getAccountsInvolvedInVideo(video, t)
const audience = getOriginVideoAudience(video, accountsInvolvedInVideo)
- const data = await likeActivityData(url, byAccount, video, audience)
+ const data = await likeActivityData(url, byAccount, video, t, audience)
return unicastTo(data, byAccount, video.VideoChannel.Account.sharedInboxUrl, t)
}
async function sendLikeToVideoFollowers (byAccount: AccountInstance, video: VideoInstance, t: Transaction) {
const url = getVideoLikeActivityPubUrl(byAccount, video)
- const accountsInvolvedInVideo = await getAccountsInvolvedInVideo(video)
+ const accountsInvolvedInVideo = await getAccountsInvolvedInVideo(video, t)
const audience = getObjectFollowersAudience(accountsInvolvedInVideo)
- const data = await likeActivityData(url, byAccount, video, audience)
-
- const toAccountsFollowers = await getAccountsInvolvedInVideo(video)
+ const data = await likeActivityData(url, byAccount, video, t, audience)
const followersException = [ byAccount ]
- return broadcastToFollowers(data, byAccount, toAccountsFollowers, t, followersException)
+ return broadcastToFollowers(data, byAccount, accountsInvolvedInVideo, t, followersException)
}
-async function likeActivityData (url: string, byAccount: AccountInstance, video: VideoInstance, audience?: { to: string[], cc: string[] }) {
+async function likeActivityData (
+ url: string,
+ byAccount: AccountInstance,
+ video: VideoInstance,
+ t: Transaction,
+ audience?: ActivityAudience
+) {
if (!audience) {
- audience = await getAudience(byAccount)
+ audience = await getAudience(byAccount, t)
}
const activity: ActivityLike = {
const followUrl = getAccountFollowActivityPubUrl(accountFollow)
const undoUrl = getUndoActivityPubUrl(followUrl)
- const object = await followActivityData(followUrl, me, following)
- const data = await undoActivityData(undoUrl, me, object)
+ const object = followActivityData(followUrl, me, following)
+ const data = await undoActivityData(undoUrl, me, object, t)
return unicastTo(data, me, following.inboxUrl, t)
}
const likeUrl = getVideoLikeActivityPubUrl(byAccount, video)
const undoUrl = getUndoActivityPubUrl(likeUrl)
- const accountsInvolvedInVideo = await getAccountsInvolvedInVideo(video)
+ const accountsInvolvedInVideo = await getAccountsInvolvedInVideo(video, t)
const audience = getOriginVideoAudience(video, accountsInvolvedInVideo)
- const object = await likeActivityData(likeUrl, byAccount, video)
- const data = await undoActivityData(undoUrl, byAccount, object, audience)
+ const object = await likeActivityData(likeUrl, byAccount, video, t)
+ const data = await undoActivityData(undoUrl, byAccount, object, t, audience)
return unicastTo(data, byAccount, video.VideoChannel.Account.sharedInboxUrl, t)
}
const likeUrl = getVideoLikeActivityPubUrl(byAccount, video)
const undoUrl = getUndoActivityPubUrl(likeUrl)
- const toAccountsFollowers = await getAccountsInvolvedInVideo(video)
+ const toAccountsFollowers = await getAccountsInvolvedInVideo(video, t)
const audience = getObjectFollowersAudience(toAccountsFollowers)
- const object = await likeActivityData(likeUrl, byAccount, video)
- const data = await undoActivityData(undoUrl, byAccount, object, audience)
+ const object = await likeActivityData(likeUrl, byAccount, video, t)
+ const data = await undoActivityData(undoUrl, byAccount, object, t, audience)
const followersException = [ byAccount ]
return broadcastToFollowers(data, byAccount, toAccountsFollowers, t, followersException)
const dislikeUrl = getVideoDislikeActivityPubUrl(byAccount, video)
const undoUrl = getUndoActivityPubUrl(dislikeUrl)
- const accountsInvolvedInVideo = await getAccountsInvolvedInVideo(video)
+ const accountsInvolvedInVideo = await getAccountsInvolvedInVideo(video, t)
const audience = getOriginVideoAudience(video, accountsInvolvedInVideo)
const dislikeActivity = createDislikeActivityData(byAccount, video)
- const object = await createActivityData(undoUrl, byAccount, dislikeActivity, audience)
+ const object = await createActivityData(undoUrl, byAccount, dislikeActivity, t, audience)
- const data = await undoActivityData(undoUrl, byAccount, object)
+ const data = await undoActivityData(undoUrl, byAccount, object, t)
return unicastTo(data, byAccount, video.VideoChannel.Account.sharedInboxUrl, t)
}
const undoUrl = getUndoActivityPubUrl(dislikeUrl)
const dislikeActivity = createDislikeActivityData(byAccount, video)
- const object = await createActivityData(undoUrl, byAccount, dislikeActivity)
+ const object = await createActivityData(undoUrl, byAccount, dislikeActivity, t)
- const data = await undoActivityData(undoUrl, byAccount, object)
+ const data = await undoActivityData(undoUrl, byAccount, object, t)
- const toAccountsFollowers = await getAccountsInvolvedInVideo(video)
+ const toAccountsFollowers = await getAccountsInvolvedInVideo(video, t)
const followersException = [ byAccount ]
return broadcastToFollowers(data, byAccount, toAccountsFollowers, t, followersException)
url: string,
byAccount: AccountInstance,
object: ActivityFollow | ActivityLike | ActivityCreate,
+ t: Transaction,
audience?: ActivityAudience
) {
if (!audience) {
- audience = await getAudience(byAccount)
+ audience = await getAudience(byAccount, t)
}
const activity: ActivityUndo = {
const url = getUpdateActivityPubUrl(videoChannel.url, videoChannel.updatedAt.toISOString())
const videoChannelObject = videoChannel.toActivityPubObject()
- const data = await updateActivityData(url, byAccount, videoChannelObject)
+ const data = await updateActivityData(url, byAccount, videoChannelObject, t)
- const accountsInvolved = await db.VideoChannelShare.loadAccountsByShare(videoChannel.id)
+ const accountsInvolved = await db.VideoChannelShare.loadAccountsByShare(videoChannel.id, t)
accountsInvolved.push(byAccount)
return broadcastToFollowers(data, byAccount, accountsInvolved, t)
const url = getUpdateActivityPubUrl(video.url, video.updatedAt.toISOString())
const videoObject = video.toActivityPubObject()
- const data = await updateActivityData(url, byAccount, videoObject)
+ const data = await updateActivityData(url, byAccount, videoObject, t)
- const accountsInvolved = await db.VideoShare.loadAccountsByShare(video.id)
+ const accountsInvolved = await db.VideoShare.loadAccountsByShare(video.id, t)
accountsInvolved.push(byAccount)
return broadcastToFollowers(data, byAccount, accountsInvolved, t)
// ---------------------------------------------------------------------------
-async function updateActivityData (url: string, byAccount: AccountInstance, object: any) {
- const { to, cc } = await getAudience(byAccount)
+async function updateActivityData (url: string, byAccount: AccountInstance, object: any, t: Transaction) {
+ const { to, cc } = await getAudience(byAccount, t)
const activity: ActivityUpdate = {
type: 'Update',
id: url,
export type ListFollowingForApi = (id: number, start: number, count: number, sort: string) => Bluebird< ResultList<AccountFollowInstance>>
export type ListFollowersForApi = (id: number, start: number, count: number, sort: string) => Bluebird< ResultList<AccountFollowInstance>>
- export type ListAcceptedFollowerUrlsForApi = (accountId: number[], start?: number, count?: number) => Promise< ResultList<string> >
- export type ListAcceptedFollowingUrlsForApi = (accountId: number[], start?: number, count?: number) => Promise< ResultList<string> >
- export type ListAcceptedFollowerSharedInboxUrls = (accountId: number[]) => Promise< ResultList<string> >
+ export type ListAcceptedFollowerUrlsForApi = (
+ accountId: number[],
+ t: Sequelize.Transaction,
+ start?: number,
+ count?: number
+ ) => Promise< ResultList<string> >
+ export type ListAcceptedFollowingUrlsForApi = (
+ accountId: number[],
+ t: Sequelize.Transaction,
+ start?: number,
+ count?: number
+ ) => Promise< ResultList<string> >
+ export type ListAcceptedFollowerSharedInboxUrls = (accountId: number[], t: Sequelize.Transaction) => Promise< ResultList<string> >
export type ToFormattedJSON = (this: AccountFollowInstance) => AccountFollow
}
})
}
-listAcceptedFollowerUrlsForApi = function (accountIds: number[], start?: number, count?: number) {
- return createListAcceptedFollowForApiQuery('followers', accountIds, start, count)
+listAcceptedFollowerUrlsForApi = function (accountIds: number[], t: Sequelize.Transaction, start?: number, count?: number) {
+ return createListAcceptedFollowForApiQuery('followers', accountIds, t, start, count)
}
-listAcceptedFollowerSharedInboxUrls = function (accountIds: number[]) {
- return createListAcceptedFollowForApiQuery('followers', accountIds, undefined, undefined, 'sharedInboxUrl')
+listAcceptedFollowerSharedInboxUrls = function (accountIds: number[], t: Sequelize.Transaction) {
+ return createListAcceptedFollowForApiQuery('followers', accountIds, t, undefined, undefined, 'sharedInboxUrl')
}
-listAcceptedFollowingUrlsForApi = function (accountIds: number[], start?: number, count?: number) {
- return createListAcceptedFollowForApiQuery('following', accountIds, start, count)
+listAcceptedFollowingUrlsForApi = function (accountIds: number[], t: Sequelize.Transaction, start?: number, count?: number) {
+ return createListAcceptedFollowForApiQuery('following', accountIds, t, start, count)
}
// ------------------------------ UTILS ------------------------------
async function createListAcceptedFollowForApiQuery (
type: 'followers' | 'following',
accountIds: number[],
+ t: Sequelize.Transaction,
start?: number,
count?: number,
columnUrl = 'url'
const options = {
bind: { accountIds },
- type: Sequelize.QueryTypes.SELECT
+ type: Sequelize.QueryTypes.SELECT,
+ transaction: t
}
tasks.push(AccountFollow['sequelize'].query(query, options))
}
export type LoadByUrl = (url: string, transaction?: Sequelize.Transaction) => Bluebird<AccountInstance>
export type LoadLocalByName = (name: string) => Bluebird<AccountInstance>
export type LoadByNameAndHost = (name: string, host: string) => Bluebird<AccountInstance>
- export type ListByFollowersUrls = (followerUrls: string[], transaction?: Sequelize.Transaction) => Bluebird<AccountInstance[]>
+ export type ListByFollowersUrls = (followerUrls: string[], transaction: Sequelize.Transaction) => Bluebird<AccountInstance[]>
export type ToActivityPubObject = (this: AccountInstance) => ActivityPubActor
export type ToFormattedJSON = (this: AccountInstance) => FormattedAccount
export type IsOwned = (this: AccountInstance) => boolean
- export type GetFollowerSharedInboxUrls = (this: AccountInstance) => Bluebird<string[]>
+ export type GetFollowerSharedInboxUrls = (this: AccountInstance, t: Sequelize.Transaction) => Bluebird<string[]>
export type GetFollowingUrl = (this: AccountInstance) => string
export type GetFollowersUrl = (this: AccountInstance) => string
export type GetPublicKeyUrl = (this: AccountInstance) => string
{
indexes: [
{
- fields: [ 'videoId', 'accountId', 'type' ],
+ fields: [ 'videoId', 'accountId' ],
unique: true
}
]
import { isActivityPubUrlValid } from '../../helpers/custom-validators/activitypub/misc'
import { CONFIG, CONSTRAINTS_FIELDS } from '../../initializers/constants'
import { sendDeleteAccount } from '../../lib/activitypub/send/send-delete'
-
import { addMethodsToModel } from '../utils'
import { AccountAttributes, AccountInstance, AccountMethods } from './account-interface'
return this.serverId === null
}
-getFollowerSharedInboxUrls = function (this: AccountInstance) {
+getFollowerSharedInboxUrls = function (this: AccountInstance, t: Sequelize.Transaction) {
const query: Sequelize.FindOptions<AccountAttributes> = {
attributes: [ 'sharedInboxUrl' ],
include: [
targetAccountId: this.id
}
}
- ]
+ ],
+ transaction: t
}
return Account.findAll(query)
import * as Bluebird from 'bluebird'
import * as Sequelize from 'sequelize'
+import { Transaction } from 'sequelize'
import { AccountInstance } from '../account/account-interface'
import { VideoChannelInstance } from './video-channel-interface'
export namespace VideoChannelShareMethods {
- export type LoadAccountsByShare = (videoChannelId: number) => Bluebird<AccountInstance[]>
- export type Load = (accountId: number, videoId: number) => Bluebird<VideoChannelShareInstance>
+ export type LoadAccountsByShare = (videoChannelId: number, t: Transaction) => Bluebird<AccountInstance[]>
+ export type Load = (accountId: number, videoId: number, t: Transaction) => Bluebird<VideoChannelShareInstance>
}
export interface VideoChannelShareClass {
})
}
-load = function (accountId: number, videoChannelId: number) {
+load = function (accountId: number, videoChannelId: number, t: Sequelize.Transaction) {
return VideoChannelShare.findOne({
where: {
accountId,
include: [
VideoChannelShare['sequelize'].models.Account,
VideoChannelShare['sequelize'].models.VideoChannel
- ]
+ ],
+ transaction: t
})
}
-loadAccountsByShare = function (videoChannelId: number) {
+loadAccountsByShare = function (videoChannelId: number, t: Sequelize.Transaction) {
const query = {
where: {
videoChannelId
model: VideoChannelShare['sequelize'].models.Account,
required: true
}
- ]
+ ],
+ transaction: t
}
return VideoChannelShare.findAll(query)
import * as Bluebird from 'bluebird'
import * as Sequelize from 'sequelize'
+import { Transaction } from 'sequelize'
import { AccountInstance } from '../account/account-interface'
import { VideoInstance } from './video-interface'
export namespace VideoShareMethods {
- export type LoadAccountsByShare = (videoId: number) => Bluebird<AccountInstance[]>
- export type Load = (accountId: number, videoId: number) => Bluebird<VideoShareInstance>
+ export type LoadAccountsByShare = (videoId: number, t: Transaction) => Bluebird<AccountInstance[]>
+ export type Load = (accountId: number, videoId: number, t: Transaction) => Bluebird<VideoShareInstance>
}
export interface VideoShareClass {
})
}
-load = function (accountId: number, videoId: number) {
+load = function (accountId: number, videoId: number, t: Sequelize.Transaction) {
return VideoShare.findOne({
where: {
accountId,
},
include: [
VideoShare['sequelize'].models.Account
- ]
+ ],
+ transaction: t
})
}
-loadAccountsByShare = function (videoId: number) {
+loadAccountsByShare = function (videoId: number, t: Sequelize.Transaction) {
const query = {
where: {
videoId
model: VideoShare['sequelize'].models.Account,
required: true
}
- ]
+ ],
+ transaction: t
}
return VideoShare.findAll(query)