chore(server): core IoC #51 - getUser(s)Factory

This commit is contained in:
Kristaps Fabians Geikins
2024-10-14 17:24:11 +03:00
parent 76039b9f07
commit 1cb27e6fdd
79 changed files with 395 additions and 234 deletions
+4 -3
View File
@@ -32,7 +32,7 @@ import type { ConnectionContext, ExecutionParams } from 'subscriptions-transport
import { SubscriptionServer } from 'subscriptions-transport-ws'
import { execute, subscribe } from 'graphql'
import knex from '@/db/knex'
import knex, { db } from '@/db/knex'
import { monitorActiveConnections } from '@/logging/httpServerMonitoring'
import { buildErrorFormatter } from '@/modules/core/graph/setup'
import {
@@ -64,7 +64,7 @@ import { statusCodePlugin } from '@/modules/core/graph/plugins/statusCode'
import { BaseError, ForbiddenError } from '@/modules/shared/errors'
import { loggingPlugin } from '@/modules/core/graph/plugins/logging'
import { shouldLogAsInfoLevel } from '@/logging/graphqlError'
import { getUser } from '@/modules/core/repositories/users'
import { getUserFactory } from '@/modules/core/repositories/users'
const GRAPHQL_PATH = '/graphql'
@@ -385,7 +385,8 @@ export async function init() {
next()
}
)
if (enableMixpanel()) app.use(mixpanelTrackerHelperMiddlewareFactory({ getUser }))
if (enableMixpanel())
app.use(mixpanelTrackerHelperMiddlewareFactory({ getUser: getUserFactory({ db }) }))
// Initialize default modules, including rest api handlers
await ModulesSetup.init(app)
@@ -29,7 +29,7 @@ import {
getStreamFactory,
grantStreamPermissionsFactory
} from '@/modules/core/repositories/streams'
import { getUser } from '@/modules/core/repositories/users'
import { getUserFactory } from '@/modules/core/repositories/users'
import {
addOrUpdateStreamCollaboratorFactory,
validateStreamAccessFactory
@@ -38,6 +38,7 @@ import { authorizeResolver } from '@/modules/shared'
import { LogicError } from '@/modules/shared/errors'
import { publish } from '@/modules/shared/utils/subscriptions'
const getUser = getUserFactory({ db })
const getStream = getStreamFactory({ db })
const getUserProjectAccessRequest = getUserProjectAccessRequestFactory({
getUsersPendingAccessRequest: getUsersPendingAccessRequestFactory({ db })
@@ -33,7 +33,7 @@ import {
grantStreamPermissionsFactory,
revokeStreamPermissionsFactory
} from '@/modules/core/repositories/streams'
import { getUser } from '@/modules/core/repositories/users'
import { getUserFactory } from '@/modules/core/repositories/users'
import {
addOrUpdateStreamCollaboratorFactory,
isStreamCollaboratorFactory,
@@ -64,6 +64,7 @@ import { BasicTestStream, createTestStreams } from '@/test/speckle-helpers/strea
import { expect } from 'chai'
import { noop } from 'lodash'
const getUser = getUserFactory({ db })
const getStream = getStreamFactory({ db })
const getStreamCollaborators = getStreamCollaboratorsFactory({ db })
const requestProjectAccess = requestProjectAccessFactory({
@@ -35,7 +35,7 @@ import {
grantStreamPermissionsFactory,
revokeStreamPermissionsFactory
} from '@/modules/core/repositories/streams'
import { getUser } from '@/modules/core/repositories/users'
import { getUserFactory } from '@/modules/core/repositories/users'
import {
addOrUpdateStreamCollaboratorFactory,
isStreamCollaboratorFactory,
@@ -66,6 +66,7 @@ import { BasicTestStream, createTestStreams } from '@/test/speckle-helpers/strea
import { expect } from 'chai'
import { noop } from 'lodash'
const getUser = getUserFactory({ db })
const getStreamCollaborators = getStreamCollaboratorsFactory({ db })
const getStream = getStreamFactory({ db })
const requestStreamAccess = requestStreamAccessFactory({
@@ -19,11 +19,11 @@ import { StreamAcl, StreamActivity } from '@/modules/core/dbSchema'
import { Roles } from '@/modules/core/helpers/mainConstants'
import { StreamAclRecord } from '@/modules/core/helpers/types'
import { getServerInfo } from '@/modules/core/services/generic'
import { getUser } from '@/modules/core/repositories/users'
import { createWebhookEventFactory } from '@/modules/webhooks/repositories/webhooks'
import { dispatchStreamEventFactory } from '@/modules/webhooks/services/webhooks'
import { Knex } from 'knex'
import { getStreamFactory } from '@/modules/core/repositories/streams'
import { getUserFactory } from '@/modules/core/repositories/users'
const tables = {
streamActivity: <T extends object = StreamActivityRecord>(db: Knex) =>
@@ -255,7 +255,7 @@ export const saveActivityFactory =
getServerInfo,
getStream: getStreamFactory({ db }),
createWebhookEvent: createWebhookEventFactory({ db }),
getUser
getUser: getUserFactory({ db })
})({
streamId,
event: actionType,
@@ -2,21 +2,23 @@ import {
NotificationPublisher,
NotificationType
} from '@/modules/notifications/helpers/types'
import { getUser } from '@/modules/core/repositories/users'
import {
CreateActivitySummary,
GetActiveUserStreams,
GetActivity
} from '@/modules/activitystream/domain/operations'
import { GetStream } from '@/modules/core/domain/streams/operations'
import { GetUser } from '@/modules/core/domain/users/operations'
export const createActivitySummaryFactory =
({
getStream,
getActivity
getActivity,
getUser
}: {
getStream: GetStream
getActivity: GetActivity
getUser: GetUser
}): CreateActivitySummary =>
async ({
userId,
@@ -19,14 +19,15 @@ const {
addOrUpdateStreamCollaboratorFactory
} = require('@/modules/core/services/streams/access')
const { authorizeResolver } = require('@/modules/shared')
const { getUser } = require('@/modules/core/repositories/users')
const { grantStreamPermissionsFactory } = require('@/modules/core/repositories/streams')
const {
addStreamInviteAcceptedActivityFactory,
addStreamPermissionsAddedActivityFactory
} = require('@/modules/activitystream/services/streamActivity')
const { publish } = require('@/modules/shared/utils/subscriptions')
const { getUserFactory } = require('@/modules/core/repositories/users')
const getUser = getUserFactory({ db })
const getUserActivity = getUserActivityFactory({ db })
const saveActivity = saveActivityFactory({ db })
const validateStreamAccess = validateStreamAccessFactory({ authorizeResolver })
@@ -36,21 +36,24 @@ import {
import { collectAndValidateCoreTargetsFactory } from '@/modules/serverinvites/services/coreResourceCollection'
import { buildCoreInviteEmailContentsFactory } from '@/modules/serverinvites/services/coreEmailContents'
import { getEventBus } from '@/modules/shared/services/eventBus'
import { getUsers } from '@/modules/core/repositories/users'
import { addStreamCreatedActivityFactory } from '@/modules/activitystream/services/streamActivity'
import { ProjectsEmitter } from '@/modules/core/events/projectsEmitter'
import { createBranchFactory } from '@/modules/core/repositories/branches'
import { publish } from '@/modules/shared/utils/subscriptions'
import { getUserFactory, getUsersFactory } from '@/modules/core/repositories/users'
const cleanup = async () => {
await truncateTables([StreamActivity.name, Users.name])
}
const getUser = getUserFactory({ db })
const getUsers = getUsersFactory({ db })
const getStream = getStreamFactory({ db })
const saveActivity = saveActivityFactory({ db })
const createActivitySummary = createActivitySummaryFactory({
getStream,
getActivity: getActivityFactory({ db })
getActivity: getActivityFactory({ db }),
getUser
})
const addStreamCreatedActivity = addStreamCreatedActivityFactory({
saveActivity: saveActivityFactory({ db }),
@@ -60,7 +63,7 @@ const createStream = legacyCreateStreamFactory({
createStreamReturnRecord: createStreamReturnRecordFactory({
inviteUsersToProject: inviteUsersToProjectFactory({
createAndSendInvite: createAndSendInviteFactory({
findUserByTarget: findUserByTargetFactory(),
findUserByTarget: findUserByTargetFactory({ db }),
insertInviteAndDeleteOld: insertInviteAndDeleteOldFactory({ db }),
collectAndValidateResourceTargets: collectAndValidateCoreTargetsFactory({
getStream
@@ -72,7 +75,8 @@ const createStream = legacyCreateStreamFactory({
getEventBus().emit({
eventName,
payload
})
}),
getUser
}),
getUsers
}),
@@ -2,7 +2,6 @@
import mailchimp from '@mailchimp/mailchimp_marketing'
import { md5 } from '@/modules/shared/helpers/cryptoHelper'
import { getMailchimpConfig } from '@/modules/shared/helpers/envHelper'
// import { getUserById } from '@/modules/core/services/users'
import { UserRecord } from '@/modules/core/helpers/types'
let mailchimpInitialized = false
@@ -37,7 +37,6 @@ const {
buildCoreInviteEmailContentsFactory
} = require('@/modules/serverinvites/services/coreEmailContents')
const { getEventBus } = require('@/modules/shared/services/eventBus')
const { getUsers } = require('@/modules/core/repositories/users')
const { createBranchFactory } = require('@/modules/core/repositories/branches')
const { ProjectsEmitter } = require('@/modules/core/events/projectsEmitter')
const {
@@ -45,7 +44,10 @@ const {
} = require('@/modules/activitystream/services/streamActivity')
const { saveActivityFactory } = require('@/modules/activitystream/repositories')
const { publish } = require('@/modules/shared/utils/subscriptions')
const { getUsersFactory, getUserFactory } = require('@/modules/core/repositories/users')
const getUser = getUserFactory({ db })
const getUsers = getUsersFactory({ db })
const addStreamCreatedActivity = addStreamCreatedActivityFactory({
saveActivity: saveActivityFactory({ db }),
publish
@@ -57,7 +59,7 @@ const createStream = legacyCreateStreamFactory({
createStreamReturnRecord: createStreamReturnRecordFactory({
inviteUsersToProject: inviteUsersToProjectFactory({
createAndSendInvite: createAndSendInviteFactory({
findUserByTarget: findUserByTargetFactory(),
findUserByTarget: findUserByTargetFactory({ db }),
insertInviteAndDeleteOld: insertInviteAndDeleteOldFactory({ db }),
collectAndValidateResourceTargets: collectAndValidateCoreTargetsFactory({
getStream
@@ -69,7 +71,8 @@ const createStream = legacyCreateStreamFactory({
getEventBus().emit({
eventName,
payload
})
}),
getUser
}),
getUsers
}),
@@ -53,7 +53,6 @@ import {
AutomateRunTriggerType
} from '@/modules/core/graph/generated/graphql'
import { getGenericRedis } from '@/modules/core/index'
import { getUser } from '@/modules/core/repositories/users'
import { createAutomation as clientCreateAutomation } from '@/modules/automate/clients/executionEngine'
import { Automate, Roles, isNullOrUndefined, isNonNullable } from '@speckle/shared'
import { getFeatureFlags, getServerOrigin } from '@/modules/shared/helpers/envHelper'
@@ -110,9 +109,11 @@ import { AutomateRunsEmitter } from '@/modules/automate/events/runs'
import { createAppToken } from '@/modules/core/services/tokens'
import { getCommitFactory } from '@/modules/core/repositories/commits'
import { validateStreamAccessFactory } from '@/modules/core/services/streams/access'
import { getUserFactory } from '@/modules/core/repositories/users'
const { FF_AUTOMATE_MODULE_ENABLED } = getFeatureFlags()
const getUser = getUserFactory({ db })
const storeAutomation = storeAutomationFactory({ db })
const storeAutomationToken = storeAutomationTokenFactory({ db })
const storeAutomationRevision = storeAutomationRevisionFactory({ db })
@@ -16,7 +16,6 @@ import {
CreateAutomateFunctionInput,
AutomateFunctionTemplateLanguage
} from '@/modules/core/graph/generated/graphql'
import { getUser } from '@/modules/core/repositories/users'
import {
MaybeNullOrUndefined,
Nullable,
@@ -46,6 +45,7 @@ import {
import { getFunctionsMarketplaceUrl } from '@/modules/core/helpers/routeHelper'
import { automateLogger } from '@/logging/logging'
import { CreateStoredAuthCode } from '@/modules/automate/domain/operations'
import { GetUser } from '@/modules/core/domain/users/operations'
const mapGqlTemplateIdToExecEngineTemplateId = (
id: AutomateFunctionTemplateLanguage
@@ -119,7 +119,7 @@ export const convertFunctionReleaseToGraphQLReturn = (
export type CreateFunctionDeps = {
createStoredAuthCode: CreateStoredAuthCode
createExecutionEngineFn: typeof createFunction
getUser: typeof getUser
getUser: GetUser
}
export const createFunctionFromTemplateFactory =
@@ -48,7 +48,6 @@ import {
validateStreamAccessFactory
} from '@/modules/core/services/streams/access'
import { authorizeResolver } from '@/modules/shared'
import { getUser } from '@/modules/core/repositories/users'
import { grantStreamPermissionsFactory } from '@/modules/core/repositories/streams'
import {
addStreamInviteAcceptedActivityFactory,
@@ -56,6 +55,7 @@ import {
} from '@/modules/activitystream/services/streamActivity'
import { saveActivityFactory } from '@/modules/activitystream/repositories'
import { publish } from '@/modules/shared/utils/subscriptions'
import { getUserFactory } from '@/modules/core/repositories/users'
/**
* TODO: Extra test ideas
@@ -65,6 +65,7 @@ import { publish } from '@/modules/shared/utils/subscriptions'
const { FF_AUTOMATE_MODULE_ENABLED } = getFeatureFlags()
const getUser = getUserFactory({ db })
const saveActivity = saveActivityFactory({ db })
const validateStreamAccess = validateStreamAccessFactory({ authorizeResolver })
const addOrUpdateStreamCollaborator = addOrUpdateStreamCollaboratorFactory({
@@ -32,7 +32,6 @@ const {
buildCoreInviteEmailContentsFactory
} = require('@/modules/serverinvites/services/coreEmailContents')
const { getEventBus } = require('@/modules/shared/services/eventBus')
const { getUsers } = require('@/modules/core/repositories/users')
const { createBranchFactory } = require('@/modules/core/repositories/branches')
const { ProjectsEmitter } = require('@/modules/core/events/projectsEmitter')
const {
@@ -40,7 +39,10 @@ const {
} = require('@/modules/activitystream/services/streamActivity')
const { saveActivityFactory } = require('@/modules/activitystream/repositories')
const { publish } = require('@/modules/shared/utils/subscriptions')
const { getUsersFactory, getUserFactory } = require('@/modules/core/repositories/users')
const getUser = getUserFactory({ db })
const getUsers = getUsersFactory({ db })
const addStreamCreatedActivity = addStreamCreatedActivityFactory({
saveActivity: saveActivityFactory({ db }),
publish
@@ -50,7 +52,7 @@ const createStream = legacyCreateStreamFactory({
createStreamReturnRecord: createStreamReturnRecordFactory({
inviteUsersToProject: inviteUsersToProjectFactory({
createAndSendInvite: createAndSendInviteFactory({
findUserByTarget: findUserByTargetFactory(),
findUserByTarget: findUserByTargetFactory({ db }),
insertInviteAndDeleteOld: insertInviteAndDeleteOldFactory({ db }),
collectAndValidateResourceTargets: collectAndValidateCoreTargetsFactory({
getStream
@@ -62,7 +64,8 @@ const createStream = legacyCreateStreamFactory({
getEventBus().emit({
eventName,
payload
})
}),
getUser
}),
getUsers
}),
@@ -31,7 +31,6 @@ const {
buildCoreInviteEmailContentsFactory
} = require('@/modules/serverinvites/services/coreEmailContents')
const { getEventBus } = require('@/modules/shared/services/eventBus')
const { getUsers } = require('@/modules/core/repositories/users')
const { createBranchFactory } = require('@/modules/core/repositories/branches')
const { ProjectsEmitter } = require('@/modules/core/events/projectsEmitter')
const {
@@ -39,7 +38,10 @@ const {
} = require('@/modules/activitystream/services/streamActivity')
const { saveActivityFactory } = require('@/modules/activitystream/repositories')
const { publish } = require('@/modules/shared/utils/subscriptions')
const { getUsersFactory, getUserFactory } = require('@/modules/core/repositories/users')
const getUser = getUserFactory({ db })
const getUsers = getUsersFactory({ db })
const addStreamCreatedActivity = addStreamCreatedActivityFactory({
saveActivity: saveActivityFactory({ db }),
publish
@@ -49,7 +51,7 @@ const createStream = legacyCreateStreamFactory({
createStreamReturnRecord: createStreamReturnRecordFactory({
inviteUsersToProject: inviteUsersToProjectFactory({
createAndSendInvite: createAndSendInviteFactory({
findUserByTarget: findUserByTargetFactory(),
findUserByTarget: findUserByTargetFactory({ db }),
insertInviteAndDeleteOld: insertInviteAndDeleteOldFactory({ db }),
collectAndValidateResourceTargets: collectAndValidateCoreTargetsFactory({
getStream
@@ -61,7 +63,8 @@ const createStream = legacyCreateStreamFactory({
getEventBus().emit({
eventName,
payload
})
}),
getUser
}),
getUsers
}),
@@ -1,7 +1,7 @@
import { db } from '@/db/knex'
import { cliLogger } from '@/logging/logging'
import { getStreamFactory } from '@/modules/core/repositories/streams'
import { getUser } from '@/modules/core/repositories/users'
import { getUserFactory } from '@/modules/core/repositories/users'
import { BasicTestCommit, createTestCommits } from '@/test/speckle-helpers/commitHelper'
import dayjs from 'dayjs'
import { times } from 'lodash'
@@ -29,6 +29,7 @@ const command: CommandModule<
}
},
handler: async (argv) => {
const getUser = getUserFactory({ db })
const getStream = getStreamFactory({ db })
const count = argv.count
@@ -13,7 +13,6 @@ import {
getStreamBranchesByNameFactory,
markCommitBranchUpdatedFactory
} from '@/modules/core/repositories/branches'
import { getUser } from '@/modules/core/repositories/users'
import { createObject } from '@/modules/core/services/objects'
import {
getObjectFactory,
@@ -54,6 +53,7 @@ import { VersionsEmitter } from '@/modules/core/events/versionsEmitter'
import { addCommitCreatedActivityFactory } from '@/modules/activitystream/services/commitActivity'
import { saveActivityFactory } from '@/modules/activitystream/repositories'
import { publish } from '@/modules/shared/utils/subscriptions'
import { getUserFactory } from '@/modules/core/repositories/users'
const command: CommandModule<
unknown,
@@ -149,6 +149,7 @@ const command: CommandModule<
})
})
const getUser = getUserFactory({ db })
const getStreamCollaborators = getStreamCollaboratorsFactory({ db })
const downloadCommit = downloadCommitFactory({
getStream,
@@ -16,7 +16,6 @@ import {
getStreamBranchesByNameFactory,
markCommitBranchUpdatedFactory
} from '@/modules/core/repositories/branches'
import { getUser, getUsers } from '@/modules/core/repositories/users'
import { createCommitByBranchIdFactory } from '@/modules/core/services/commit/management'
import { createObject } from '@/modules/core/services/objects'
import {
@@ -71,6 +70,7 @@ import { addStreamCreatedActivityFactory } from '@/modules/activitystream/servic
import { saveActivityFactory } from '@/modules/activitystream/repositories'
import { publish } from '@/modules/shared/utils/subscriptions'
import { addCommitCreatedActivityFactory } from '@/modules/activitystream/services/commitActivity'
import { getUserFactory, getUsersFactory } from '@/modules/core/repositories/users'
const command: CommandModule<
unknown,
@@ -158,10 +158,12 @@ const command: CommandModule<
})
})
const getUser = getUserFactory({ db })
const getUsers = getUsersFactory({ db })
const createStreamReturnRecord = createStreamReturnRecordFactory({
inviteUsersToProject: inviteUsersToProjectFactory({
createAndSendInvite: createAndSendInviteFactory({
findUserByTarget: findUserByTargetFactory(),
findUserByTarget: findUserByTargetFactory({ db }),
insertInviteAndDeleteOld: insertInviteAndDeleteOldFactory({ db }),
collectAndValidateResourceTargets: collectAndValidateCoreTargetsFactory({
getStream
@@ -173,7 +175,8 @@ const command: CommandModule<
getEventBus().emit({
eventName,
payload
})
}),
getUser
}),
getUsers
}),
@@ -23,7 +23,7 @@ import {
createStreamFactory,
getStreamFactory
} from '@/modules/core/repositories/streams'
import { getUser } from '@/modules/core/repositories/users'
import { getUserFactory } from '@/modules/core/repositories/users'
import { cloneStreamFactory } from '@/modules/core/services/streams/clone'
import { publish } from '@/modules/shared/utils/subscriptions'
import { CommandModule } from 'yargs'
@@ -46,6 +46,8 @@ const command: CommandModule<
},
handler: async (argv) => {
const { sourceStreamId, targetUserId } = argv
const getUser = getUserFactory({ db })
const cloneStream = cloneStreamFactory({
getStream: getStreamFactory({ db }),
getUser,
@@ -78,7 +78,6 @@ const {
buildCoreInviteEmailContentsFactory
} = require('@/modules/serverinvites/services/coreEmailContents')
const { getEventBus } = require('@/modules/shared/services/eventBus')
const { getUsers } = require('@/modules/core/repositories/users')
const { ProjectsEmitter } = require('@/modules/core/events/projectsEmitter')
const {
addStreamCreatedActivityFactory
@@ -88,7 +87,10 @@ const { publish } = require('@/modules/shared/utils/subscriptions')
const {
addCommitCreatedActivityFactory
} = require('@/modules/activitystream/services/commitActivity')
const { getUsersFactory, getUserFactory } = require('@/modules/core/repositories/users')
const getUser = getUserFactory({ db })
const getUsers = getUsersFactory({ db })
const markCommitStreamUpdated = markCommitStreamUpdatedFactory({ db })
const streamResourceCheck = streamResourceCheckFactory({
checkStreamResourceAccess: checkStreamResourceAccessFactory({ db })
@@ -137,7 +139,7 @@ const createStream = legacyCreateStreamFactory({
createStreamReturnRecord: createStreamReturnRecordFactory({
inviteUsersToProject: inviteUsersToProjectFactory({
createAndSendInvite: createAndSendInviteFactory({
findUserByTarget: findUserByTargetFactory(),
findUserByTarget: findUserByTargetFactory({ db }),
insertInviteAndDeleteOld: insertInviteAndDeleteOldFactory({ db }),
collectAndValidateResourceTargets: collectAndValidateCoreTargetsFactory({
getStream
@@ -149,7 +151,8 @@ const createStream = legacyCreateStreamFactory({
getEventBus().emit({
eventName,
payload
})
}),
getUser
}),
getUsers
}),
@@ -97,7 +97,6 @@ const {
buildCoreInviteEmailContentsFactory
} = require('@/modules/serverinvites/services/coreEmailContents')
const { getEventBus } = require('@/modules/shared/services/eventBus')
const { getUsers } = require('@/modules/core/repositories/users')
const { ProjectsEmitter } = require('@/modules/core/events/projectsEmitter')
const {
addStreamCreatedActivityFactory
@@ -107,7 +106,10 @@ const { publish } = require('@/modules/shared/utils/subscriptions')
const {
addCommitCreatedActivityFactory
} = require('@/modules/activitystream/services/commitActivity')
const { getUsersFactory, getUserFactory } = require('@/modules/core/repositories/users')
const getUser = getUserFactory({ db })
const getUsers = getUsersFactory({ db })
const getStream = getStreamFactory({ db })
const streamResourceCheck = streamResourceCheckFactory({
checkStreamResourceAccess: checkStreamResourceAccessFactory({ db })
@@ -185,7 +187,7 @@ const createStream = legacyCreateStreamFactory({
createStreamReturnRecord: createStreamReturnRecordFactory({
inviteUsersToProject: inviteUsersToProjectFactory({
createAndSendInvite: createAndSendInviteFactory({
findUserByTarget: findUserByTargetFactory(),
findUserByTarget: findUserByTargetFactory({ db }),
insertInviteAndDeleteOld: insertInviteAndDeleteOldFactory({ db }),
collectAndValidateResourceTargets: collectAndValidateCoreTargetsFactory({
getStream
@@ -197,7 +199,8 @@ const createStream = legacyCreateStreamFactory({
getEventBus().emit({
eventName,
payload
})
}),
getUser
}),
getUsers
}),
@@ -0,0 +1,24 @@
import { UserWithOptionalRole } from '@/modules/core/domain/users/types'
import { Nullable } from '@speckle/shared'
export type GetUserParams = Partial<{
/**
* Join server_acl and get user role info
*/
withRole: boolean
/**
* Skip record sanitization. ONLY use when you wish to work with a user's password digest
*/
skipClean: boolean
}>
export type GetUsers = (
userIds: string | string[],
params?: GetUserParams
) => Promise<UserWithOptionalRole[]>
export type GetUser = (
userId: string,
params?: GetUserParams
) => Promise<Nullable<UserWithOptionalRole>>
@@ -0,0 +1,14 @@
import { LimitedUserRecord, UserRecord } from '@/modules/core/helpers/userHelper'
import { ServerRoles } from '@speckle/shared'
export type User = UserRecord
export type LimitedUser = LimitedUserRecord
export type UserWithOptionalRole<UserType extends LimitedUserRecord = UserRecord> =
UserType & {
/**
* Available, if query joined this data from server_acl
* (this can be the server role or stream role depending on how and where this was retrieved)
*/
role?: ServerRoles
}
@@ -51,7 +51,7 @@ import {
getUserStreamsPageFactory,
getUserStreamsCountFactory
} from '@/modules/core/repositories/streams'
import { getUser, getUsers } from '@/modules/core/repositories/users'
import { getUserFactory, getUsersFactory } from '@/modules/core/repositories/users'
import {
getRateLimitResult,
isRateLimitBreached
@@ -91,13 +91,15 @@ import {
} from '@/modules/shared/utils/subscriptions'
import { has } from 'lodash'
const getUsers = getUsersFactory({ db })
const getUser = getUserFactory({ db })
const saveActivity = saveActivityFactory({ db })
const getStream = getStreamFactory({ db })
const getStreamCollaborators = getStreamCollaboratorsFactory({ db })
const createStreamReturnRecord = createStreamReturnRecordFactory({
inviteUsersToProject: inviteUsersToProjectFactory({
createAndSendInvite: createAndSendInviteFactory({
findUserByTarget: findUserByTargetFactory(),
findUserByTarget: findUserByTargetFactory({ db }),
insertInviteAndDeleteOld: insertInviteAndDeleteOldFactory({ db }),
collectAndValidateResourceTargets: collectAndValidateCoreTargetsFactory({
getStream
@@ -109,7 +111,8 @@ const createStreamReturnRecord = createStreamReturnRecordFactory({
getEventBus().emit({
eventName,
payload
})
}),
getUser
}),
getUsers
}),
@@ -59,7 +59,6 @@ import {
} from '@/modules/serverinvites/repositories/serverInvites'
import db from '@/db/knex'
import { getInvitationTargetUsersFactory } from '@/modules/serverinvites/services/retrieval'
import { getUser, getUsers } from '@/modules/core/repositories/users'
import { BadRequestError, InvalidArgumentError } from '@/modules/shared/errors'
import { createAndSendInviteFactory } from '@/modules/serverinvites/services/creation'
import { collectAndValidateCoreTargetsFactory } from '@/modules/serverinvites/services/coreResourceCollection'
@@ -87,7 +86,10 @@ import {
favoriteStreamFactory,
getFavoriteStreamsCollectionFactory
} from '@/modules/core/services/streams/favorite'
import { getUserFactory, getUsersFactory } from '@/modules/core/repositories/users'
const getUsers = getUsersFactory({ db })
const getUser = getUserFactory({ db })
const getFavoriteStreamsCollection = getFavoriteStreamsCollectionFactory({
getFavoritedStreamsCount: getFavoritedStreamsCountFactory({ db }),
getFavoritedStreamsPage: getFavoritedStreamsPageFactory({ db })
@@ -97,7 +99,7 @@ const getStream = getStreamFactory({ db })
const createStreamReturnRecord = createStreamReturnRecordFactory({
inviteUsersToProject: inviteUsersToProjectFactory({
createAndSendInvite: createAndSendInviteFactory({
findUserByTarget: findUserByTargetFactory(),
findUserByTarget: findUserByTargetFactory({ db }),
insertInviteAndDeleteOld: insertInviteAndDeleteOldFactory({ db }),
collectAndValidateResourceTargets: collectAndValidateCoreTargetsFactory({
getStream
@@ -109,7 +111,8 @@ const createStreamReturnRecord = createStreamReturnRecordFactory({
getEventBus().emit({
eventName,
payload
})
}),
getUser
}),
getUsers
}),
@@ -15,12 +15,13 @@ import {
updateAllInviteTargetsFactory
} from '@/modules/serverinvites/repositories/serverInvites'
import { validateAndCreateUserEmailFactory } from '@/modules/core/services/userEmails'
import { getUser } from '@/modules/core/repositories/users'
import { getServerInfo } from '@/modules/core/services/generic'
import { deleteOldAndInsertNewVerificationFactory } from '@/modules/emails/repositories'
import { renderEmail } from '@/modules/emails/services/emailRendering'
import { sendEmail } from '@/modules/emails/services/sending'
import { getUserFactory } from '@/modules/core/repositories/users'
const getUser = getUserFactory({ db })
const requestNewEmailVerification = requestNewEmailVerificationFactory({
findEmail: findEmailFactory({ db }),
getUser,
+5 -1
View File
@@ -9,7 +9,6 @@ import {
getUserStreamCountsFactory,
getStreamsSourceAppsFactory
} from '@/modules/core/repositories/streams'
import { UserWithOptionalRole, getUsers } from '@/modules/core/repositories/users'
import { keyBy } from 'lodash'
import { AuthContext } from '@/modules/shared/authz'
import {
@@ -85,6 +84,10 @@ import db from '@/db/knex'
import { graphDataloadersBuilders } from '@/modules'
import { getAppScopesFactory } from '@/modules/auth/repositories'
import { StreamWithCommitId } from '@/modules/core/domain/streams/types'
import {
getUsersFactory,
UserWithOptionalRole
} from '@/modules/core/repositories/users'
const simpleTupleCacheKey = (key: [string, string]) => `${key[0]}:${key[1]}`
@@ -124,6 +127,7 @@ const getOwnedFavoritesCountByUserIds = getOwnedFavoritesCountByUserIdsFactory({
const getStreamRoles = getStreamRolesFactory({ db })
const getUserStreamCounts = getUserStreamCountsFactory({ db })
const getStreamsSourceApps = getStreamsSourceAppsFactory({ db })
const getUsers = getUsersFactory({ db })
/**
* TODO: Lazy load DataLoaders to reduce memory usage
@@ -1,9 +1,5 @@
import { ServerAcl, UserEmails, Users, knex } from '@/modules/core/dbSchema'
import {
LimitedUserRecord,
UserRecord,
UserWithRole
} from '@/modules/core/helpers/types'
import { UserRecord, UserWithRole } from '@/modules/core/helpers/types'
import { Nullable } from '@/modules/shared/helpers/typeHelper'
import { clamp, isArray, omit } from 'lodash'
import { metaHelpers } from '@/modules/core/helpers/meta'
@@ -13,27 +9,18 @@ import { Roles, ServerRoles } from '@speckle/shared'
import { updateUserEmailFactory } from '@/modules/core/repositories/userEmails'
import { db } from '@/db/knex'
import { markUserEmailAsVerifiedFactory } from '@/modules/core/services/users/emailVerification'
import { UserWithOptionalRole } from '@/modules/core/domain/users/types'
import {
GetUser,
GetUserParams,
GetUsers
} from '@/modules/core/domain/users/operations'
export type { UserWithOptionalRole, GetUserParams }
export type UserWithOptionalRole<User extends LimitedUserRecord = UserRecord> = User & {
/**
* Available, if query joined this data from server_acl
* (this can be the server role or stream role depending on how and where this was retrieved)
*/
role?: ServerRoles
const tables = {
users: (db: Knex) => db<UserRecord>(Users.name)
}
export type GetUserParams = Partial<{
/**
* Join server_acl and get user role info
*/
withRole: boolean
/**
* Skip record sanitization. ONLY use when you wish to work with a user's password digest
*/
skipClean: boolean
}>
function sanitizeUserRecord<T extends Nullable<UserRecord>>(user: T): T {
if (!user) return user
delete user.passwordDigest
@@ -65,35 +52,37 @@ export const getUsersBaseQuery = (
/**
* Get users by ID
*/
export async function getUsers(
userIds: string | string[],
params?: GetUserParams
): Promise<UserWithOptionalRole[]> {
const { withRole, skipClean } = params || {}
userIds = isArray(userIds) ? userIds : [userIds]
export const getUsersFactory =
(deps: { db: Knex }): GetUsers =>
async (
userIds: string | string[],
params?: GetUserParams
): Promise<UserWithOptionalRole[]> => {
const { withRole, skipClean } = params || {}
userIds = isArray(userIds) ? userIds : [userIds]
const q = Users.knex<UserWithOptionalRole[]>().whereIn(Users.col.id, userIds)
q.leftJoin(UserEmails.name, UserEmails.col.userId, Users.col.id).where({
[UserEmails.col.primary]: true
})
const q = tables.users(deps.db).whereIn(Users.col.id, userIds)
q.leftJoin(UserEmails.name, UserEmails.col.userId, Users.col.id).where({
[UserEmails.col.primary]: true
})
const columns: (Knex.Raw<UserRecord> | string)[] = [
...Object.values(omit(Users.col, ['email', 'verified'])),
knex.raw(`(array_agg("user_emails"."email"))[1] as email`),
knex.raw(`(array_agg("user_emails"."verified"))[1] as verified`)
]
if (withRole) {
// Getting first role from grouped results
columns.push(knex.raw(`(array_agg("server_acl"."role"))[1] as role`))
q.leftJoin(ServerAcl.name, ServerAcl.col.userId, Users.col.id)
const columns: (Knex.Raw<UserRecord> | string)[] = [
...Object.values(omit(Users.col, ['email', 'verified'])),
knex.raw(`(array_agg("user_emails"."email"))[1] as email`),
knex.raw(`(array_agg("user_emails"."verified"))[1] as verified`)
]
if (withRole) {
// Getting first role from grouped results
columns.push(knex.raw(`(array_agg("server_acl"."role"))[1] as role`))
q.leftJoin(ServerAcl.name, ServerAcl.col.userId, Users.col.id)
}
q.columns<UserWithOptionalRole[]>(columns)
q.groupBy(Users.col.id)
return (await q).map((u) => (skipClean ? u : sanitizeUserRecord(u)))
}
q.columns(columns)
q.groupBy(Users.col.id)
return (await q).map((u) => (skipClean ? u : sanitizeUserRecord(u)))
}
type UserQuery = {
query: string | null
role?: ServerRoles | null
@@ -149,11 +138,13 @@ export async function countUsers(args: UserQuery): Promise<number> {
/**
* Get user by ID
*/
export async function getUser(userId: string, params?: GetUserParams) {
if (!userId) return null
const users = await getUsers([userId], params)
return users?.[0] || null
}
export const getUserFactory =
(deps: { db: Knex }): GetUser =>
async (userId: string, params?: GetUserParams) => {
if (!userId) return null
const users = await getUsersFactory(deps)([userId], params)
return users?.[0] || null
}
/**
* Get user by e-mail address
@@ -12,12 +12,12 @@ import {
RevokeStreamPermissions,
ValidateStreamAccess
} from '@/modules/core/domain/streams/operations'
import { GetUser } from '@/modules/core/domain/users/operations'
import {
StreamAccessUpdateError,
StreamInvalidAccessError
} from '@/modules/core/errors/stream'
import { StreamRecord } from '@/modules/core/helpers/types'
import { getUser } from '@/modules/core/repositories/users'
import { AuthorizeResolver } from '@/modules/shared/domain/operations'
import { BadRequestError, ForbiddenError, LogicError } from '@/modules/shared/errors'
import { ensureError, Roles, StreamRoles } from '@speckle/shared'
@@ -142,7 +142,7 @@ export const removeStreamCollaboratorFactory =
export const addOrUpdateStreamCollaboratorFactory =
(deps: {
validateStreamAccess: ValidateStreamAccess
getUser: typeof getUser
getUser: GetUser
grantStreamPermissions: GrantStreamPermissions
addStreamInviteAcceptedActivity: ReturnType<
typeof addStreamInviteAcceptedActivityFactory
@@ -5,7 +5,7 @@ import {
UserRecord
} from '@/modules/core/helpers/types'
import { StreamWithOptionalRole } from '@/modules/core/repositories/streams'
import { getUser, UserWithOptionalRole } from '@/modules/core/repositories/users'
import { UserWithOptionalRole } from '@/modules/core/repositories/users'
import { generateCommitId } from '@/modules/core/repositories/commits'
import { chunk } from 'lodash'
import { generateBranchId } from '@/modules/core/repositories/branches'
@@ -42,6 +42,7 @@ import {
GetBatchedStreamBranches,
InsertBranches
} from '@/modules/core/domain/branches/operations'
import { GetUser } from '@/modules/core/domain/users/operations'
type CloneStreamInitialState = {
user: UserWithOptionalRole<UserRecord>
@@ -79,7 +80,7 @@ const decrementingDateGenerator = () => {
type PrepareStateDeps = {
getStream: GetStream
getUser: typeof getUser
getUser: GetUser
db: Knex
}
@@ -5,7 +5,6 @@ import {
} from '@/modules/core/errors/stream'
import { StreamRecord } from '@/modules/core/helpers/types'
import { logger } from '@/logging/logging'
import { getUser } from '@/modules/core/services/users'
import {
ContextResourceAccessRules,
isNewResourceAllowed
@@ -18,13 +17,14 @@ import {
UpdateStreamRecord
} from '@/modules/core/domain/streams/operations'
import { GetOnboardingBaseProject } from '@/modules/cross-server-sync/domain/operations'
import { GetUser } from '@/modules/core/domain/users/operations'
export const createOnboardingStreamFactory =
(deps: {
getOnboardingBaseProject: GetOnboardingBaseProject
cloneStream: CloneStream
createStreamReturnRecord: CreateStream
getUser: typeof getUser
getUser: GetUser
updateStream: UpdateStreamRecord
}): CreateOnboardingStream =>
async (
@@ -69,7 +69,7 @@ export const createOnboardingStreamFactory =
logger.info('Updating onboarding stream title')
const user = await deps.getUser(targetUserId)
const name = user.name.split(' ')[0]
const name = user!.name.split(' ')[0]
await deps.updateStream({
id: newStream.id,
name: `${name}'s First Project`,
@@ -20,7 +20,7 @@ const { LIMITED_USER_FIELDS } = require('@/modules/core/helpers/userHelper')
const {
getUserByEmail,
getUsersBaseQuery,
getUser
getUserFactory
} = require('@/modules/core/repositories/users')
const { UsersEmitter, UsersEvents } = require('@/modules/core/events/usersEmitter')
const { pick, omit } = require('lodash')
@@ -75,6 +75,7 @@ const _ensureAtleastOneAdminRemains = async (userId) => {
}
}
const getUser = getUserFactory({ db })
const requestNewEmailVerification = requestNewEmailVerificationFactory({
findEmail: findEmailFactory({ db }),
getUser,
@@ -5,7 +5,7 @@ import { UserUpdateError, UserValidationError } from '@/modules/core/errors/user
import { PasswordTooShortError } from '@/modules/core/errors/userinput'
import { UserUpdateInput } from '@/modules/core/graph/generated/graphql'
import type { UserRecord } from '@/modules/core/helpers/userHelper'
import { getUser, updateUser } from '@/modules/core/repositories/users'
import { getUserFactory, updateUser } from '@/modules/core/repositories/users'
import { sanitizeImageUrl } from '@/modules/shared/helpers/sanitization'
import { isNullOrUndefined } from '@speckle/shared'
import bcrypt from 'bcrypt'
@@ -13,6 +13,7 @@ import bcrypt from 'bcrypt'
export const MINIMUM_PASSWORD_LENGTH = 8
export async function updateUserAndNotify(userId: string, update: UserUpdateInput) {
const getUser = getUserFactory({ db })
const existingUser = await getUser(userId)
if (!existingUser) {
throw new UserUpdateError('Attempting to update a non-existant user')
@@ -71,6 +72,7 @@ export async function changePassword(
input: { oldPassword: string; newPassword: string }
) {
const { oldPassword, newPassword } = input
const getUser = getUserFactory({ db })
const user = await getUser(userId, { skipClean: true })
if (!user) {
throw new UserUpdateError('Could not find the user with the specified id')
@@ -10,7 +10,7 @@ import { Roles } from '@/modules/core/helpers/mainConstants'
import { createBranchFactory } from '@/modules/core/repositories/branches'
import { getCommitsFactory } from '@/modules/core/repositories/commits'
import { grantStreamPermissionsFactory } from '@/modules/core/repositories/streams'
import { getUser } from '@/modules/core/repositories/users'
import { getUserFactory } from '@/modules/core/repositories/users'
import {
addOrUpdateStreamCollaboratorFactory,
validateStreamAccessFactory
@@ -36,6 +36,7 @@ enum BatchActionType {
Delete
}
const getUser = getUserFactory({ db })
const createBranch = createBranchFactory({ db })
const getCommits = getCommitsFactory({ db })
const saveActivity = saveActivityFactory({ db })
@@ -67,7 +67,6 @@ const {
buildCoreInviteEmailContentsFactory
} = require('@/modules/serverinvites/services/coreEmailContents')
const { getEventBus } = require('@/modules/shared/services/eventBus')
const { getUsers } = require('@/modules/core/repositories/users')
const { ProjectsEmitter } = require('@/modules/core/events/projectsEmitter')
const {
addStreamCreatedActivityFactory
@@ -77,10 +76,13 @@ const { publish } = require('@/modules/shared/utils/subscriptions')
const {
addCommitCreatedActivityFactory
} = require('@/modules/activitystream/services/commitActivity')
const { getUsersFactory, getUserFactory } = require('@/modules/core/repositories/users')
const db = knex
const Commits = () => knex('commits')
const getUser = getUserFactory({ db })
const getUsers = getUsersFactory({ db })
const markCommitStreamUpdated = markCommitStreamUpdatedFactory({ db })
const markBranchStreamUpdated = markBranchStreamUpdatedFactory({ db })
const getStream = getStreamFactory({ db: knex })
@@ -131,7 +133,7 @@ const createStream = legacyCreateStreamFactory({
createStreamReturnRecord: createStreamReturnRecordFactory({
inviteUsersToProject: inviteUsersToProjectFactory({
createAndSendInvite: createAndSendInviteFactory({
findUserByTarget: findUserByTargetFactory(),
findUserByTarget: findUserByTargetFactory({ db }),
insertInviteAndDeleteOld: insertInviteAndDeleteOldFactory({ db }),
collectAndValidateResourceTargets: collectAndValidateCoreTargetsFactory({
getStream
@@ -143,7 +145,8 @@ const createStream = legacyCreateStreamFactory({
getEventBus().emit({
eventName,
payload
})
}),
getUser
}),
getUsers
}),
@@ -76,14 +76,16 @@ const {
buildCoreInviteEmailContentsFactory
} = require('@/modules/serverinvites/services/coreEmailContents')
const { getEventBus } = require('@/modules/shared/services/eventBus')
const { getUsers } = require('@/modules/core/repositories/users')
const { ProjectsEmitter } = require('@/modules/core/events/projectsEmitter')
const {
addStreamCreatedActivityFactory
} = require('@/modules/activitystream/services/streamActivity')
const { saveActivityFactory } = require('@/modules/activitystream/repositories')
const { publish } = require('@/modules/shared/utils/subscriptions')
const { getUsersFactory, getUserFactory } = require('@/modules/core/repositories/users')
const getUser = getUserFactory({ db })
const getUsers = getUsersFactory({ db })
const markCommitStreamUpdated = markCommitStreamUpdatedFactory({ db })
const getCommitStream = getCommitStreamFactory({ db })
const getStream = getStreamFactory({ db })
@@ -149,7 +151,7 @@ const createStream = legacyCreateStreamFactory({
createStreamReturnRecord: createStreamReturnRecordFactory({
inviteUsersToProject: inviteUsersToProjectFactory({
createAndSendInvite: createAndSendInviteFactory({
findUserByTarget: findUserByTargetFactory(),
findUserByTarget: findUserByTargetFactory({ db }),
insertInviteAndDeleteOld: insertInviteAndDeleteOldFactory({ db }),
collectAndValidateResourceTargets: collectAndValidateCoreTargetsFactory({
getStream
@@ -161,7 +163,8 @@ const createStream = legacyCreateStreamFactory({
getEventBus().emit({
eventName,
payload
})
}),
getUser
}),
getUsers
}),
@@ -8,7 +8,7 @@ import {
import { Commits, Streams, Users } from '@/modules/core/dbSchema'
import { Roles } from '@/modules/core/helpers/mainConstants'
import { grantStreamPermissionsFactory } from '@/modules/core/repositories/streams'
import { getUser } from '@/modules/core/repositories/users'
import { getUserFactory } from '@/modules/core/repositories/users'
import {
addOrUpdateStreamCollaboratorFactory,
validateStreamAccessFactory
@@ -24,6 +24,7 @@ import { createTestCommit } from '@/test/speckle-helpers/commitHelper'
import { BasicTestStream, createTestStreams } from '@/test/speckle-helpers/streamHelper'
import { expect } from 'chai'
const getUser = getUserFactory({ db })
const saveActivity = saveActivityFactory({ db })
const validateStreamAccess = validateStreamAccessFactory({ authorizeResolver })
const addOrUpdateStreamCollaborator = addOrUpdateStreamCollaboratorFactory({
@@ -38,7 +38,6 @@ const {
buildCoreInviteEmailContentsFactory
} = require('@/modules/serverinvites/services/coreEmailContents')
const { getEventBus } = require('@/modules/shared/services/eventBus')
const { getUsers } = require('@/modules/core/repositories/users')
const { createBranchFactory } = require('@/modules/core/repositories/branches')
const { ProjectsEmitter } = require('@/modules/core/events/projectsEmitter')
const {
@@ -46,7 +45,10 @@ const {
} = require('@/modules/activitystream/services/streamActivity')
const { saveActivityFactory } = require('@/modules/activitystream/repositories')
const { publish } = require('@/modules/shared/utils/subscriptions')
const { getUsersFactory, getUserFactory } = require('@/modules/core/repositories/users')
const getUser = getUserFactory({ db })
const getUsers = getUsersFactory({ db })
const addStreamCreatedActivity = addStreamCreatedActivityFactory({
saveActivity: saveActivityFactory({ db }),
publish
@@ -56,7 +58,7 @@ const createStream = legacyCreateStreamFactory({
createStreamReturnRecord: createStreamReturnRecordFactory({
inviteUsersToProject: inviteUsersToProjectFactory({
createAndSendInvite: createAndSendInviteFactory({
findUserByTarget: findUserByTargetFactory(),
findUserByTarget: findUserByTargetFactory({ db }),
insertInviteAndDeleteOld: insertInviteAndDeleteOldFactory({ db }),
collectAndValidateResourceTargets: collectAndValidateCoreTargetsFactory({
getStream
@@ -68,7 +70,8 @@ const createStream = legacyCreateStreamFactory({
getEventBus().emit({
eventName,
payload
})
}),
getUser
}),
getUsers
}),
@@ -43,7 +43,6 @@ const {
buildCoreInviteEmailContentsFactory
} = require('@/modules/serverinvites/services/coreEmailContents')
const { getEventBus } = require('@/modules/shared/services/eventBus')
const { getUsers } = require('@/modules/core/repositories/users')
const { createBranchFactory } = require('@/modules/core/repositories/branches')
const { ProjectsEmitter } = require('@/modules/core/events/projectsEmitter')
const {
@@ -51,7 +50,10 @@ const {
} = require('@/modules/activitystream/services/streamActivity')
const { saveActivityFactory } = require('@/modules/activitystream/repositories')
const { publish } = require('@/modules/shared/utils/subscriptions')
const { getUsersFactory, getUserFactory } = require('@/modules/core/repositories/users')
const getUser = getUserFactory({ db })
const getUsers = getUsersFactory({ db })
const addStreamCreatedActivity = addStreamCreatedActivityFactory({
saveActivity: saveActivityFactory({ db }),
publish
@@ -61,7 +63,7 @@ const createStream = legacyCreateStreamFactory({
createStreamReturnRecord: createStreamReturnRecordFactory({
inviteUsersToProject: inviteUsersToProjectFactory({
createAndSendInvite: createAndSendInviteFactory({
findUserByTarget: findUserByTargetFactory(),
findUserByTarget: findUserByTargetFactory({ db }),
insertInviteAndDeleteOld: insertInviteAndDeleteOldFactory({ db }),
collectAndValidateResourceTargets: collectAndValidateCoreTargetsFactory({
getStream
@@ -73,7 +75,8 @@ const createStream = legacyCreateStreamFactory({
getEventBus().emit({
eventName,
payload
})
}),
getUser
}),
getUsers
}),
@@ -33,8 +33,9 @@ const {
addStreamPermissionsAddedActivityFactory
} = require('@/modules/activitystream/services/streamActivity')
const { publish } = require('@/modules/shared/utils/subscriptions')
const { getUser } = require('@/modules/core/repositories/users')
const { getUserFactory } = require('@/modules/core/repositories/users')
const getUser = getUserFactory({ db })
const getStream = getStreamFactory({ db })
const saveActivity = saveActivityFactory({ db })
const validateStreamAccess = validateStreamAccessFactory({ authorizeResolver })
@@ -22,17 +22,18 @@ const {
addOrUpdateStreamCollaboratorFactory
} = require('@/modules/core/services/streams/access')
const { authorizeResolver } = require('@/modules/shared')
const { getUser } = require('@/modules/core/repositories/users')
const { grantStreamPermissionsFactory } = require('@/modules/core/repositories/streams')
const {
addStreamInviteAcceptedActivityFactory,
addStreamPermissionsAddedActivityFactory
} = require('@/modules/activitystream/services/streamActivity')
const { publish } = require('@/modules/shared/utils/subscriptions')
const { getUserFactory } = require('@/modules/core/repositories/users')
const saveActivity = saveActivityFactory({ db })
const validateStreamAccess = validateStreamAccessFactory({ authorizeResolver })
const getUser = getUserFactory({ db })
const addOrUpdateStreamCollaborator = addOrUpdateStreamCollaboratorFactory({
validateStreamAccess,
getUser,
@@ -7,7 +7,13 @@ import {
import { updateUserEmailFactory } from '@/modules/core/repositories/userEmails'
import { db } from '@/db/knex'
import { expect } from 'chai'
import { getUserByEmail, getUsers, listUsers } from '@/modules/core/repositories/users'
import {
getUserByEmail,
getUsersFactory,
listUsers
} from '@/modules/core/repositories/users'
const getUsers = getUsersFactory({ db })
describe('Find users @core', () => {
describe('getUsers', () => {
@@ -4,8 +4,8 @@ import { beforeEachContext } from '@/test/hooks'
import { expect } from 'chai'
import {
countUsers,
getUser,
getUserByEmail,
getUserFactory,
listUsers,
markUserAsVerified
} from '@/modules/core/repositories/users'
@@ -42,6 +42,7 @@ import { deleteOldAndInsertNewVerificationFactory } from '@/modules/emails/repos
import { renderEmail } from '@/modules/emails/services/emailRendering'
import { sendEmail } from '@/modules/emails/services/sending'
const getUser = getUserFactory({ db })
const requestNewEmailVerification = requestNewEmailVerificationFactory({
findEmail: findEmailFactory({ db }),
getUser,
@@ -44,7 +44,6 @@ const {
buildCoreInviteEmailContentsFactory
} = require('@/modules/serverinvites/services/coreEmailContents')
const { getEventBus } = require('@/modules/shared/services/eventBus')
const { getUsers } = require('@/modules/core/repositories/users')
const { createBranchFactory } = require('@/modules/core/repositories/branches')
const { ProjectsEmitter } = require('@/modules/core/events/projectsEmitter')
const {
@@ -52,6 +51,7 @@ const {
} = require('@/modules/activitystream/services/streamActivity')
const { saveActivityFactory } = require('@/modules/activitystream/repositories')
const { publish } = require('@/modules/shared/utils/subscriptions')
const { getUsersFactory, getUserFactory } = require('@/modules/core/repositories/users')
const sampleCommit = JSON.parse(`{
"Objects": [
@@ -76,6 +76,8 @@ const sampleObject = JSON.parse(`{
"speckleType": "Tests.Polyline"
}`)
const getUser = getUserFactory({ db })
const getUsers = getUsersFactory({ db })
const addStreamCreatedActivity = addStreamCreatedActivityFactory({
saveActivity: saveActivityFactory({ db }),
publish
@@ -85,7 +87,7 @@ const createStream = legacyCreateStreamFactory({
createStreamReturnRecord: createStreamReturnRecordFactory({
inviteUsersToProject: inviteUsersToProjectFactory({
createAndSendInvite: createAndSendInviteFactory({
findUserByTarget: findUserByTargetFactory(),
findUserByTarget: findUserByTargetFactory({ db }),
insertInviteAndDeleteOld: insertInviteAndDeleteOldFactory({ db }),
collectAndValidateResourceTargets: collectAndValidateCoreTargetsFactory({
getStream
@@ -97,7 +99,8 @@ const createStream = legacyCreateStreamFactory({
getEventBus().emit({
eventName,
payload
})
}),
getUser
}),
getUsers
}),
@@ -37,7 +37,6 @@ const {
buildCoreInviteEmailContentsFactory
} = require('@/modules/serverinvites/services/coreEmailContents')
const { getEventBus } = require('@/modules/shared/services/eventBus')
const { getUsers } = require('@/modules/core/repositories/users')
const { createBranchFactory } = require('@/modules/core/repositories/branches')
const { ProjectsEmitter } = require('@/modules/core/events/projectsEmitter')
const {
@@ -45,7 +44,10 @@ const {
} = require('@/modules/activitystream/services/streamActivity')
const { saveActivityFactory } = require('@/modules/activitystream/repositories')
const { publish } = require('@/modules/shared/utils/subscriptions')
const { getUsersFactory, getUserFactory } = require('@/modules/core/repositories/users')
const getUser = getUserFactory({ db })
const getUsers = getUsersFactory({ db })
const addStreamCreatedActivity = addStreamCreatedActivityFactory({
saveActivity: saveActivityFactory({ db }),
publish
@@ -55,7 +57,7 @@ const createStream = legacyCreateStreamFactory({
createStreamReturnRecord: createStreamReturnRecordFactory({
inviteUsersToProject: inviteUsersToProjectFactory({
createAndSendInvite: createAndSendInviteFactory({
findUserByTarget: findUserByTargetFactory(),
findUserByTarget: findUserByTargetFactory({ db }),
insertInviteAndDeleteOld: insertInviteAndDeleteOldFactory({ db }),
collectAndValidateResourceTargets: collectAndValidateCoreTargetsFactory({
getStream
@@ -67,7 +69,8 @@ const createStream = legacyCreateStreamFactory({
getEventBus().emit({
eventName,
payload
})
}),
getUser
}),
getUsers
}),
@@ -80,7 +80,6 @@ import {
import { collectAndValidateCoreTargetsFactory } from '@/modules/serverinvites/services/coreResourceCollection'
import { buildCoreInviteEmailContentsFactory } from '@/modules/serverinvites/services/coreEmailContents'
import { getEventBus } from '@/modules/shared/services/eventBus'
import { getUser, getUsers } from '@/modules/core/repositories/users'
import { ProjectsEmitter } from '@/modules/core/events/projectsEmitter'
import {
addStreamCreatedActivityFactory,
@@ -95,7 +94,10 @@ import {
validateStreamAccessFactory
} from '@/modules/core/services/streams/access'
import { authorizeResolver } from '@/modules/shared'
import { getUserFactory, getUsersFactory } from '@/modules/core/repositories/users'
const getUser = getUserFactory({ db })
const getUsers = getUsersFactory({ db })
const markCommitStreamUpdated = markCommitStreamUpdatedFactory({ db })
const markBranchStreamUpdated = markBranchStreamUpdatedFactory({ db })
const getStream = getStreamFactory({ db })
@@ -140,7 +142,7 @@ const createStream = legacyCreateStreamFactory({
createStreamReturnRecord: createStreamReturnRecordFactory({
inviteUsersToProject: inviteUsersToProjectFactory({
createAndSendInvite: createAndSendInviteFactory({
findUserByTarget: findUserByTargetFactory(),
findUserByTarget: findUserByTargetFactory({ db }),
insertInviteAndDeleteOld: insertInviteAndDeleteOldFactory({ db }),
collectAndValidateResourceTargets: collectAndValidateCoreTargetsFactory({
getStream
@@ -152,7 +154,8 @@ const createStream = legacyCreateStreamFactory({
getEventBus().emit({
eventName,
payload
})
}),
getUser
}),
getUsers
}),
@@ -76,7 +76,6 @@ const {
buildCoreInviteEmailContentsFactory
} = require('@/modules/serverinvites/services/coreEmailContents')
const { getEventBus } = require('@/modules/shared/services/eventBus')
const { getUsers } = require('@/modules/core/repositories/users')
const { ProjectsEmitter } = require('@/modules/core/events/projectsEmitter')
const {
addStreamCreatedActivityFactory
@@ -86,7 +85,9 @@ const { publish } = require('@/modules/shared/utils/subscriptions')
const {
addCommitCreatedActivityFactory
} = require('@/modules/activitystream/services/commitActivity')
const { getUsersFactory, getUserFactory } = require('@/modules/core/repositories/users')
const getUsers = getUsersFactory({ db })
const markCommitStreamUpdated = markCommitStreamUpdatedFactory({ db })
const getStream = getStreamFactory({ db })
const createBranch = createBranchFactory({ db })
@@ -122,7 +123,7 @@ const createStream = legacyCreateStreamFactory({
createStreamReturnRecord: createStreamReturnRecordFactory({
inviteUsersToProject: inviteUsersToProjectFactory({
createAndSendInvite: createAndSendInviteFactory({
findUserByTarget: findUserByTargetFactory(),
findUserByTarget: findUserByTargetFactory({ db }),
insertInviteAndDeleteOld: insertInviteAndDeleteOldFactory({ db }),
collectAndValidateResourceTargets: collectAndValidateCoreTargetsFactory({
getStream
@@ -134,7 +135,8 @@ const createStream = legacyCreateStreamFactory({
getEventBus().emit({
eventName,
payload
})
}),
getUser: getUserFactory({ db })
}),
getUsers
}),
@@ -28,16 +28,18 @@ import {
import { collectAndValidateCoreTargetsFactory } from '@/modules/serverinvites/services/coreResourceCollection'
import { buildCoreInviteEmailContentsFactory } from '@/modules/serverinvites/services/coreEmailContents'
import { getEventBus } from '@/modules/shared/services/eventBus'
import { getUsers } from '@/modules/core/repositories/users'
import { createBranchFactory } from '@/modules/core/repositories/branches'
import { ProjectsEmitter } from '@/modules/core/events/projectsEmitter'
import { addStreamCreatedActivityFactory } from '@/modules/activitystream/services/streamActivity'
import { saveActivityFactory } from '@/modules/activitystream/repositories'
import { publish } from '@/modules/shared/utils/subscriptions'
import { getUserFactory, getUsersFactory } from '@/modules/core/repositories/users'
// To ensure that the invites are created in the correct order, we need to wait a bit between each creation
const WAIT_TIMEOUT = 5
const getUser = getUserFactory({ db })
const getUsers = getUsersFactory({ db })
const addStreamCreatedActivity = addStreamCreatedActivityFactory({
saveActivity: saveActivityFactory({ db }),
publish
@@ -47,7 +49,7 @@ const createStream = legacyCreateStreamFactory({
createStreamReturnRecord: createStreamReturnRecordFactory({
inviteUsersToProject: inviteUsersToProjectFactory({
createAndSendInvite: createAndSendInviteFactory({
findUserByTarget: findUserByTargetFactory(),
findUserByTarget: findUserByTargetFactory({ db }),
insertInviteAndDeleteOld: insertInviteAndDeleteOldFactory({ db }),
collectAndValidateResourceTargets: collectAndValidateCoreTargetsFactory({
getStream
@@ -59,7 +61,8 @@ const createStream = legacyCreateStreamFactory({
getEventBus().emit({
eventName,
payload
})
}),
getUser
}),
getUsers
}),
@@ -30,12 +30,13 @@ import {
} from '@/modules/serverinvites/repositories/serverInvites'
import { buildApolloServer } from '@/app'
import { requestNewEmailVerificationFactory } from '@/modules/emails/services/verification/request'
import { getUser } from '@/modules/core/repositories/users'
import { getServerInfo } from '@/modules/core/services/generic'
import { deleteOldAndInsertNewVerificationFactory } from '@/modules/emails/repositories'
import { renderEmail } from '@/modules/emails/services/emailRendering'
import { sendEmail } from '@/modules/emails/services/sending'
import { getUserFactory } from '@/modules/core/repositories/users'
const getUser = getUserFactory({ db })
const requestNewEmailVerification = requestNewEmailVerificationFactory({
findEmail: findEmailFactory({ db }),
getUser,
@@ -51,7 +51,11 @@ import {
markCommitStreamUpdatedFactory,
markOnboardingBaseStreamFactory
} from '@/modules/core/repositories/streams'
import { getFirstAdmin, getUser, getUsers } from '@/modules/core/repositories/users'
import {
getFirstAdmin,
getUserFactory,
getUsersFactory
} from '@/modules/core/repositories/users'
import { createBranchAndNotifyFactory } from '@/modules/core/services/branch/management'
import { createCommitByBranchIdFactory } from '@/modules/core/services/commit/management'
import {
@@ -82,6 +86,8 @@ const crossServerSyncModule: SpeckleModule = {
finalize() {
crossServerSyncLogger.info('⬇️ Ensuring base onboarding stream asynchronously...')
const getUser = getUserFactory({ db })
const getUsers = getUsersFactory({ db })
const markOnboardingBaseStream = markOnboardingBaseStreamFactory({ db })
const markCommitStreamUpdated = markCommitStreamUpdatedFactory({ db })
const getStream = getStreamFactory({ db })
@@ -139,7 +145,7 @@ const crossServerSyncModule: SpeckleModule = {
const createStreamReturnRecord = createStreamReturnRecordFactory({
inviteUsersToProject: inviteUsersToProjectFactory({
createAndSendInvite: createAndSendInviteFactory({
findUserByTarget: findUserByTargetFactory(),
findUserByTarget: findUserByTargetFactory({ db }),
insertInviteAndDeleteOld: insertInviteAndDeleteOldFactory({ db }),
collectAndValidateResourceTargets: collectAndValidateCoreTargetsFactory({
getStream
@@ -151,7 +157,8 @@ const crossServerSyncModule: SpeckleModule = {
getEventBus().emit({
eventName,
payload
})
}),
getUser
}),
getUsers
}),
@@ -7,7 +7,6 @@ import { createObject } from '@/modules/core/services/objects'
import ObjectLoader from '@speckle/objectloader'
import { noop } from 'lodash'
import { crossServerSyncLogger } from '@/logging/logging'
import { getUser } from '@/modules/core/repositories/users'
import type { SpeckleViewer } from '@speckle/shared'
import { retry } from '@speckle/shared'
import {
@@ -34,6 +33,7 @@ import {
GetStream,
GetStreamCollaborators
} from '@/modules/core/domain/streams/operations'
import { GetUser } from '@/modules/core/domain/users/operations'
type LocalResources = Awaited<ReturnType<ReturnType<typeof getLocalResourcesFactory>>>
type LocalResourcesWithCommit = LocalResources & { newCommitId: string }
@@ -224,7 +224,7 @@ type GetLocalResourcesDeps = {
getStream: GetStream
getStreamBranchByName: GetStreamBranchByName
getStreamCollaborators: GetStreamCollaborators
getUser: typeof getUser
getUser: GetUser
}
const getLocalResourcesFactory =
@@ -1,5 +1,4 @@
import { crossServerSyncLogger, Logger } from '@/logging/logging'
import { getUser } from '@/modules/core/repositories/users'
import { CrossServerProjectSyncError } from '@/modules/cross-server-sync/errors'
import {
createApolloClient,
@@ -19,6 +18,7 @@ import {
GetStreamBranchByName
} from '@/modules/core/domain/branches/operations'
import { CreateStream } from '@/modules/core/domain/streams/operations'
import { GetUser } from '@/modules/core/domain/users/operations'
type ProjectMetadata = Awaited<ReturnType<typeof getProjectMetadata>>
@@ -48,7 +48,7 @@ const projectMetadataQuery = gql`
`
type GetLocalResourcesDeps = {
getUser: typeof getUser
getUser: GetUser
}
const getLocalResourcesFactory =
@@ -1,7 +1,7 @@
import { db } from '@/db/knex'
import { Resolvers } from '@/modules/core/graph/generated/graphql'
import { findPrimaryEmailForUserFactory } from '@/modules/core/repositories/userEmails'
import { getUser, getUserByEmail } from '@/modules/core/repositories/users'
import { getUserByEmail, getUserFactory } from '@/modules/core/repositories/users'
import { getServerInfo } from '@/modules/core/services/generic'
import {
deleteOldAndInsertNewVerificationFactory,
@@ -11,6 +11,7 @@ import { renderEmail } from '@/modules/emails/services/emailRendering'
import { sendEmail } from '@/modules/emails/services/sending'
import { requestEmailVerificationFactory } from '@/modules/emails/services/verification/request'
const getUser = getUserFactory({ db })
const requestEmailVerification = requestEmailVerificationFactory({
getUser,
getServerInfo,
+2 -1
View File
@@ -3,7 +3,7 @@ import { db } from '@/db/knex'
import { moduleLogger } from '@/logging/logging'
import { UsersEmitter } from '@/modules/core/events/usersEmitter'
import { findPrimaryEmailForUserFactory } from '@/modules/core/repositories/userEmails'
import { getUser } from '@/modules/core/repositories/users'
import { getUserFactory } from '@/modules/core/repositories/users'
import { getServerInfo } from '@/modules/core/services/generic'
import { deleteOldAndInsertNewVerificationFactory } from '@/modules/emails/repositories'
import { renderEmail } from '@/modules/emails/services/emailRendering'
@@ -29,6 +29,7 @@ const emailsModule: SpeckleModule = {
// init event listeners
if (isInitial) {
const getUser = getUserFactory({ db })
const initializeVerificationOnRegistration =
initializeVerificationOnRegistrationFactory({
userEmitterListener: UsersEmitter.listen,
@@ -6,7 +6,6 @@ import { UserEmail } from '@/modules/core/domain/userEmails/types'
import { UsersEmitter, UsersEvents } from '@/modules/core/events/usersEmitter'
import { getEmailVerificationFinalizationRoute } from '@/modules/core/helpers/routeHelper'
import { ServerInfo, UserRecord } from '@/modules/core/helpers/types'
import { getUser } from '@/modules/core/repositories/users'
import { getServerInfo } from '@/modules/core/services/generic'
import { EmailVerificationRequestError } from '@/modules/emails/errors'
import {
@@ -20,11 +19,12 @@ import {
RequestEmailVerification,
RequestNewEmailVerification
} from '@/modules/emails/domain/operations'
import { GetUser } from '@/modules/core/domain/users/operations'
const EMAIL_SUBJECT = 'Speckle Account E-mail Verification'
type CreateNewVerificationDeps = {
getUser: typeof getUser
getUser: GetUser
findPrimaryEmailForUser: FindPrimaryEmailForUser
getServerInfo: typeof getServerInfo
deleteOldAndInsertNewVerification: DeleteOldAndInsertNewVerification
@@ -69,7 +69,7 @@ type VerificationRequestContext = {
type CreateNewEmailVerificationFactoryDeps = {
findEmail: FindEmail
getUser: typeof getUser
getUser: GetUser
getServerInfo: typeof getServerInfo
deleteOldAndInsertNewVerification: DeleteOldAndInsertNewVerification
}
@@ -14,7 +14,6 @@ import {
} from '@/test/graphql/users'
import { getEmailVerificationFinalizationRoute } from '@/modules/core/helpers/routeHelper'
import { Express } from 'express'
import { getUser } from '@/modules/core/repositories/users'
import dayjs from 'dayjs'
import { EmailSendingServiceMock } from '@/test/mocks/global'
import {
@@ -29,8 +28,10 @@ import { getServerInfo } from '@/modules/core/services/generic'
import { findPrimaryEmailForUserFactory } from '@/modules/core/repositories/userEmails'
import { sendEmail } from '@/modules/emails/services/sending'
import { renderEmail } from '@/modules/emails/services/emailRendering'
import { getUserFactory } from '@/modules/core/repositories/users'
const mailerMock = EmailSendingServiceMock
const getUser = getUserFactory({ db })
const getPendingToken = getPendingTokenFactory({ db })
const deleteVerifications = deleteVerificationsFactory({ db })
const requestEmailVerification = requestEmailVerificationFactory({
@@ -29,13 +29,15 @@ import {
import { collectAndValidateCoreTargetsFactory } from '@/modules/serverinvites/services/coreResourceCollection'
import { buildCoreInviteEmailContentsFactory } from '@/modules/serverinvites/services/coreEmailContents'
import { getEventBus } from '@/modules/shared/services/eventBus'
import { getUsers } from '@/modules/core/repositories/users'
import { createBranchFactory } from '@/modules/core/repositories/branches'
import { ProjectsEmitter } from '@/modules/core/events/projectsEmitter'
import { addStreamCreatedActivityFactory } from '@/modules/activitystream/services/streamActivity'
import { saveActivityFactory } from '@/modules/activitystream/repositories'
import { publish } from '@/modules/shared/utils/subscriptions'
import { getUserFactory, getUsersFactory } from '@/modules/core/repositories/users'
const getUser = getUserFactory({ db })
const getUsers = getUsersFactory({ db })
const addStreamCreatedActivity = addStreamCreatedActivityFactory({
saveActivity: saveActivityFactory({ db }),
publish
@@ -45,7 +47,7 @@ const createStream = legacyCreateStreamFactory({
createStreamReturnRecord: createStreamReturnRecordFactory({
inviteUsersToProject: inviteUsersToProjectFactory({
createAndSendInvite: createAndSendInviteFactory({
findUserByTarget: findUserByTargetFactory(),
findUserByTarget: findUserByTargetFactory({ db }),
insertInviteAndDeleteOld: insertInviteAndDeleteOldFactory({ db }),
collectAndValidateResourceTargets: collectAndValidateCoreTargetsFactory({
getStream
@@ -57,7 +59,8 @@ const createStream = legacyCreateStreamFactory({
getEventBus().emit({
eventName,
payload
})
}),
getUser
}),
getUsers
}),
@@ -32,6 +32,7 @@ import {
import { createActivitySummaryFactory } from '@/modules/activitystream/services/summary'
import { getActivityFactory } from '@/modules/activitystream/repositories'
import { getStreamFactory } from '@/modules/core/repositories/streams'
import { getUserFactory } from '@/modules/core/repositories/users'
const digestNotificationEmailHandlerFactory =
(
@@ -437,7 +438,8 @@ const digestNotificationEmailHandler = digestNotificationEmailHandlerFactory({
}),
createActivitySummary: createActivitySummaryFactory({
getStream: getStreamFactory({ db }),
getActivity: getActivityFactory({ db })
getActivity: getActivityFactory({ db }),
getUser: getUserFactory({ db })
}),
getServerInfo,
renderEmail
@@ -4,11 +4,12 @@ import { ExtendedComment } from '@/modules/comments/domain/types'
import { getCommentFactory } from '@/modules/comments/repositories/comments'
import { GetStream } from '@/modules/core/domain/streams/operations'
import { StreamWithOptionalRole } from '@/modules/core/domain/streams/types'
import { GetUser } from '@/modules/core/domain/users/operations'
import { Roles } from '@/modules/core/helpers/mainConstants'
import { getCommentRoute } from '@/modules/core/helpers/routeHelper'
import { ServerInfo } from '@/modules/core/helpers/types'
import { getStreamFactory } from '@/modules/core/repositories/streams'
import { getUser, UserWithOptionalRole } from '@/modules/core/repositories/users'
import { getUserFactory, UserWithOptionalRole } from '@/modules/core/repositories/users'
import { getServerInfo } from '@/modules/core/services/generic'
import {
EmailTemplateParams,
@@ -164,7 +165,7 @@ function buildEmailTemplateParams(
*/
const mentionedInCommentHandlerFactory =
(deps: {
getUser: typeof getUser
getUser: GetUser
getStream: GetStream
getComment: GetComment
getServerInfo: typeof getServerInfo
@@ -221,7 +222,7 @@ const mentionedInCommentHandlerFactory =
*/
const handler: NotificationHandler<MentionedInCommentMessage> = async (...args) => {
const mentionedInCommentHandler = mentionedInCommentHandlerFactory({
getUser,
getUser: getUserFactory({ db }),
getStream: getStreamFactory({ db }),
getComment: getCommentFactory({ db }),
getServerInfo,
@@ -2,7 +2,6 @@ import {
AccessRequestType,
getPendingAccessRequestFactory
} from '@/modules/accessrequests/repositories'
import { getUser } from '@/modules/core/repositories/users'
import {
NewStreamAccessRequestMessage,
NotificationHandler
@@ -23,10 +22,12 @@ import { db } from '@/db/knex'
import { GetPendingAccessRequest } from '@/modules/accessrequests/domain/operations'
import { GetStream } from '@/modules/core/domain/streams/operations'
import { getStreamFactory } from '@/modules/core/repositories/streams'
import { GetUser } from '@/modules/core/domain/users/operations'
import { getUserFactory } from '@/modules/core/repositories/users'
type ValidateMessageDeps = {
getPendingAccessRequest: GetPendingAccessRequest
getUser: typeof getUser
getUser: GetUser
getStream: GetStream
}
@@ -150,7 +151,7 @@ const handler: NotificationHandler<NewStreamAccessRequestMessage> = (...args) =>
getServerInfo,
renderEmail,
sendEmail,
getUser,
getUser: getUserFactory({ db }),
getStream: getStreamFactory({ db }),
getPendingAccessRequest: getPendingAccessRequestFactory({ db })
})
@@ -1,11 +1,12 @@
import { db } from '@/db/knex'
import { GetStream } from '@/modules/core/domain/streams/operations'
import { GetUser } from '@/modules/core/domain/users/operations'
import {
buildAbsoluteFrontendUrlFromPath,
getStreamRoute
} from '@/modules/core/helpers/routeHelper'
import { getStreamFactory } from '@/modules/core/repositories/streams'
import { getUser } from '@/modules/core/repositories/users'
import { getUserFactory } from '@/modules/core/repositories/users'
import { getServerInfo } from '@/modules/core/services/generic'
import {
EmailTemplateParams,
@@ -19,7 +20,7 @@ import {
} from '@/modules/notifications/helpers/types'
type ValidateMessageDeps = {
getUser: typeof getUser
getUser: GetUser
getStream: GetStream
}
@@ -130,7 +131,7 @@ const handler: NotificationHandler<StreamAccessRequestApprovedMessage> = async (
getServerInfo,
renderEmail,
sendEmail,
getUser,
getUser: getUserFactory({ db }),
getStream: getStreamFactory({ db })
})
return streamAccessRequestApprovedHandler(...args)
@@ -41,7 +41,6 @@ import {
getUserPendingProjectInvitesFactory,
useProjectInviteAndNotifyFactory
} from '@/modules/serverinvites/services/projectInviteManagement'
import { getUser, getUsers } from '@/modules/core/repositories/users'
import { collectAndValidateCoreTargetsFactory } from '@/modules/serverinvites/services/coreResourceCollection'
import { buildCoreInviteEmailContentsFactory } from '@/modules/serverinvites/services/coreEmailContents'
import { getEventBus } from '@/modules/shared/services/eventBus'
@@ -83,10 +82,13 @@ import {
addOrUpdateStreamCollaboratorFactory,
validateStreamAccessFactory
} from '@/modules/core/services/streams/access'
import { getUserFactory, getUsersFactory } from '@/modules/core/repositories/users'
const saveActivity = saveActivityFactory({ db })
const validateStreamAccess = validateStreamAccessFactory({ authorizeResolver })
const getUser = getUserFactory({ db })
const getUsers = getUsersFactory({ db })
const addOrUpdateStreamCollaborator = addOrUpdateStreamCollaboratorFactory({
validateStreamAccess,
getUser,
@@ -117,7 +119,7 @@ const buildCollectAndValidateResourceTargets = () =>
const buildCreateAndSendServerOrProjectInvite = () =>
createAndSendInviteFactory({
findUserByTarget: findUserByTargetFactory(),
findUserByTarget: findUserByTargetFactory({ db }),
insertInviteAndDeleteOld: insertInviteAndDeleteOldFactory({ db }),
collectAndValidateResourceTargets: buildCollectAndValidateResourceTargets(),
buildInviteEmailContents: buildCoreInviteEmailContentsFactory({
@@ -127,7 +129,8 @@ const buildCreateAndSendServerOrProjectInvite = () =>
getEventBus().emit({
eventName,
payload
})
}),
getUser
})
export = {
@@ -377,9 +380,10 @@ export = {
buildInviteEmailContents: buildCoreInviteEmailContentsFactory({
getStream
}),
findUserByTarget: findUserByTargetFactory(),
findUserByTarget: findUserByTargetFactory({ db }),
findInvite: findInviteFactory({ db }),
markInviteUpdated: markInviteUpdatedfactory({ db })
markInviteUpdated: markInviteUpdatedfactory({ db }),
getUser
})
await resendInviteEmail({ inviteId })
@@ -1,7 +1,7 @@
import { knex, ServerInvites, Streams, Users } from '@/modules/core/dbSchema'
import {
getUserByEmail,
getUser,
getUserFactory,
UserWithOptionalRole
} from '@/modules/core/repositories/users'
import { resolveTarget, buildUserTarget } from '@/modules/serverinvites/helpers/core'
@@ -127,12 +127,12 @@ export const filterByResource = <Q extends Knex.QueryBuilder>(
* Try to find a user using the target value
*/
export const findUserByTargetFactory =
() =>
(deps: { db: Knex }) =>
(target: string): Promise<UserWithOptionalRole | null> => {
const { userEmail, userId } = resolveTarget(target)
return userEmail
? getUserByEmail(userEmail, { withRole: true })
: getUser(userId!, { withRole: true })
: getUserFactory(deps)(userId!, { withRole: true })
}
/**
@@ -8,7 +8,7 @@ import {
buildUserTarget,
ResolvedTargetData
} from '@/modules/serverinvites/helpers/core'
import { getUser, UserWithOptionalRole } from '@/modules/core/repositories/users'
import { UserWithOptionalRole } from '@/modules/core/repositories/users'
import {
FindInvite,
FindUserByTarget,
@@ -31,6 +31,7 @@ import {
} from '@/modules/serverinvites/domain/types'
import { ServerInfo } from '@/modules/core/helpers/types'
import { EventBusEmit } from '@/modules/shared/services/eventBus'
import { GetUser } from '@/modules/core/domain/users/operations'
const getFinalTargetData = (
target: string,
@@ -88,13 +89,15 @@ export const createAndSendInviteFactory =
insertInviteAndDeleteOld,
collectAndValidateResourceTargets,
buildInviteEmailContents,
emitEvent
emitEvent,
getUser
}: {
findUserByTarget: FindUserByTarget
insertInviteAndDeleteOld: InsertInviteAndDeleteOld
collectAndValidateResourceTargets: CollectAndValidateResourceTargets
buildInviteEmailContents: BuildInviteEmailContents
emitEvent: EventBusEmit
getUser: GetUser
}): CreateAndSendInvite =>
async (params, inviterResourceAccessLimits?) => {
const sendInviteEmail = sendInviteEmailFactory({ buildInviteEmailContents })
@@ -190,12 +193,14 @@ export const resendInviteEmailFactory =
buildInviteEmailContents,
findUserByTarget,
findInvite,
markInviteUpdated
markInviteUpdated,
getUser
}: {
buildInviteEmailContents: BuildInviteEmailContents
findUserByTarget: FindUserByTarget
findInvite: FindInvite
markInviteUpdated: MarkInviteUpdated
getUser: GetUser
}): ResendInviteEmail =>
async (params) => {
const sendInviteEmail = sendInviteEmailFactory({ buildInviteEmailContents })
@@ -45,15 +45,15 @@ import {
FindEmail,
ValidateAndCreateUserEmail
} from '@/modules/core/domain/userEmails/operations'
import { getUser } from '@/modules/core/repositories/users'
import { ServerInfo } from '@/modules/core/helpers/types'
import { getServerInfo } from '@/modules/core/services/generic'
import { GetUser } from '@/modules/core/domain/users/operations'
/**
* Convert the initial validation function to a finalization validation function so same logic can be reused
*/
export const convertToFinalizationValidation = (params: {
getUser: typeof getUser
getUser: GetUser
initialValidation: CollectAndValidateResourceTargets
serverInfo: ServerInfo
}): ValidateResourceInviteBeforeFinalization => {
@@ -196,7 +196,7 @@ type FinalizeResourceInviteFactoryDeps = {
validateAndCreateUserEmail: ValidateAndCreateUserEmail
collectAndValidateResourceTargets: CollectAndValidateResourceTargets
getServerInfo: typeof getServerInfo
getUser: typeof getUser
getUser: GetUser
}
export const finalizeResourceInviteFactory =
@@ -1,5 +1,6 @@
import { GetStream } from '@/modules/core/domain/streams/operations'
import { TokenResourceIdentifier } from '@/modules/core/domain/tokens/types'
import { GetUser, GetUsers } from '@/modules/core/domain/users/operations'
import {
MutationStreamInviteUseArgs,
ProjectInviteCreateInput,
@@ -9,7 +10,6 @@ import {
import { ContextResourceAccessRules } from '@/modules/core/helpers/token'
import { LimitedUserRecord } from '@/modules/core/helpers/types'
import { removePrivateFields } from '@/modules/core/helpers/userHelper'
import { getUser, getUsers } from '@/modules/core/repositories/users'
import {
ProjectInviteResourceType,
ServerInviteResourceType
@@ -151,7 +151,7 @@ export const useProjectInviteAndNotifyFactory =
* Invite users to be contributors for the specified project
*/
export const inviteUsersToProjectFactory =
(deps: { createAndSendInvite: CreateAndSendInvite; getUsers: typeof getUsers }) =>
(deps: { createAndSendInvite: CreateAndSendInvite; getUsers: GetUsers }) =>
async (
inviterId: string,
streamId: string,
@@ -207,10 +207,7 @@ function buildPendingStreamCollaboratorModel(
* Get all pending invitations to projects that this user has
*/
export const getUserPendingProjectInvitesFactory =
(deps: {
getUserResourceInvites: QueryAllUserResourceInvites
getUser: typeof getUser
}) =>
(deps: { getUserResourceInvites: QueryAllUserResourceInvites; getUser: GetUser }) =>
async (userId: string): Promise<PendingStreamCollaboratorGraphQLReturn[]> => {
if (!userId) return []
@@ -234,7 +231,7 @@ export const getUserPendingProjectInvitesFactory =
* Either the user ID or invite ID must be set
*/
export const getUserPendingProjectInviteFactory =
(deps: { findInvite: FindInvite; getUser: typeof getUser }) =>
(deps: { findInvite: FindInvite; getUser: GetUser }) =>
async (
projectId: string,
userId: MaybeNullOrUndefined<string>,
@@ -1,16 +1,16 @@
import { ServerInviteGraphQLReturnType } from '@/modules/core/helpers/graphTypes'
import { getUsers } from '@/modules/core/repositories/users'
import { resolveTarget } from '@/modules/serverinvites/helpers/core'
import { Nullable } from '@speckle/shared'
import { keyBy, uniq } from 'lodash'
import { FindServerInvite } from '@/modules/serverinvites/domain/operations'
import { GetInvitationTargetUsers } from '@/modules/serverinvites/services/operations'
import { GetUsers } from '@/modules/core/domain/users/operations'
/**
* Get all registered invitation target users keyed by their ID
*/
export const getInvitationTargetUsersFactory =
(deps: { getUsers: typeof getUsers }): GetInvitationTargetUsers =>
(deps: { getUsers: GetUsers }): GetInvitationTargetUsers =>
async ({ invites }) => {
const userIds = uniq(
invites
@@ -16,7 +16,6 @@ import {
MaybeNullOrUndefined,
Nullable
} from '@/modules/shared/helpers/typeHelper'
import { getUser } from '@/modules/core/repositories/users'
import { Optional, wait } from '@speckle/shared'
import { mixpanel } from '@/modules/shared/utils/mixpanel'
import * as Observability from '@speckle/shared/dist/commonjs/observability/index.js'
@@ -27,6 +26,7 @@ import { Merge } from 'type-fest'
import { resourceAccessRuleToIdentifier } from '@/modules/core/helpers/token'
import { delayGraphqlResponsesBy } from '@/modules/shared/helpers/envHelper'
import { subscriptionLogger } from '@/logging/logging'
import { GetUser } from '@/modules/core/domain/users/operations'
export const authMiddlewareCreator = (steps: AuthPipelineFunction[]) => {
const pipeline = authPipelineCreator(steps)
@@ -189,7 +189,7 @@ export async function buildContext({
* Adds a .mixpanel helper onto the req object that is already pre-identified with the active user's identity
*/
export const mixpanelTrackerHelperMiddlewareFactory =
(deps: { getUser: typeof getUser }): Handler =>
(deps: { getUser: GetUser }): Handler =>
async (req: Request, _res: Response, next: NextFunction) => {
const ctx = req.context
const user = ctx.userId ? await deps.getUser(ctx.userId) : null
@@ -55,13 +55,14 @@ import {
import { collectAndValidateCoreTargetsFactory } from '@/modules/serverinvites/services/coreResourceCollection'
import { buildCoreInviteEmailContentsFactory } from '@/modules/serverinvites/services/coreEmailContents'
import { getEventBus } from '@/modules/shared/services/eventBus'
import { getUsers } from '@/modules/core/repositories/users'
import { ProjectsEmitter } from '@/modules/core/events/projectsEmitter'
import { addStreamCreatedActivityFactory } from '@/modules/activitystream/services/streamActivity'
import { saveActivityFactory } from '@/modules/activitystream/repositories'
import { publish } from '@/modules/shared/utils/subscriptions'
import { addCommitCreatedActivityFactory } from '@/modules/activitystream/services/commitActivity'
import { getUserFactory, getUsersFactory } from '@/modules/core/repositories/users'
const getUsers = getUsersFactory({ db })
const markCommitStreamUpdated = markCommitStreamUpdatedFactory({ db })
const getObject = getObjectFactory({ db })
const createCommitByBranchId = createCommitByBranchIdFactory({
@@ -94,7 +95,7 @@ const createStream = legacyCreateStreamFactory({
createStreamReturnRecord: createStreamReturnRecordFactory({
inviteUsersToProject: inviteUsersToProjectFactory({
createAndSendInvite: createAndSendInviteFactory({
findUserByTarget: findUserByTargetFactory(),
findUserByTarget: findUserByTargetFactory({ db }),
insertInviteAndDeleteOld: insertInviteAndDeleteOldFactory({ db }),
collectAndValidateResourceTargets: collectAndValidateCoreTargetsFactory({
getStream
@@ -106,7 +107,8 @@ const createStream = legacyCreateStreamFactory({
getEventBus().emit({
eventName,
payload
})
}),
getUser: getUserFactory({ db })
}),
getUsers
}),
@@ -12,13 +12,11 @@ import { Webhook } from '@/modules/webhooks/domain/types'
import { SetValuesNullable } from '@speckle/shared'
import crs from 'crypto-random-string'
import { StreamWithOptionalRole } from '@/modules/core/repositories/streams'
import {
getUser as getUserFn,
UserWithOptionalRole
} from '@/modules/core/repositories/users'
import { Knex } from 'knex'
import { ServerInfo } from '@/modules/core/helpers/types'
import { GetStream } from '@/modules/core/domain/streams/operations'
import { UserWithOptionalRole } from '@/modules/core/domain/users/types'
import { GetUser } from '@/modules/core/domain/users/operations'
const MAX_STREAM_WEBHOOKS = 100
@@ -110,7 +108,7 @@ export const dispatchStreamEventFactory =
getServerInfo: typeof getServerInfoFn
getStream: GetStream
createWebhookEvent: CreateWebhookEvent
getUser: typeof getUserFn
getUser: GetUser
}) =>
async ({
streamId,
@@ -11,7 +11,7 @@ import {
createStreamFactory,
getStreamFactory
} from '@/modules/core/repositories/streams'
import { getUsers } from '@/modules/core/repositories/users'
import { getUserFactory, getUsersFactory } from '@/modules/core/repositories/users'
import {
createStreamReturnRecordFactory,
legacyCreateStreamFactory
@@ -38,6 +38,8 @@ const WEBHOOKS_EVENTS_TABLE = 'webhooks_events'
const WebhooksConfig = () => knex(WEBHOOKS_CONFIG_TABLE)
const randomId = () => crs({ length: 10 })
const getUsers = getUsersFactory({ db })
const getUser = getUserFactory({ db })
const addStreamCreatedActivity = addStreamCreatedActivityFactory({
saveActivity: saveActivityFactory({ db }),
publish
@@ -47,7 +49,7 @@ const createStream = legacyCreateStreamFactory({
createStreamReturnRecord: createStreamReturnRecordFactory({
inviteUsersToProject: inviteUsersToProjectFactory({
createAndSendInvite: createAndSendInviteFactory({
findUserByTarget: findUserByTargetFactory(),
findUserByTarget: findUserByTargetFactory({ db }),
insertInviteAndDeleteOld: insertInviteAndDeleteOldFactory({ db }),
collectAndValidateResourceTargets: collectAndValidateCoreTargetsFactory({
getStream
@@ -59,7 +61,8 @@ const createStream = legacyCreateStreamFactory({
getEventBus().emit({
eventName,
payload
})
}),
getUser
}),
getUsers
}),
@@ -30,7 +30,6 @@ const {
} = require('@/modules/webhooks/services/webhooks')
const { Users, Streams } = require('@/modules/core/dbSchema')
const { getServerInfo } = require('@/modules/core/services/generic')
const { getUser, getUsers } = require('@/modules/core/repositories/users')
const {
getStreamFactory,
createStreamFactory,
@@ -64,7 +63,10 @@ const {
} = require('@/modules/activitystream/services/streamActivity')
const { saveActivityFactory } = require('@/modules/activitystream/repositories')
const { publish } = require('@/modules/shared/utils/subscriptions')
const { getUserFactory, getUsersFactory } = require('@/modules/core/repositories/users')
const getUser = getUserFactory({ db })
const getUsers = getUsersFactory({ db })
const addStreamCreatedActivity = addStreamCreatedActivityFactory({
saveActivity: saveActivityFactory({ db }),
publish
@@ -78,7 +80,7 @@ const createStream = legacyCreateStreamFactory({
createStreamReturnRecord: createStreamReturnRecordFactory({
inviteUsersToProject: inviteUsersToProjectFactory({
createAndSendInvite: createAndSendInviteFactory({
findUserByTarget: findUserByTargetFactory(),
findUserByTarget: findUserByTargetFactory({ db }),
insertInviteAndDeleteOld: insertInviteAndDeleteOldFactory({ db }),
collectAndValidateResourceTargets: collectAndValidateCoreTargetsFactory({
getStream
@@ -90,7 +92,8 @@ const createStream = legacyCreateStreamFactory({
getEventBus().emit({
eventName,
payload
})
}),
getUser
}),
getUsers
}),
@@ -15,7 +15,6 @@ import {
getUserStreamsPageFactory,
getUserStreamsCountFactory
} from '@/modules/core/repositories/streams'
import { getUser, getUsers } from '@/modules/core/repositories/users'
import { InviteCreateValidationError } from '@/modules/serverinvites/errors'
import {
deleteAllResourceInvitesFactory,
@@ -149,7 +148,10 @@ import {
} from '@/modules/activitystream/services/streamActivity'
import { publish } from '@/modules/shared/utils/subscriptions'
import { updateStreamRoleAndNotifyFactory } from '@/modules/core/services/streams/management'
import { getUserFactory, getUsersFactory } from '@/modules/core/repositories/users'
const getUser = getUserFactory({ db })
const getUsers = getUsersFactory({ db })
const getStream = getStreamFactory({ db })
const requestNewEmailVerification = requestNewEmailVerificationFactory({
findEmail: findEmailFactory({ db }),
@@ -170,7 +172,7 @@ const buildCollectAndValidateResourceTargets = () =>
const buildCreateAndSendServerOrProjectInvite = () =>
createAndSendInviteFactory({
findUserByTarget: findUserByTargetFactory(),
findUserByTarget: findUserByTargetFactory({ db }),
insertInviteAndDeleteOld: insertInviteAndDeleteOldFactory({ db }),
collectAndValidateResourceTargets: buildCollectAndValidateResourceTargets(),
buildInviteEmailContents: buildCoreInviteEmailContentsFactory({
@@ -180,12 +182,13 @@ const buildCreateAndSendServerOrProjectInvite = () =>
getEventBus().emit({
eventName,
payload
})
}),
getUser
})
const buildCreateAndSendWorkspaceInvite = () =>
createAndSendInviteFactory({
findUserByTarget: findUserByTargetFactory(),
findUserByTarget: findUserByTargetFactory({ db }),
insertInviteAndDeleteOld: insertInviteAndDeleteOldFactory({ db }),
collectAndValidateResourceTargets: buildCollectAndValidateResourceTargets(),
buildInviteEmailContents: buildWorkspaceInviteEmailContentsFactory({
@@ -196,7 +199,8 @@ const buildCreateAndSendWorkspaceInvite = () =>
getEventBus().emit({
eventName,
payload
})
}),
getUser
})
const deleteStream = deleteStreamFactory({ db })
const saveActivity = saveActivityFactory({ db })
@@ -588,12 +592,13 @@ export = FF_WORKSPACES_MODULE_ENABLED
getStream,
getWorkspace: getWorkspaceFactory({ db })
}),
findUserByTarget: findUserByTargetFactory(),
findUserByTarget: findUserByTargetFactory({ db }),
findInvite: findInviteFactory({
db,
filterQuery: workspaceInviteValidityFilter
}),
markInviteUpdated: markInviteUpdatedfactory({ db })
markInviteUpdated: markInviteUpdatedfactory({ db }),
getUser
})
await resendInviteEmail({
@@ -9,7 +9,6 @@ import { getWorkspaceRoute } from '@/modules/core/helpers/routeHelper'
import { isResourceAllowed } from '@/modules/core/helpers/token'
import { UserRecord } from '@/modules/core/helpers/types'
import { removePrivateFields } from '@/modules/core/helpers/userHelper'
import { getUser } from '@/modules/core/repositories/users'
import {
ProjectInviteResourceType,
ServerInviteResourceType
@@ -72,6 +71,7 @@ import {
userEmailsCompliantWithWorkspaceDomains
} from '@/modules/workspaces/domain/logic'
import { GetStream } from '@/modules/core/domain/streams/operations'
import { GetUser } from '@/modules/core/domain/users/operations'
const isWorkspaceResourceTarget = (
target: InviteResourceTarget
@@ -381,7 +381,7 @@ function buildPendingWorkspaceCollaboratorModel(
export const getUserPendingWorkspaceInviteFactory =
(deps: {
findInvite: FindInvite
getUser: typeof getUser
getUser: GetUser
getWorkspaceBySlug: GetWorkspaceBySlug
}) =>
async (params: {
@@ -425,10 +425,7 @@ export const getUserPendingWorkspaceInviteFactory =
}
export const getUserPendingWorkspaceInvitesFactory =
(deps: {
getUserResourceInvites: QueryAllUserResourceInvites
getUser: typeof getUser
}) =>
(deps: { getUserResourceInvites: QueryAllUserResourceInvites; getUser: GetUser }) =>
async (userId: string): Promise<PendingWorkspaceCollaboratorGraphQLReturn[]> => {
if (!userId) return []
@@ -45,6 +45,7 @@ import {
WorkspaceRoles
} from '@speckle/shared'
import { getStreamFactory } from '@/modules/core/repositories/streams'
import { getUserFactory } from '@/modules/core/repositories/users'
export type BasicTestWorkspace = {
/**
@@ -208,8 +209,9 @@ export const createWorkspaceInviteDirectly = async (
inviterId: string
) => {
const getStream = getStreamFactory({ db })
const getUser = getUserFactory({ db })
const createAndSendInvite = createAndSendInviteFactory({
findUserByTarget: findUserByTargetFactory(),
findUserByTarget: findUserByTargetFactory({ db }),
insertInviteAndDeleteOld: insertInviteAndDeleteOldFactory({ db }),
collectAndValidateResourceTargets: collectAndValidateWorkspaceTargetsFactory({
getStream,
@@ -225,7 +227,8 @@ export const createWorkspaceInviteDirectly = async (
getEventBus().emit({
eventName,
payload
})
}),
getUser
})
const createInvite = createWorkspaceInviteFactory({
@@ -87,12 +87,12 @@ import {
validateStreamAccessFactory
} from '@/modules/core/services/streams/access'
import { authorizeResolver } from '@/modules/shared'
import { getUser } from '@/modules/core/repositories/users'
import {
addStreamInviteAcceptedActivityFactory,
addStreamPermissionsAddedActivityFactory
} from '@/modules/activitystream/services/streamActivity'
import { publish } from '@/modules/shared/utils/subscriptions'
import { getUserFactory } from '@/modules/core/repositories/users'
enum InviteByTarget {
Email = 'email',
@@ -105,6 +105,7 @@ const getStream = getStreamFactory({ db })
const saveActivity = saveActivityFactory({ db })
const validateStreamAccess = validateStreamAccessFactory({ authorizeResolver })
const getUser = getUserFactory({ db })
const addOrUpdateStreamCollaborator = addOrUpdateStreamCollaboratorFactory({
validateStreamAccess,
getUser,
+6 -3
View File
@@ -35,7 +35,6 @@ const {
buildCoreInviteEmailContentsFactory
} = require('@/modules/serverinvites/services/coreEmailContents')
const { getEventBus } = require('@/modules/shared/services/eventBus')
const { getUsers } = require('@/modules/core/repositories/users')
const { createBranchFactory } = require('@/modules/core/repositories/branches')
const { ProjectsEmitter } = require('@/modules/core/events/projectsEmitter')
const {
@@ -43,7 +42,10 @@ const {
} = require('@/modules/activitystream/services/streamActivity')
const { saveActivityFactory } = require('@/modules/activitystream/repositories')
const { publish } = require('@/modules/shared/utils/subscriptions')
const { getUsersFactory, getUserFactory } = require('@/modules/core/repositories/users')
const getUsers = getUsersFactory({ db })
const getUser = getUserFactory({ db })
const addStreamCreatedActivity = addStreamCreatedActivityFactory({
saveActivity: saveActivityFactory({ db }),
publish
@@ -53,7 +55,7 @@ const createStream = legacyCreateStreamFactory({
createStreamReturnRecord: createStreamReturnRecordFactory({
inviteUsersToProject: inviteUsersToProjectFactory({
createAndSendInvite: createAndSendInviteFactory({
findUserByTarget: findUserByTargetFactory(),
findUserByTarget: findUserByTargetFactory({ db }),
insertInviteAndDeleteOld: insertInviteAndDeleteOldFactory({ db }),
collectAndValidateResourceTargets: collectAndValidateCoreTargetsFactory({
getStream
@@ -65,7 +67,8 @@ const createStream = legacyCreateStreamFactory({
getEventBus().emit({
eventName,
payload
})
}),
getUser
}),
getUsers
}),
@@ -26,10 +26,12 @@ import {
} from '@/modules/serverinvites/domain/types'
import { EmailSendingServiceMock } from '@/test/mocks/global'
import { getStreamFactory } from '@/modules/core/repositories/streams'
import { getUserFactory } from '@/modules/core/repositories/users'
const getUser = getUserFactory({ db })
const getStream = getStreamFactory({ db })
const createAndSendInvite = createAndSendInviteFactory({
findUserByTarget: findUserByTargetFactory(),
findUserByTarget: findUserByTargetFactory({ db }),
insertInviteAndDeleteOld: insertInviteAndDeleteOldFactory({ db }),
collectAndValidateResourceTargets: collectAndValidateCoreTargetsFactory({
getStream
@@ -41,7 +43,8 @@ const createAndSendInvite = createAndSendInviteFactory({
getEventBus().emit({
eventName,
payload
})
}),
getUser
})
export const createServerInviteDirectly = async (
@@ -13,7 +13,7 @@ import {
getStreamFactory,
revokeStreamPermissionsFactory
} from '@/modules/core/repositories/streams'
import { getUsers } from '@/modules/core/repositories/users'
import { getUserFactory, getUsersFactory } from '@/modules/core/repositories/users'
import {
isStreamCollaboratorFactory,
removeStreamCollaboratorFactory,
@@ -39,6 +39,8 @@ import { BasicTestUser } from '@/test/authHelper'
import { ensureError } from '@speckle/shared'
import { omit } from 'lodash'
const getUsers = getUsersFactory({ db })
const getUser = getUserFactory({ db })
const addStreamCreatedActivity = addStreamCreatedActivityFactory({
saveActivity: saveActivityFactory({ db }),
publish
@@ -48,7 +50,7 @@ const createStream = legacyCreateStreamFactory({
createStreamReturnRecord: createStreamReturnRecordFactory({
inviteUsersToProject: inviteUsersToProjectFactory({
createAndSendInvite: createAndSendInviteFactory({
findUserByTarget: findUserByTargetFactory(),
findUserByTarget: findUserByTargetFactory({ db }),
insertInviteAndDeleteOld: insertInviteAndDeleteOldFactory({ db }),
collectAndValidateResourceTargets: collectAndValidateCoreTargetsFactory({
getStream
@@ -60,7 +62,8 @@ const createStream = legacyCreateStreamFactory({
getEventBus().emit({
eventName,
payload
})
}),
getUser
}),
getUsers
}),