feat(workspaces): user workspace join requests (#4023)

* feat(workspaces): user workspace join requests

* chore(workspaces): return limited workspace

* chore(workspaces): fix tests

* chore(workspaces): add index for userId

* chore(shared): fix totalcount on getpaginateditems

* chore(workspaces): add workspace core resolvers to throw specific error
This commit is contained in:
Alessandro Magionami
2025-02-25 12:19:21 +01:00
committed by GitHub
parent eb050bb649
commit fd68c6ef2a
14 changed files with 581 additions and 113 deletions
@@ -0,0 +1,47 @@
import { WorkspacesModuleDisabledError } from '@/modules/core/errors/workspaces'
import { Resolvers } from '@/modules/core/graph/generated/graphql'
import { getFeatureFlags } from '@/modules/shared/helpers/envHelper'
const { FF_WORKSPACES_MODULE_ENABLED } = getFeatureFlags()
export default !FF_WORKSPACES_MODULE_ENABLED
? ({
Workspace: {
adminWorkspacesJoinRequests: async () => {
throw new WorkspacesModuleDisabledError()
}
},
WorkspaceJoinRequest: {
id: async () => {
throw new WorkspacesModuleDisabledError()
},
user: async () => {
throw new WorkspacesModuleDisabledError()
},
workspace: async () => {
throw new WorkspacesModuleDisabledError()
}
},
LimitedWorkspaceJoinRequest: {
id: async () => {
throw new WorkspacesModuleDisabledError()
},
user: async () => {
throw new WorkspacesModuleDisabledError()
},
workspace: async () => {
throw new WorkspacesModuleDisabledError()
}
},
User: {
workspaceJoinRequests: async () => {
throw new WorkspacesModuleDisabledError()
}
},
Mutation: {
workspaceJoinRequestMutations: () => {
throw new WorkspacesModuleDisabledError()
}
}
} as Resolvers)
: {}
@@ -7,6 +7,7 @@ import { WorkspaceRoles } from '@speckle/shared'
export type WorkspaceGraphQLReturn = Workspace
export type WorkspaceJoinRequestGraphQLReturn = WorkspaceJoinRequest
export type LimitedWorkspaceJoinRequestGraphQLReturn = WorkspaceJoinRequest
export type WorkspaceBillingGraphQLReturn = { parent: Workspace }
export type WorkspaceSsoGraphQLReturn = WorkspaceSsoProviderRecord
export type WorkspaceMutationsGraphQLReturn = MutationsObjectGraphQLReturn
@@ -0,0 +1,15 @@
import { Knex } from 'knex'
const WORKSPACE_JOIN_REQUESTS_TABLE = 'workspace_join_requests'
export async function up(knex: Knex): Promise<void> {
await knex.schema.alterTable(WORKSPACE_JOIN_REQUESTS_TABLE, (table) => {
table.index('userId')
})
}
export async function down(knex: Knex): Promise<void> {
await knex.schema.alterTable(WORKSPACE_JOIN_REQUESTS_TABLE, (table) => {
table.dropIndex('userId')
})
}