Feat: Request to join workspace (#3871)
This commit is contained in:
@@ -6,6 +6,7 @@ import { getUserFactory } from '@/modules/core/repositories/users'
|
||||
import { renderEmail } from '@/modules/emails/services/emailRendering'
|
||||
import { sendEmail } from '@/modules/emails/services/sending'
|
||||
import { commandFactory } from '@/modules/shared/command'
|
||||
import { getEventBus } from '@/modules/shared/services/eventBus'
|
||||
import { getPaginatedItemsFactory } from '@/modules/shared/services/paginatedItems'
|
||||
import {
|
||||
ApproveWorkspaceJoinRequest,
|
||||
@@ -30,6 +31,8 @@ import {
|
||||
import { WorkspaceJoinRequestStatus } from '@/modules/workspacesCore/domain/types'
|
||||
import { WorkspaceJoinRequestGraphQLReturn } from '@/modules/workspacesCore/helpers/graphTypes'
|
||||
|
||||
const eventBus = getEventBus()
|
||||
|
||||
export default {
|
||||
Workspace: {
|
||||
adminWorkspacesJoinRequests: async (parent, args, ctx) => {
|
||||
@@ -78,7 +81,8 @@ export default {
|
||||
approve: async (_parent, args) => {
|
||||
const approveWorkspaceJoinRequest = commandFactory<ApproveWorkspaceJoinRequest>({
|
||||
db,
|
||||
operationFactory: ({ db }) => {
|
||||
eventBus,
|
||||
operationFactory: ({ db, emit }) => {
|
||||
const updateWorkspaceJoinRequestStatus =
|
||||
updateWorkspaceJoinRequestStatusFactory({
|
||||
db
|
||||
@@ -98,7 +102,8 @@ export default {
|
||||
getWorkspaceJoinRequest: getWorkspaceJoinRequestFactory({
|
||||
db
|
||||
}),
|
||||
upsertWorkspaceRole: upsertWorkspaceRoleFactory({ db })
|
||||
upsertWorkspaceRole: upsertWorkspaceRoleFactory({ db }),
|
||||
emit
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
@@ -21,6 +21,8 @@ import {
|
||||
import { Roles } from '@speckle/shared'
|
||||
import { FindEmailsByUserId } from '@/modules/core/domain/userEmails/operations'
|
||||
import { userEmailsCompliantWithWorkspaceDomains } from '@/modules/workspaces/domain/logic'
|
||||
import { EventBus } from '@/modules/shared/services/eventBus'
|
||||
import { WorkspaceEvents } from '@/modules/workspacesCore/domain/events'
|
||||
|
||||
export const dismissWorkspaceJoinRequestFactory =
|
||||
({
|
||||
@@ -104,7 +106,8 @@ export const approveWorkspaceJoinRequestFactory =
|
||||
getUserById,
|
||||
getWorkspace,
|
||||
getWorkspaceJoinRequest,
|
||||
upsertWorkspaceRole
|
||||
upsertWorkspaceRole,
|
||||
emit
|
||||
}: {
|
||||
updateWorkspaceJoinRequestStatus: UpdateWorkspaceJoinRequestStatus
|
||||
sendWorkspaceJoinRequestApprovedEmail: SendWorkspaceJoinRequestApprovedEmail
|
||||
@@ -112,6 +115,7 @@ export const approveWorkspaceJoinRequestFactory =
|
||||
getWorkspace: GetWorkspace
|
||||
getWorkspaceJoinRequest: GetWorkspaceJoinRequest
|
||||
upsertWorkspaceRole: UpsertWorkspaceRole
|
||||
emit: EventBus['emit']
|
||||
}) =>
|
||||
async ({ userId, workspaceId }: { userId: string; workspaceId: string }) => {
|
||||
const requester = await getUserById(userId)
|
||||
@@ -142,6 +146,8 @@ export const approveWorkspaceJoinRequestFactory =
|
||||
const role = Roles.Workspace.Member
|
||||
await upsertWorkspaceRole({ userId, workspaceId, role, createdAt: new Date() })
|
||||
|
||||
await emit({ eventName: WorkspaceEvents.Updated, payload: { workspace } })
|
||||
|
||||
await sendWorkspaceJoinRequestApprovedEmail({
|
||||
workspace,
|
||||
requester
|
||||
|
||||
@@ -245,7 +245,8 @@ const { FF_WORKSPACES_MODULE_ENABLED } = getFeatureFlags()
|
||||
getUserById: async () => null,
|
||||
getWorkspace: async () => null,
|
||||
getWorkspaceJoinRequest: async () => undefined,
|
||||
upsertWorkspaceRole: async () => Promise.resolve()
|
||||
upsertWorkspaceRole: async () => Promise.resolve(),
|
||||
emit: async () => Promise.resolve()
|
||||
})({ workspaceId: createRandomString(), userId: createRandomString() })
|
||||
)
|
||||
|
||||
@@ -261,7 +262,8 @@ const { FF_WORKSPACES_MODULE_ENABLED } = getFeatureFlags()
|
||||
getUserById: async () => user as unknown as UserWithOptionalRole,
|
||||
getWorkspace: async () => null,
|
||||
getWorkspaceJoinRequest: async () => undefined,
|
||||
upsertWorkspaceRole: async () => Promise.resolve()
|
||||
upsertWorkspaceRole: async () => Promise.resolve(),
|
||||
emit: async () => Promise.resolve()
|
||||
})({ workspaceId: createRandomString(), userId: createRandomString() })
|
||||
)
|
||||
|
||||
@@ -285,7 +287,8 @@ const { FF_WORKSPACES_MODULE_ENABLED } = getFeatureFlags()
|
||||
getUserById: async () => user as unknown as UserWithOptionalRole,
|
||||
getWorkspace: async () => workspace as unknown as Workspace,
|
||||
getWorkspaceJoinRequest: async () => undefined,
|
||||
upsertWorkspaceRole: async () => Promise.resolve()
|
||||
upsertWorkspaceRole: async () => Promise.resolve(),
|
||||
emit: async () => Promise.resolve()
|
||||
})({ workspaceId: createRandomString(), userId: createRandomString() })
|
||||
)
|
||||
|
||||
@@ -343,7 +346,8 @@ const { FF_WORKSPACES_MODULE_ENABLED } = getFeatureFlags()
|
||||
getUserById: async () => user as unknown as UserWithOptionalRole,
|
||||
getWorkspace: async () => workspace as unknown as Workspace,
|
||||
getWorkspaceJoinRequest: async () => request,
|
||||
upsertWorkspaceRole
|
||||
upsertWorkspaceRole,
|
||||
emit: async () => Promise.resolve()
|
||||
})({ workspaceId: workspace.id, userId: user.id })
|
||||
).to.equal(true)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user