da9224a069
feat: server & stream invites rework Co-authored-by: Dimitrie Stefanescu <didimitrie@gmail.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
147 lines
3.6 KiB
JavaScript
147 lines
3.6 KiB
JavaScript
const {
|
|
saveActivity,
|
|
ResourceTypes,
|
|
ActionTypes
|
|
} = require('@/modules/activitystream/services')
|
|
const { pubsub, StreamPubsubEvents } = require('@/modules/shared')
|
|
|
|
/**
|
|
* Save "stream permissions granted to user" activity item
|
|
*/
|
|
async function addStreamPermissionsAddedActivity({
|
|
streamId,
|
|
activityUserId,
|
|
targetUserId,
|
|
role
|
|
}) {
|
|
await Promise.all([
|
|
saveActivity({
|
|
streamId,
|
|
resourceType: ResourceTypes.Stream,
|
|
resourceId: streamId,
|
|
actionType: ActionTypes.Stream.PermissionsAdd,
|
|
userId: activityUserId,
|
|
info: { targetUser: targetUserId, role },
|
|
message: `Permission granted to user ${targetUserId} (${role})`
|
|
}),
|
|
pubsub.publish(StreamPubsubEvents.UserStreamAdded, {
|
|
userStreamAdded: {
|
|
id: streamId,
|
|
sharedBy: activityUserId
|
|
},
|
|
ownerId: targetUserId
|
|
})
|
|
])
|
|
}
|
|
|
|
/**
|
|
* Save "user accepted stream invite" activity item
|
|
*/
|
|
async function addStreamInviteAcceptedActivity({
|
|
streamId,
|
|
inviteTargetId,
|
|
inviterId,
|
|
role
|
|
}) {
|
|
await Promise.all([
|
|
saveActivity({
|
|
streamId,
|
|
resourceType: ResourceTypes.Stream,
|
|
resourceId: streamId,
|
|
actionType: ActionTypes.Stream.InviteAccepted,
|
|
userId: inviteTargetId,
|
|
info: { inviterUser: inviterId, role },
|
|
message: `User ${inviteTargetId} has accepted an invitation to become a ${role}`
|
|
}),
|
|
pubsub.publish(StreamPubsubEvents.UserStreamAdded, {
|
|
userStreamAdded: {
|
|
id: streamId,
|
|
sharedBy: inviterId
|
|
},
|
|
ownerId: inviteTargetId
|
|
})
|
|
])
|
|
}
|
|
|
|
/**
|
|
* Save "stream permissions revoked for user" activity item
|
|
*/
|
|
async function addStreamPermissionsRevokedActivity({
|
|
streamId,
|
|
activityUserId,
|
|
removedUserId
|
|
}) {
|
|
const isVoluntaryLeave = activityUserId === removedUserId
|
|
|
|
await Promise.all([
|
|
saveActivity({
|
|
streamId,
|
|
resourceType: ResourceTypes.Stream,
|
|
resourceId: streamId,
|
|
actionType: ActionTypes.Stream.PermissionsRemove,
|
|
userId: activityUserId,
|
|
info: { targetUser: removedUserId },
|
|
message: isVoluntaryLeave
|
|
? `User ${removedUserId} left the stream`
|
|
: `Permission revoked for user ${removedUserId}`
|
|
}),
|
|
|
|
pubsub.publish(StreamPubsubEvents.UserStreamRemoved, {
|
|
userStreamRemoved: {
|
|
id: streamId,
|
|
revokedBy: activityUserId
|
|
},
|
|
ownerId: removedUserId
|
|
})
|
|
])
|
|
}
|
|
|
|
/**
|
|
* Save "user invited another user to stream" activity item
|
|
*/
|
|
async function addStreamInviteSentOutActivity({
|
|
streamId,
|
|
inviteTargetId,
|
|
inviterId,
|
|
inviteTargetEmail
|
|
}) {
|
|
const targetDisplay = inviteTargetId || inviteTargetEmail
|
|
|
|
await saveActivity({
|
|
streamId,
|
|
resourceType: ResourceTypes.Stream,
|
|
resourceId: streamId,
|
|
actionType: ActionTypes.Stream.InviteSent,
|
|
userId: inviterId,
|
|
message: `User ${inviterId} has invited ${targetDisplay} to stream ${streamId}`,
|
|
info: { targetId: inviteTargetId || null, targetEmail: inviteTargetEmail || null }
|
|
})
|
|
}
|
|
|
|
/**
|
|
* Save "user declined an invite" activity item
|
|
*/
|
|
async function addStreamInviteDeclinedActivity({
|
|
streamId,
|
|
inviteTargetId,
|
|
inviterId
|
|
}) {
|
|
await saveActivity({
|
|
streamId,
|
|
resourceType: ResourceTypes.Stream,
|
|
resourceId: streamId,
|
|
actionType: ActionTypes.Stream.InviteDeclined,
|
|
userId: inviteTargetId,
|
|
message: `User ${inviteTargetId} declined to join the stream ${streamId}`,
|
|
info: { targetId: inviteTargetId, inviterId }
|
|
})
|
|
}
|
|
|
|
module.exports = {
|
|
addStreamPermissionsAddedActivity,
|
|
addStreamPermissionsRevokedActivity,
|
|
addStreamInviteAcceptedActivity,
|
|
addStreamInviteSentOutActivity,
|
|
addStreamInviteDeclinedActivity
|
|
}
|