ba3d9ade22
* feat: moved project roles to activity * fix: added previous project role filed on activity * fix: remvoke does not get logged as an actvity for every project in a workspace when removed from workspace * fix: on delete user account, emit also seat and project event Co-authored-by: Charles Driesler <chuck@speckle.systems>
90 lines
3.5 KiB
TypeScript
90 lines
3.5 KiB
TypeScript
import { db } from '@/db/knex'
|
|
import { getPaginatedProjectModelsTotalCountFactory } from '@/modules/core/repositories/branches'
|
|
import { legacyGetStreamsFactory } from '@/modules/core/repositories/streams'
|
|
import { getWorkspacePlanFactory } from '@/modules/gatekeeper/repositories/billing'
|
|
import { defineModuleLoaders } from '@/modules/loaders'
|
|
import { getProjectDbClient } from '@/modules/multiregion/utils/dbSelector'
|
|
import {
|
|
getUserSsoSessionFactory,
|
|
getWorkspaceSsoProviderRecordFactory
|
|
} from '@/modules/workspaces/repositories/sso'
|
|
import {
|
|
getUserEligibleWorkspacesFactory,
|
|
getWorkspaceRoleForUserFactory
|
|
} from '@/modules/workspaces/repositories/workspaces'
|
|
import { getWorkspaceModelCountFactory } from '@/modules/workspaces/services/workspaceLimits'
|
|
import { getUsersCurrentAndEligibleToBecomeAMemberWorkspaces } from '@/modules/workspaces/services/retrieval'
|
|
import { findEmailsByUserIdFactory } from '@/modules/core/repositories/userEmails'
|
|
import { queryAllProjectsFactory } from '@/modules/core/services/projects'
|
|
|
|
// TODO: Move everything to use dataLoaders
|
|
export default defineModuleLoaders(async () => {
|
|
const getWorkspacePlan = getWorkspacePlanFactory({ db })
|
|
|
|
return {
|
|
getWorkspace: async ({ workspaceId }, { dataLoaders }) => {
|
|
return (await dataLoaders.workspaces!.getWorkspace.load(workspaceId)) || null
|
|
},
|
|
getWorkspaceRole: async ({ userId, workspaceId }) => {
|
|
const role = await getWorkspaceRoleForUserFactory({ db })({
|
|
userId,
|
|
workspaceId
|
|
})
|
|
return role?.role || null
|
|
},
|
|
getWorkspaceSsoSession: async ({ userId, workspaceId }) => {
|
|
const ssoSession = await getUserSsoSessionFactory({ db })({
|
|
userId,
|
|
workspaceId
|
|
})
|
|
return ssoSession || null
|
|
},
|
|
getWorkspaceSsoProvider: async ({ workspaceId }) => {
|
|
const ssoProvider = await getWorkspaceSsoProviderRecordFactory({ db })({
|
|
workspaceId
|
|
})
|
|
return ssoProvider || null
|
|
},
|
|
getWorkspaceSeat: async ({ userId, workspaceId }, { dataLoaders }) => {
|
|
return (
|
|
(
|
|
await dataLoaders.gatekeeper!.getUserWorkspaceSeat.load({
|
|
userId,
|
|
workspaceId
|
|
})
|
|
)?.type || null
|
|
)
|
|
},
|
|
getWorkspaceModelCount: async ({ workspaceId }) => {
|
|
// TODO: Dataloader that has to dynamically pick regional dbs?
|
|
return await getWorkspaceModelCountFactory({
|
|
queryAllProjects: queryAllProjectsFactory({
|
|
getStreams: legacyGetStreamsFactory({ db })
|
|
}),
|
|
getPaginatedProjectModelsTotalCount: async (projectId, params) => {
|
|
const regionDb = await getProjectDbClient({ projectId })
|
|
return await getPaginatedProjectModelsTotalCountFactory({ db: regionDb })(
|
|
projectId,
|
|
params
|
|
)
|
|
}
|
|
})({ workspaceId })
|
|
},
|
|
getWorkspaceProjectCount: async ({ workspaceId }, { dataLoaders }) => {
|
|
return await dataLoaders.workspaces!.getProjectCount.load(workspaceId)
|
|
},
|
|
getWorkspacePlan: async ({ workspaceId }) => {
|
|
return await getWorkspacePlan({ workspaceId })
|
|
},
|
|
getUsersCurrentAndEligibleToBecomeAMemberWorkspaces: async ({ userId }) => {
|
|
return await getUsersCurrentAndEligibleToBecomeAMemberWorkspaces({
|
|
findEmailsByUserId: findEmailsByUserIdFactory({ db }),
|
|
getUserEligibleWorkspaces: getUserEligibleWorkspacesFactory({ db })
|
|
})({ userId })
|
|
},
|
|
getWorkspaceLimits: async ({ workspaceId }, { dataLoaders }) => {
|
|
return await dataLoaders.gatekeeper!.getWorkspaceLimits.load(workspaceId)
|
|
}
|
|
}
|
|
})
|