diff --git a/packages/server/modules/activitystream/services/commentActivity.ts b/packages/server/modules/activitystream/services/commentActivity.ts index 688cddcb9..e0c04d4a3 100644 --- a/packages/server/modules/activitystream/services/commentActivity.ts +++ b/packages/server/modules/activitystream/services/commentActivity.ts @@ -18,7 +18,7 @@ import { import { getAllBranchCommits, getCommitsAndTheirBranchIds, - getSpecificBranchCommits + getSpecificBranchCommitsFactory } from '@/modules/core/repositories/commits' import { getStreamObjects } from '@/modules/core/repositories/objects' import { @@ -68,7 +68,7 @@ export async function addCommentCreatedActivity(params: { getStreamObjects, getBranchLatestCommits: getBranchLatestCommitsFactory({ db }), getStreamBranchesByName: getStreamBranchesByNameFactory({ db }), - getSpecificBranchCommits, + getSpecificBranchCommits: getSpecificBranchCommitsFactory({ db }), getAllBranchCommits }) }) diff --git a/packages/server/modules/cli/commands/download/commit.ts b/packages/server/modules/cli/commands/download/commit.ts index 6d4df35ae..17d0af82e 100644 --- a/packages/server/modules/cli/commands/download/commit.ts +++ b/packages/server/modules/cli/commands/download/commit.ts @@ -21,7 +21,7 @@ import { } from '@/modules/core/services/commit/viewerResources' import { getAllBranchCommits, - getSpecificBranchCommits + getSpecificBranchCommitsFactory } from '@/modules/core/repositories/commits' import { getCommentFactory, @@ -90,7 +90,7 @@ const command: CommandModule< getStreamObjects, getBranchLatestCommits, getStreamBranchesByName: getStreamBranchesByNameFactory({ db }), - getSpecificBranchCommits, + getSpecificBranchCommits: getSpecificBranchCommitsFactory({ db }), getAllBranchCommits }) }) diff --git a/packages/server/modules/cli/commands/download/project.ts b/packages/server/modules/cli/commands/download/project.ts index 47135be06..bdbc16181 100644 --- a/packages/server/modules/cli/commands/download/project.ts +++ b/packages/server/modules/cli/commands/download/project.ts @@ -26,7 +26,7 @@ import { } from '@/modules/activitystream/services/commentActivity' import { getAllBranchCommits, - getSpecificBranchCommits + getSpecificBranchCommitsFactory } from '@/modules/core/repositories/commits' import { getViewerResourceGroupsFactory, @@ -87,7 +87,7 @@ const command: CommandModule< getStreamObjects, getBranchLatestCommits: getBranchLatestCommitsFactory({ db }), getStreamBranchesByName: getStreamBranchesByNameFactory({ db }), - getSpecificBranchCommits, + getSpecificBranchCommits: getSpecificBranchCommitsFactory({ db }), getAllBranchCommits }) }) diff --git a/packages/server/modules/comments/graph/resolvers/comments.ts b/packages/server/modules/comments/graph/resolvers/comments.ts index bba523d2c..cbd3977fa 100644 --- a/packages/server/modules/comments/graph/resolvers/comments.ts +++ b/packages/server/modules/comments/graph/resolvers/comments.ts @@ -88,7 +88,7 @@ import { ResourceIdentifier } from '@/modules/comments/domain/types' import { getAllBranchCommits, getCommitsAndTheirBranchIds, - getSpecificBranchCommits + getSpecificBranchCommitsFactory } from '@/modules/core/repositories/commits' import { getStreamObjects } from '@/modules/core/repositories/objects' import { adminOverrideEnabled } from '@/modules/shared/helpers/envHelper' @@ -178,7 +178,7 @@ const getViewerResourceItemsUngrouped = getViewerResourceItemsUngroupedFactory({ getStreamObjects, getBranchLatestCommits: getBranchLatestCommitsFactory({ db }), getStreamBranchesByName: getStreamBranchesByNameFactory({ db }), - getSpecificBranchCommits, + getSpecificBranchCommits: getSpecificBranchCommitsFactory({ db }), getAllBranchCommits }) }) diff --git a/packages/server/modules/core/domain/commits/operations.ts b/packages/server/modules/core/domain/commits/operations.ts index ea8824a3b..687b41e27 100644 --- a/packages/server/modules/core/domain/commits/operations.ts +++ b/packages/server/modules/core/domain/commits/operations.ts @@ -1,4 +1,7 @@ -import { CommitWithStreamBranchMetadata } from '@/modules/core/domain/commits/types' +import { + BranchCommit, + CommitWithStreamBranchMetadata +} from '@/modules/core/domain/commits/types' import { Optional } from '@speckle/shared' export type GetCommits = ( @@ -21,3 +24,10 @@ export type DeleteCommitAndNotify = ( streamId: string, userId: string ) => Promise + +export type GetSpecificBranchCommits = ( + pairs: { + branchId: string + commitId: string + }[] +) => Promise diff --git a/packages/server/modules/core/domain/commits/types.ts b/packages/server/modules/core/domain/commits/types.ts index 931d60578..f0dc3d5e5 100644 --- a/packages/server/modules/core/domain/commits/types.ts +++ b/packages/server/modules/core/domain/commits/types.ts @@ -4,6 +4,7 @@ export type Commit = CommitRecord export type BranchLatestCommit = Commit & { branchId: string } +export type BranchCommit = BranchLatestCommit export type CommitWithStreamBranchMetadata = Commit & { streamId: string diff --git a/packages/server/modules/core/graph/resolvers/models.ts b/packages/server/modules/core/graph/resolvers/models.ts index 1e71d4b4a..e39840bd6 100644 --- a/packages/server/modules/core/graph/resolvers/models.ts +++ b/packages/server/modules/core/graph/resolvers/models.ts @@ -42,7 +42,7 @@ import { CommitNotFoundError } from '@/modules/core/errors/commit' import { getStreamObjects } from '@/modules/core/repositories/objects' import { getAllBranchCommits, - getSpecificBranchCommits + getSpecificBranchCommitsFactory } from '@/modules/core/repositories/commits' import { db } from '@/db/knex' import { @@ -57,7 +57,7 @@ const getViewerResourceGroups = getViewerResourceGroupsFactory({ getStreamObjects, getBranchLatestCommits: getBranchLatestCommitsFactory({ db }), getStreamBranchesByName: getStreamBranchesByNameFactory({ db }), - getSpecificBranchCommits, + getSpecificBranchCommits: getSpecificBranchCommitsFactory({ db }), getAllBranchCommits }) diff --git a/packages/server/modules/core/loaders.ts b/packages/server/modules/core/loaders.ts index ee97e3aed..b285b2feb 100644 --- a/packages/server/modules/core/loaders.ts +++ b/packages/server/modules/core/loaders.ts @@ -25,7 +25,7 @@ import { ServerInviteRecord } from '@/modules/serverinvites/domain/types' import { getCommitBranches, getCommitsFactory, - getSpecificBranchCommits, + getSpecificBranchCommitsFactory, getStreamCommitCounts, getUserAuthoredCommitCounts, getUserStreamCommitCounts @@ -111,6 +111,7 @@ const getBranchLatestCommits = getBranchLatestCommitsFactory({ db }) const getStreamBranchCounts = getStreamBranchCountsFactory({ db }) const getBranchCommitCounts = getBranchCommitCountsFactory({ db }) const getCommits = getCommitsFactory({ db }) +const getSpecificBranchCommits = getSpecificBranchCommitsFactory({ db }) /** * TODO: Lazy load DataLoaders to reduce memory usage diff --git a/packages/server/modules/core/repositories/commits.ts b/packages/server/modules/core/repositories/commits.ts index 86f9868b7..b78164bd8 100644 --- a/packages/server/modules/core/repositories/commits.ts +++ b/packages/server/modules/core/repositories/commits.ts @@ -26,7 +26,8 @@ import { DeleteCommit, DeleteCommits, GetCommit, - GetCommits + GetCommits, + GetSpecificBranchCommits } from '@/modules/core/domain/commits/operations' const tables = { @@ -115,20 +116,6 @@ export const deleteCommitFactory = return !!delCount } -export async function getStreamCommitsWithBranchId(streamId: string) { - const baseQuery = Commits.knex() - .select>([ - ...Commits.cols, - BranchCommits.col.branchId - ]) - .innerJoin(StreamCommits.name, StreamCommits.col.commitId, Commits.col.id) - .innerJoin(BranchCommits.name, BranchCommits.col.commitId, Commits.col.id) - .where(StreamCommits.col.streamId, streamId) - .orderBy(Commits.col.createdAt) - - return await baseQuery -} - export function getBatchedStreamCommits( streamId: string, options?: Partial @@ -228,37 +215,38 @@ export async function getCommitsAndTheirBranchIds(commitIds: string[]) { .whereIn(Commits.col.id, commitIds) } -export async function getSpecificBranchCommits( - pairs: { branchId: string; commitId: string }[] -) { - if (!pairs?.length) return [] +export const getSpecificBranchCommitsFactory = + (deps: { db: Knex }): GetSpecificBranchCommits => + async (pairs: { branchId: string; commitId: string }[]) => { + if (!pairs?.length) return [] - const commitIds = uniq(pairs.map((p) => p.commitId)) - const branchIds = uniq(pairs.map((p) => p.branchId)) + const commitIds = uniq(pairs.map((p) => p.commitId)) + const branchIds = uniq(pairs.map((p) => p.branchId)) - const q = Commits.knex() - .select>([ - ...Commits.cols, - BranchCommits.col.branchId - ]) - .innerJoin(BranchCommits.name, BranchCommits.col.commitId, Commits.col.id) - .whereIn(Commits.col.id, commitIds) - .whereIn(BranchCommits.col.branchId, branchIds) + const q = tables + .commits(deps.db) + .select>([ + ...Commits.cols, + BranchCommits.col.branchId + ]) + .innerJoin(BranchCommits.name, BranchCommits.col.commitId, Commits.col.id) + .whereIn(Commits.col.id, commitIds) + .whereIn(BranchCommits.col.branchId, branchIds) - const queryResults = await q - const results: Array = [] + const queryResults = await q + const results: Array = [] - for (const pair of pairs) { - const commit = queryResults.find( - (r) => r.id === pair.commitId && r.branchId === pair.branchId - ) - if (commit) { - results.push(commit) + for (const pair of pairs) { + const commit = queryResults.find( + (r) => r.id === pair.commitId && r.branchId === pair.branchId + ) + if (commit) { + results.push(commit) + } } - } - return results -} + return results + } export type PaginatedBranchCommitsBaseParams = { branchId: string diff --git a/packages/server/modules/core/services/commit/retrieval.ts b/packages/server/modules/core/services/commit/retrieval.ts index ce8ffc69b..d5c1a1b15 100644 --- a/packages/server/modules/core/services/commit/retrieval.ts +++ b/packages/server/modules/core/services/commit/retrieval.ts @@ -6,7 +6,7 @@ import { import { getBranchCommitsTotalCount, getPaginatedBranchCommits as getPaginatedBranchCommitsDb, - getSpecificBranchCommits, + getSpecificBranchCommitsFactory, PaginatedBranchCommitsParams } from '@/modules/core/repositories/commits' import { @@ -14,6 +14,7 @@ import { getCommitsTotalCountByStreamId } from '@/modules/core/services/commits' import { BadRequestError } from '@/modules/shared/errors' +import { db } from '@/db/knex' export async function getPaginatedStreamCommits( streamId: string, @@ -45,6 +46,8 @@ export async function getPaginatedBranchCommits( 'Cannot return more than 100 items, please use pagination.' ) + const getSpecificBranchCommits = getSpecificBranchCommitsFactory({ db }) + // Load priority commits first let priorityCommitPromise: Optional> = undefined diff --git a/packages/server/modules/core/services/commit/viewerResources.ts b/packages/server/modules/core/services/commit/viewerResources.ts index 8a023b414..55be2ac16 100644 --- a/packages/server/modules/core/services/commit/viewerResources.ts +++ b/packages/server/modules/core/services/commit/viewerResources.ts @@ -10,6 +10,7 @@ import { GetBranchLatestCommits, GetStreamBranchesByName } from '@/modules/core/domain/branches/operations' +import { GetSpecificBranchCommits } from '@/modules/core/domain/commits/operations' import { ResourceIdentifier, ResourceIdentifierInput, @@ -21,8 +22,7 @@ import { import { CommitRecord } from '@/modules/core/helpers/types' import { getAllBranchCommits, - getCommitsAndTheirBranchIds, - getSpecificBranchCommits + getCommitsAndTheirBranchIds } from '@/modules/core/repositories/commits' import { getStreamObjects } from '@/modules/core/repositories/objects' import { Optional, SpeckleViewer } from '@speckle/shared' @@ -159,7 +159,7 @@ const getVersionResourceGroupsIncludingAllVersionsFactory = type GetVersionResourceGroupsLoadedVersionsOnlyDeps = { getStreamBranchesByName: GetStreamBranchesByName - getSpecificBranchCommits: typeof getSpecificBranchCommits + getSpecificBranchCommits: GetSpecificBranchCommits getBranchLatestCommits: GetBranchLatestCommits } diff --git a/packages/server/modules/cross-server-sync/index.ts b/packages/server/modules/cross-server-sync/index.ts index 2dd398fc4..0a8036624 100644 --- a/packages/server/modules/cross-server-sync/index.ts +++ b/packages/server/modules/cross-server-sync/index.ts @@ -27,7 +27,7 @@ import { } from '@/modules/core/repositories/branches' import { getAllBranchCommits, - getSpecificBranchCommits + getSpecificBranchCommitsFactory } from '@/modules/core/repositories/commits' import { getObject, getStreamObjects } from '@/modules/core/repositories/objects' import { @@ -67,7 +67,7 @@ const crossServerSyncModule: SpeckleModule = { getStreamObjects, getBranchLatestCommits: getBranchLatestCommitsFactory({ db }), getStreamBranchesByName: getStreamBranchesByNameFactory({ db }), - getSpecificBranchCommits, + getSpecificBranchCommits: getSpecificBranchCommitsFactory({ db }), getAllBranchCommits }) })