Files
speckle-server/packages/server/modules/workspaces/services/retrieval.ts
T
Chuck Driesler 0f5c22329b Chuck/web 3465 auto join discoverable workspace setting (#4791)
* feat(workspaces): enable toggle for auto-join discoverable workspaces

* fix(workspaces): include auto-join flag on LimitedWorkspace

* chore(workspaces): gqlgen
2025-05-22 10:11:05 +01:00

64 lines
1.7 KiB
TypeScript

import { FindEmailsByUserId } from '@/modules/core/domain/userEmails/operations'
import {
GetUserDiscoverableWorkspaces,
GetWorkspaceRolesForUser,
GetWorkspaces
} from '@/modules/workspaces/domain/operations'
import { LimitedWorkspace, Workspace } from '@/modules/workspacesCore/domain/types'
type GetDiscoverableWorkspaceForUserArgs = {
userId: string
}
export const getDiscoverableWorkspacesForUserFactory =
({
findEmailsByUserId,
getDiscoverableWorkspaces
}: {
findEmailsByUserId: FindEmailsByUserId
getDiscoverableWorkspaces: GetUserDiscoverableWorkspaces
}) =>
async ({
userId
}: GetDiscoverableWorkspaceForUserArgs): Promise<LimitedWorkspace[]> => {
const userEmails = await findEmailsByUserId({ userId })
const userVerifiedDomains = userEmails
.filter((email) => email.verified)
.map((email) => email.email.split('@')[1])
const workspaces = await getDiscoverableWorkspaces({
domains: userVerifiedDomains,
userId
})
return workspaces
}
type GetWorkspacesForUserArgs = {
userId: string
completed?: boolean
search?: string
}
export const getWorkspacesForUserFactory =
({
getWorkspaces,
getWorkspaceRolesForUser
}: {
getWorkspaces: GetWorkspaces
getWorkspaceRolesForUser: GetWorkspaceRolesForUser
}) =>
async ({
userId,
completed,
search
}: GetWorkspacesForUserArgs): Promise<Workspace[]> => {
const workspaceRoles = await getWorkspaceRolesForUser({ userId })
const workspaceIds = workspaceRoles.map((workspace) => {
return workspace.workspaceId
})
const workspaces = await getWorkspaces({ workspaceIds, completed, search })
return workspaces
}