4a2d85d68c
* feat(shared): rename user workspaces loader * feat(gatekeeper): intoduce the enterprise plan * chore(server): remove more "magic strings" * refactor(shared): extract user is workspace admin to an auth fragment * feat(shared): add can createWorkspacePolicy * feat(workspaces): WIP block workspace creation * feat(server): add can create workspace checks * feat(workspaces): enforce canCreateWorkspace policy on the workspace creation mutation * feat(shared): allow workspace admins and guests to create workspaces even if they are part of an exclusive workspace * test(shared): use test fake properly * fix(server): eligble workspace typing fixes * test(shared): fix more workspace fakes * fix(workspacesCore): add missing loader * fix(shared): use proper exhaustive switch cases, they stop bugs from happening * feat(shared): introduce workspacePlanHasAccessToFeature function with tests * chore(workspaces): fix more PR comments * fix(workspaces): naming * fix(workspaces): some more
88 lines
2.5 KiB
TypeScript
88 lines
2.5 KiB
TypeScript
import { FindEmailsByUserId } from '@/modules/core/domain/userEmails/operations'
|
|
import { UserEmail } from '@/modules/core/domain/userEmails/types'
|
|
import {
|
|
GetUserDiscoverableWorkspaces,
|
|
GetUsersCurrentAndEligibleToBecomeAMemberWorkspaces,
|
|
GetWorkspaceRolesForUser,
|
|
GetWorkspaces
|
|
} from '@/modules/workspaces/domain/operations'
|
|
import { LimitedWorkspace, Workspace } from '@/modules/workspacesCore/domain/types'
|
|
|
|
type GetDiscoverableWorkspaceForUserArgs = {
|
|
userId: string
|
|
}
|
|
|
|
const getUserVerifiedDomains = (userEmails: UserEmail[]): string[] =>
|
|
userEmails.filter((email) => email.verified).map((email) => email.email.split('@')[1])
|
|
|
|
export const getDiscoverableWorkspacesForUserFactory =
|
|
({
|
|
findEmailsByUserId,
|
|
getDiscoverableWorkspaces
|
|
}: {
|
|
findEmailsByUserId: FindEmailsByUserId
|
|
getDiscoverableWorkspaces: GetUserDiscoverableWorkspaces
|
|
}) =>
|
|
async ({
|
|
userId
|
|
}: GetDiscoverableWorkspaceForUserArgs): Promise<LimitedWorkspace[]> => {
|
|
const userEmails = await findEmailsByUserId({ userId })
|
|
const userVerifiedDomains = getUserVerifiedDomains(userEmails)
|
|
const workspaces = await getDiscoverableWorkspaces({
|
|
domains: userVerifiedDomains,
|
|
userId
|
|
})
|
|
|
|
return workspaces
|
|
}
|
|
|
|
export const getUsersCurrentAndEligibleToBecomeAMemberWorkspaces =
|
|
({
|
|
findEmailsByUserId,
|
|
getUserEligibleWorkspaces
|
|
}: {
|
|
findEmailsByUserId: FindEmailsByUserId
|
|
getUserEligibleWorkspaces: GetUsersCurrentAndEligibleToBecomeAMemberWorkspaces
|
|
}) =>
|
|
async ({
|
|
userId
|
|
}: GetDiscoverableWorkspaceForUserArgs): Promise<LimitedWorkspace[]> => {
|
|
const userEmails = await findEmailsByUserId({ userId })
|
|
const userVerifiedDomains = getUserVerifiedDomains(userEmails)
|
|
const workspaces = await getUserEligibleWorkspaces({
|
|
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
|
|
}
|