Files
speckle-server/packages/server/modules/activitystream/services/streamActivityService.js
T
Kristaps Fabians Geikins da9224a069 feat: server & stream invites rework
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>
2022-07-19 13:01:19 +03:00

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
}