From 84130ccfa19e8b202fab9c08bf538cd37c6f6a2f Mon Sep 17 00:00:00 2001 From: Kristaps Fabians Geikins Date: Mon, 7 Oct 2024 18:55:33 +0300 Subject: [PATCH] chore(server): core IoC 27 - getObjectFactory --- .../modules/cli/commands/download/commit.ts | 6 +++++- .../modules/cli/commands/download/project.ts | 7 ++++++- .../comments/tests/comments.graph.spec.js | 3 ++- .../modules/comments/tests/comments.spec.js | 3 ++- .../modules/core/domain/objects/operations.ts | 6 ++++++ .../modules/core/graph/resolvers/commits.js | 3 ++- .../modules/core/graph/resolvers/objects.ts | 5 ++++- .../modules/core/graph/resolvers/versions.ts | 3 ++- .../modules/core/repositories/objects.ts | 20 +++++++++---------- .../core/services/commit/management.ts | 4 ++-- .../modules/core/tests/branches.spec.js | 3 ++- .../server/modules/core/tests/commits.spec.js | 3 ++- .../server/modules/core/tests/streams.spec.ts | 3 ++- .../server/modules/core/tests/users.spec.js | 3 ++- .../server/modules/cross-server-sync/index.ts | 10 +++++++--- .../cross-server-sync/services/commit.ts | 4 ++-- .../server/modules/stats/tests/stats.spec.ts | 3 ++- .../test/speckle-helpers/commitHelper.ts | 3 ++- 18 files changed, 62 insertions(+), 30 deletions(-) diff --git a/packages/server/modules/cli/commands/download/commit.ts b/packages/server/modules/cli/commands/download/commit.ts index 073b042d6..8698e840d 100644 --- a/packages/server/modules/cli/commands/download/commit.ts +++ b/packages/server/modules/cli/commands/download/commit.ts @@ -15,7 +15,10 @@ import { } from '@/modules/core/repositories/branches' import { getUser } from '@/modules/core/repositories/users' import { createObject } from '@/modules/core/services/objects' -import { getObject, getStreamObjectsFactory } from '@/modules/core/repositories/objects' +import { + getObjectFactory, + getStreamObjectsFactory +} from '@/modules/core/repositories/objects' import { createCommentReplyAndNotifyFactory, createCommentThreadAndNotifyFactory @@ -89,6 +92,7 @@ const command: CommandModule< } }, handler: async (argv) => { + const getObject = getObjectFactory({ db }) const getStreamObjects = getStreamObjectsFactory({ db }) const markCommentViewed = markCommentViewedFactory({ db }) const validateInputAttachments = validateInputAttachmentsFactory({ diff --git a/packages/server/modules/cli/commands/download/project.ts b/packages/server/modules/cli/commands/download/project.ts index 5308ed588..ac2561d2d 100644 --- a/packages/server/modules/cli/commands/download/project.ts +++ b/packages/server/modules/cli/commands/download/project.ts @@ -18,7 +18,10 @@ import { import { getUser } from '@/modules/core/repositories/users' import { createCommitByBranchIdFactory } from '@/modules/core/services/commit/management' import { createObject } from '@/modules/core/services/objects' -import { getObject, getStreamObjectsFactory } from '@/modules/core/repositories/objects' +import { + getObjectFactory, + getStreamObjectsFactory +} from '@/modules/core/repositories/objects' import { createCommentReplyAndNotifyFactory, createCommentThreadAndNotifyFactory @@ -87,6 +90,8 @@ const command: CommandModule< } }, handler: async (argv) => { + const getObject = getObjectFactory({ db }) + const getStreamObjects = getStreamObjectsFactory({ db }) const markCommentViewed = markCommentViewedFactory({ db }) const validateInputAttachments = validateInputAttachmentsFactory({ diff --git a/packages/server/modules/comments/tests/comments.graph.spec.js b/packages/server/modules/comments/tests/comments.graph.spec.js index f72f90089..58aa2d277 100644 --- a/packages/server/modules/comments/tests/comments.graph.spec.js +++ b/packages/server/modules/comments/tests/comments.graph.spec.js @@ -46,7 +46,6 @@ const { insertStreamCommitsFactory, insertBranchCommitsFactory } = require('@/modules/core/repositories/commits') -const { getObject } = require('@/modules/core/repositories/objects') const { getBranchByIdFactory, markCommitBranchUpdatedFactory, @@ -57,6 +56,7 @@ const { VersionsEmitter } = require('@/modules/core/events/versionsEmitter') const { addCommitCreatedActivity } = require('@/modules/activitystream/services/commitActivity') +const { getObjectFactory } = require('@/modules/core/repositories/objects') const streamResourceCheck = streamResourceCheckFactory({ checkStreamResourceAccess: checkStreamResourceAccessFactory({ db }) @@ -74,6 +74,7 @@ const createComment = createCommentFactory({ commentsEventsEmit: CommentsEmitter.emit }) +const getObject = getObjectFactory({ db }) const createCommitByBranchId = createCommitByBranchIdFactory({ createCommit: createCommitFactory({ db }), getObject, diff --git a/packages/server/modules/comments/tests/comments.spec.js b/packages/server/modules/comments/tests/comments.spec.js index fcbb3efa8..7ab7f3920 100644 --- a/packages/server/modules/comments/tests/comments.spec.js +++ b/packages/server/modules/comments/tests/comments.spec.js @@ -68,7 +68,6 @@ const { insertStreamCommitsFactory, insertBranchCommitsFactory } = require('@/modules/core/repositories/commits') -const { getObject } = require('@/modules/core/repositories/objects') const { getBranchByIdFactory, markCommitBranchUpdatedFactory, @@ -78,6 +77,7 @@ const { VersionsEmitter } = require('@/modules/core/events/versionsEmitter') const { addCommitCreatedActivity } = require('@/modules/activitystream/services/commitActivity') +const { getObjectFactory } = require('@/modules/core/repositories/objects') const streamResourceCheck = streamResourceCheckFactory({ checkStreamResourceAccess: checkStreamResourceAccessFactory({ db }) @@ -124,6 +124,7 @@ const getComments = getCommentsLegacyFactory({ db }) const getResourceCommentCount = getResourceCommentCountFactory({ db }) const getStreamCommentCount = getStreamCommentCountFactory({ db }) +const getObject = getObjectFactory({ db }) const createCommitByBranchId = createCommitByBranchIdFactory({ createCommit: createCommitFactory({ db }), getObject, diff --git a/packages/server/modules/core/domain/objects/operations.ts b/packages/server/modules/core/domain/objects/operations.ts index fdfdcf222..b72d7656f 100644 --- a/packages/server/modules/core/domain/objects/operations.ts +++ b/packages/server/modules/core/domain/objects/operations.ts @@ -1,6 +1,12 @@ import { SpeckleObject } from '@/modules/core/domain/objects/types' +import { Optional } from '@speckle/shared' export type GetStreamObjects = ( streamId: string, objectIds: string[] ) => Promise + +export type GetObject = ( + objectId: string, + streamId: string +) => Promise> diff --git a/packages/server/modules/core/graph/resolvers/commits.js b/packages/server/modules/core/graph/resolvers/commits.js index 061b220ef..3965bdf59 100644 --- a/packages/server/modules/core/graph/resolvers/commits.js +++ b/packages/server/modules/core/graph/resolvers/commits.js @@ -73,8 +73,8 @@ const { addCommitUpdatedActivity, addCommitMovedActivity } = require('@/modules/activitystream/services/commitActivity') -const { getObject } = require('@/modules/core/repositories/objects') const { VersionsEmitter } = require('@/modules/core/events/versionsEmitter') +const { getObjectFactory } = require('@/modules/core/repositories/objects') // subscription events const COMMIT_CREATED = CommitPubsubEvents.CommitCreated @@ -89,6 +89,7 @@ const deleteCommitAndNotify = deleteCommitAndNotifyFactory({ addCommitDeletedActivity }) +const getObject = getObjectFactory({ db }) const createCommitByBranchId = createCommitByBranchIdFactory({ createCommit: createCommitFactory({ db }), getObject, diff --git a/packages/server/modules/core/graph/resolvers/objects.ts b/packages/server/modules/core/graph/resolvers/objects.ts index 83e847a46..cb2bb37d7 100644 --- a/packages/server/modules/core/graph/resolvers/objects.ts +++ b/packages/server/modules/core/graph/resolvers/objects.ts @@ -8,7 +8,10 @@ import { import { Roles } from '@speckle/shared' import { Resolvers } from '@/modules/core/graph/generated/graphql' -import { getObject } from '@/modules/core/repositories/objects' +import { getObjectFactory } from '@/modules/core/repositories/objects' +import { db } from '@/db/knex' + +const getObject = getObjectFactory({ db }) const getStreamObject: NonNullable['object'] = async function object(parent, args) { diff --git a/packages/server/modules/core/graph/resolvers/versions.ts b/packages/server/modules/core/graph/resolvers/versions.ts index 28aea20ec..185e621f3 100644 --- a/packages/server/modules/core/graph/resolvers/versions.ts +++ b/packages/server/modules/core/graph/resolvers/versions.ts @@ -33,7 +33,6 @@ import { updateCommitFactory } from '@/modules/core/repositories/commits' import { db } from '@/db/knex' -import { getObject } from '@/modules/core/repositories/objects' import { createBranchFactory, getBranchByIdFactory, @@ -52,7 +51,9 @@ import { addCommitMovedActivity, addCommitUpdatedActivity } from '@/modules/activitystream/services/commitActivity' +import { getObjectFactory } from '@/modules/core/repositories/objects' +const getObject = getObjectFactory({ db }) const createCommitByBranchId = createCommitByBranchIdFactory({ createCommit: createCommitFactory({ db }), getObject, diff --git a/packages/server/modules/core/repositories/objects.ts b/packages/server/modules/core/repositories/objects.ts index 7cad4552f..cb1959f56 100644 --- a/packages/server/modules/core/repositories/objects.ts +++ b/packages/server/modules/core/repositories/objects.ts @@ -6,7 +6,7 @@ import { executeBatchedSelect } from '@/modules/shared/helpers/dbHelper' import { Knex } from 'knex' -import { GetStreamObjects } from '@/modules/core/domain/objects/operations' +import { GetObject, GetStreamObjects } from '@/modules/core/domain/objects/operations' const tables = { objects: (db: Knex) => db(Objects.name) @@ -25,15 +25,15 @@ export const getStreamObjectsFactory = return await q } -export async function getObject( - objectId: string, - streamId: string -): Promise> { - return await Objects.knex() - .where(Objects.col.id, objectId) - .andWhere(Objects.col.streamId, streamId) - .first() -} +export const getObjectFactory = + (deps: { db: Knex }): GetObject => + async (objectId: string, streamId: string): Promise> => { + return await tables + .objects(deps.db) + .where(Objects.col.id, objectId) + .andWhere(Objects.col.streamId, streamId) + .first() + } export function getBatchedStreamObjects( streamId: string, diff --git a/packages/server/modules/core/services/commit/management.ts b/packages/server/modules/core/services/commit/management.ts index 79f0c528c..fc19f949f 100644 --- a/packages/server/modules/core/services/commit/management.ts +++ b/packages/server/modules/core/services/commit/management.ts @@ -24,6 +24,7 @@ import { UpdateCommit, UpdateCommitAndNotify } from '@/modules/core/domain/commits/operations' +import { GetObject } from '@/modules/core/domain/objects/operations' import { CommitCreateError, CommitDeleteError, @@ -42,7 +43,6 @@ import { } from '@/modules/core/graph/generated/graphql' import { CommitRecord } from '@/modules/core/helpers/types' import { getCommitFactory } from '@/modules/core/repositories/commits' -import { getObject } from '@/modules/core/repositories/objects' import { getCommitStream, getStream, @@ -85,7 +85,7 @@ export async function markCommitReceivedAndNotify(params: { export const createCommitByBranchIdFactory = (deps: { createCommit: StoreCommit - getObject: typeof getObject + getObject: GetObject getBranchById: GetBranchById insertStreamCommits: InsertStreamCommits insertBranchCommits: InsertBranchCommits diff --git a/packages/server/modules/core/tests/branches.spec.js b/packages/server/modules/core/tests/branches.spec.js index 882757432..79a7df7fc 100644 --- a/packages/server/modules/core/tests/branches.spec.js +++ b/packages/server/modules/core/tests/branches.spec.js @@ -44,11 +44,11 @@ const { insertStreamCommitsFactory, insertBranchCommitsFactory } = require('@/modules/core/repositories/commits') -const { getObject } = require('@/modules/core/repositories/objects') const { VersionsEmitter } = require('@/modules/core/events/versionsEmitter') const { addCommitCreatedActivity } = require('@/modules/activitystream/services/commitActivity') +const { getObjectFactory } = require('@/modules/core/repositories/objects') const db = knex const Commits = () => knex('commits') @@ -69,6 +69,7 @@ const deleteBranchAndNotify = deleteBranchAndNotifyFactory({ deleteBranchById: deleteBranchByIdFactory({ db: knex }) }) +const getObject = getObjectFactory({ db: knex }) const createCommitByBranchId = createCommitByBranchIdFactory({ createCommit: createCommitFactory({ db }), getObject, diff --git a/packages/server/modules/core/tests/commits.spec.js b/packages/server/modules/core/tests/commits.spec.js index 717ad5506..90f6c7de9 100644 --- a/packages/server/modules/core/tests/commits.spec.js +++ b/packages/server/modules/core/tests/commits.spec.js @@ -54,8 +54,8 @@ const { addCommitCreatedActivity, addCommitUpdatedActivity } = require('@/modules/activitystream/services/commitActivity') -const { getObject } = require('@/modules/core/repositories/objects') const { VersionsEmitter } = require('@/modules/core/events/versionsEmitter') +const { getObjectFactory } = require('@/modules/core/repositories/objects') const createBranch = createBranchFactory({ db }) const createBranchAndNotify = createBranchAndNotifyFactory({ @@ -72,6 +72,7 @@ const deleteCommitAndNotify = deleteCommitAndNotifyFactory({ addCommitDeletedActivity }) +const getObject = getObjectFactory({ db }) const createCommitByBranchId = createCommitByBranchIdFactory({ createCommit: createCommitFactory({ db }), getObject, diff --git a/packages/server/modules/core/tests/streams.spec.ts b/packages/server/modules/core/tests/streams.spec.ts index f33a5f4ed..6634eadb4 100644 --- a/packages/server/modules/core/tests/streams.spec.ts +++ b/packages/server/modules/core/tests/streams.spec.ts @@ -70,9 +70,9 @@ import { insertBranchCommitsFactory, insertStreamCommitsFactory } from '@/modules/core/repositories/commits' -import { getObject } from '@/modules/core/repositories/objects' import { VersionsEmitter } from '@/modules/core/events/versionsEmitter' import { addCommitCreatedActivity } from '@/modules/activitystream/services/commitActivity' +import { getObjectFactory } from '@/modules/core/repositories/objects' const getStreamBranchByName = getStreamBranchByNameFactory({ db }) const createBranch = createBranchFactory({ db }) @@ -85,6 +85,7 @@ const deleteBranchAndNotify = deleteBranchAndNotifyFactory({ deleteBranchById: deleteBranchByIdFactory({ db }) }) +const getObject = getObjectFactory({ db }) const createCommitByBranchId = createCommitByBranchIdFactory({ createCommit: createCommitFactory({ db }), getObject, diff --git a/packages/server/modules/core/tests/users.spec.js b/packages/server/modules/core/tests/users.spec.js index 7ac676f0c..df8efee0c 100644 --- a/packages/server/modules/core/tests/users.spec.js +++ b/packages/server/modules/core/tests/users.spec.js @@ -52,16 +52,17 @@ const { createCommitByBranchIdFactory, createCommitByBranchNameFactory } = require('@/modules/core/services/commit/management') -const { getObject } = require('@/modules/core/repositories/objects') const { markCommitStreamUpdated } = require('@/modules/core/repositories/streams') const { VersionsEmitter } = require('@/modules/core/events/versionsEmitter') const { addCommitCreatedActivity } = require('@/modules/activitystream/services/commitActivity') +const { getObjectFactory } = require('@/modules/core/repositories/objects') const createBranch = createBranchFactory({ db }) const getCommit = getCommitFactory({ db }) +const getObject = getObjectFactory({ db }) const createCommitByBranchId = createCommitByBranchIdFactory({ createCommit: createCommitFactory({ db }), getObject, diff --git a/packages/server/modules/cross-server-sync/index.ts b/packages/server/modules/cross-server-sync/index.ts index 44903d248..645c45e82 100644 --- a/packages/server/modules/cross-server-sync/index.ts +++ b/packages/server/modules/cross-server-sync/index.ts @@ -36,7 +36,10 @@ import { insertBranchCommitsFactory, insertStreamCommitsFactory } from '@/modules/core/repositories/commits' -import { getObject, getStreamObjectsFactory } from '@/modules/core/repositories/objects' +import { + getObjectFactory, + getStreamObjectsFactory +} from '@/modules/core/repositories/objects' import { getOnboardingBaseStream, getStream, @@ -63,9 +66,10 @@ const crossServerSyncModule: SpeckleModule = { moduleLogger.info('🔄️ Init cross-server-sync module') }, finalize() { - const getStreamObjects = getStreamObjectsFactory({ db }) - crossServerSyncLogger.info('⬇️ Ensuring base onboarding stream asynchronously...') + + const getObject = getObjectFactory({ db }) + const getStreamObjects = getStreamObjectsFactory({ db }) const markCommentViewed = markCommentViewedFactory({ db }) const validateInputAttachments = validateInputAttachmentsFactory({ getBlobs: getBlobsFactory({ db }) diff --git a/packages/server/modules/cross-server-sync/services/commit.ts b/packages/server/modules/cross-server-sync/services/commit.ts index 5c8338173..671616b54 100644 --- a/packages/server/modules/cross-server-sync/services/commit.ts +++ b/packages/server/modules/cross-server-sync/services/commit.ts @@ -5,7 +5,6 @@ import { CreateCommentInput } from '@/test/graphql/generated/graphql' import { getStream, getStreamCollaborators } from '@/modules/core/repositories/streams' import { Roles, timeoutAt } from '@speckle/shared' import { createObject } from '@/modules/core/services/objects' -import { getObject } from '@/modules/core/repositories/objects' import ObjectLoader from '@speckle/objectloader' import { noop } from 'lodash' import { crossServerSyncLogger } from '@/logging/logging' @@ -31,6 +30,7 @@ import { } from '@/modules/comments/domain/operations' import { GetStreamBranchByName } from '@/modules/core/domain/branches/operations' import { CreateCommitByBranchId } from '@/modules/core/domain/commits/operations' +import { GetObject } from '@/modules/core/domain/objects/operations' type LocalResources = Awaited>> type LocalResourcesWithCommit = LocalResources & { newCommitId: string } @@ -489,7 +489,7 @@ const saveNewCommitFactory = type CreateNewObjectDeps = { createObject: typeof createObject - getObject: typeof getObject + getObject: GetObject } const createNewObjectFactory = diff --git a/packages/server/modules/stats/tests/stats.spec.ts b/packages/server/modules/stats/tests/stats.spec.ts index 0f3257d58..6ba34b13b 100644 --- a/packages/server/modules/stats/tests/stats.spec.ts +++ b/packages/server/modules/stats/tests/stats.spec.ts @@ -30,7 +30,6 @@ import { insertBranchCommitsFactory, insertStreamCommitsFactory } from '@/modules/core/repositories/commits' -import { getObject } from '@/modules/core/repositories/objects' import { getBranchByIdFactory, getStreamBranchByNameFactory, @@ -39,7 +38,9 @@ import { import { markCommitStreamUpdated } from '@/modules/core/repositories/streams' import { VersionsEmitter } from '@/modules/core/events/versionsEmitter' import { addCommitCreatedActivity } from '@/modules/activitystream/services/commitActivity' +import { getObjectFactory } from '@/modules/core/repositories/objects' +const getObject = getObjectFactory({ db }) const createCommitByBranchId = createCommitByBranchIdFactory({ createCommit: createCommitFactory({ db }), getObject, diff --git a/packages/server/test/speckle-helpers/commitHelper.ts b/packages/server/test/speckle-helpers/commitHelper.ts index 9cb434a4c..98cab64c3 100644 --- a/packages/server/test/speckle-helpers/commitHelper.ts +++ b/packages/server/test/speckle-helpers/commitHelper.ts @@ -11,7 +11,7 @@ import { insertBranchCommitsFactory, insertStreamCommitsFactory } from '@/modules/core/repositories/commits' -import { getObject } from '@/modules/core/repositories/objects' +import { getObjectFactory } from '@/modules/core/repositories/objects' import { markCommitStreamUpdated } from '@/modules/core/repositories/streams' import { createCommitByBranchIdFactory, @@ -21,6 +21,7 @@ import { createObject } from '@/modules/core/services/objects' import { BasicTestUser } from '@/test/authHelper' import { BasicTestStream } from '@/test/speckle-helpers/streamHelper' +const getObject = getObjectFactory({ db }) const createCommitByBranchId = createCommitByBranchIdFactory({ createCommit: createCommitFactory({ db }), getObject,