feat(workspaces): added GQL fitlering capabilities to activeUser workspaces

*  added filtering mechanism for getWorkspaces completed or not completed workspaces
* added filtering mechanism to filter workspaces of active user by string hitting on slug or name
This commit is contained in:
Daniel Gak Anagrov
2025-05-19 16:30:56 +02:00
committed by GitHub
parent 3d4c4395f4
commit fa5f2eb1f5
14 changed files with 264 additions and 71 deletions
@@ -1,11 +1,10 @@
import { FindEmailsByUserId } from '@/modules/core/domain/userEmails/operations'
import {
GetUserDiscoverableWorkspaces,
GetWorkspace,
GetWorkspaceRolesForUser
GetWorkspaceRolesForUser,
GetWorkspaces
} from '@/modules/workspaces/domain/operations'
import { Workspace } from '@/modules/workspacesCore/domain/types'
import { chunk, isNull } from 'lodash'
type GetDiscoverableWorkspaceForUserArgs = {
userId: string
@@ -38,32 +37,29 @@ export const getDiscoverableWorkspacesForUserFactory =
type GetWorkspacesForUserArgs = {
userId: string
completed?: boolean
search?: string
}
export const getWorkspacesForUserFactory =
({
getWorkspace,
getWorkspaces,
getWorkspaceRolesForUser
}: {
getWorkspace: GetWorkspace
getWorkspaces: GetWorkspaces
getWorkspaceRolesForUser: GetWorkspaceRolesForUser
}) =>
async ({ userId }: GetWorkspacesForUserArgs): Promise<Workspace[]> => {
async ({
userId,
completed,
search
}: GetWorkspacesForUserArgs): Promise<Workspace[]> => {
const workspaceRoles = await getWorkspaceRolesForUser({ userId })
const workspaces: Workspace[] = []
for (const workspaceRoleBatch of chunk(workspaceRoles, 20)) {
// TODO: Use `getWorkspaces`, which I saw Fabians already wrote in another PR
const workspacesBatch = await Promise.all(
workspaceRoleBatch.map(({ workspaceId }) => getWorkspace({ workspaceId }))
)
workspaces.push(
...workspacesBatch.filter(
(workspace): workspace is Workspace => !isNull(workspace)
)
)
}
const workspaceIds = workspaceRoles.map((workspace) => {
return workspace.workspaceId
})
const workspaces = await getWorkspaces({ workspaceIds, completed, search })
return workspaces
}