diff --git a/packages/server/modules/fileuploads/domain/operations.ts b/packages/server/modules/fileuploads/domain/operations.ts index b73a82d43..3a5daa115 100644 --- a/packages/server/modules/fileuploads/domain/operations.ts +++ b/packages/server/modules/fileuploads/domain/operations.ts @@ -1,6 +1,9 @@ import { FileUploadRecord } from '@/modules/fileuploads/helpers/types' +import { SaveUploadFileInput } from '@/modules/fileuploads/repositories/fileUploads' import { Optional } from '@speckle/shared' export type GetFileInfo = (args: { fileId: string }) => Promise> + +export type SaveUploadFile = (args: SaveUploadFileInput) => Promise diff --git a/packages/server/modules/fileuploads/index.js b/packages/server/modules/fileuploads/index.js index b3268625d..6f4e75999 100644 --- a/packages/server/modules/fileuploads/index.js +++ b/packages/server/modules/fileuploads/index.js @@ -1,6 +1,6 @@ /* istanbul ignore file */ const { - insertNewUploadAndNotify + insertNewUploadAndNotifyFactory } = require('@/modules/fileuploads/services/management') const request = require('request') const { streamWritePermissions } = require('@/modules/shared/authz') @@ -9,11 +9,20 @@ const { moduleLogger } = require('@/logging/logging') const { listenForImportUpdatesFactory } = require('@/modules/fileuploads/services/resultListener') -const { getFileInfoFactory } = require('@/modules/fileuploads/repositories/fileUploads') +const { + getFileInfoFactory, + saveUploadFileFactory +} = require('@/modules/fileuploads/repositories/fileUploads') const { db } = require('@/db/knex') const { publish } = require('@/modules/shared/utils/subscriptions') const { getStreamBranchByName } = require('@/modules/core/repositories/branches') +const insertNewUploadAndNotify = insertNewUploadAndNotifyFactory({ + getStreamBranchByName, + saveUploadFile: saveUploadFileFactory({ db }), + publish +}) + const saveFileUploads = async ({ userId, streamId, branchName, uploadResults }) => { await Promise.all( uploadResults.map(async (upload) => { diff --git a/packages/server/modules/fileuploads/repositories/fileUploads.ts b/packages/server/modules/fileuploads/repositories/fileUploads.ts index 6fdb973ff..e58114c70 100644 --- a/packages/server/modules/fileuploads/repositories/fileUploads.ts +++ b/packages/server/modules/fileuploads/repositories/fileUploads.ts @@ -1,5 +1,5 @@ import { Branches, FileUploads, knex } from '@/modules/core/dbSchema' -import { GetFileInfo } from '@/modules/fileuploads/domain/operations' +import { GetFileInfo, SaveUploadFile } from '@/modules/fileuploads/domain/operations' import { FileUploadConvertedStatus, FileUploadRecord @@ -50,28 +50,30 @@ export type SaveUploadFileInput = Pick< 'streamId' | 'branchName' | 'userId' | 'fileName' | 'fileType' | 'fileSize' > & { fileId: string } -export async function saveUploadFile({ - fileId, - streamId, - branchName, - userId, - fileName, - fileType, - fileSize -}: SaveUploadFileInput) { - const dbFile: Partial = { - id: fileId, +export const saveUploadFileFactory = + (deps: { db: Knex }): SaveUploadFile => + async ({ + fileId, streamId, branchName, userId, fileName, fileType, - fileSize, - uploadComplete: true + fileSize + }: SaveUploadFileInput) => { + const dbFile: Partial = { + id: fileId, + streamId, + branchName, + userId, + fileName, + fileType, + fileSize, + uploadComplete: true + } + const [newRecord] = await tables.fileUploads(deps.db).insert(dbFile, '*') + return newRecord as FileUploadRecord } - const [newRecord] = await FileUploads.knex().insert(dbFile, '*') - return newRecord as FileUploadRecord -} const getPendingUploadsBaseQuery = ( streamId: string, diff --git a/packages/server/modules/fileuploads/services/management.ts b/packages/server/modules/fileuploads/services/management.ts index 8809b9828..8f89472da 100644 --- a/packages/server/modules/fileuploads/services/management.ts +++ b/packages/server/modules/fileuploads/services/management.ts @@ -4,43 +4,50 @@ import { ProjectPendingVersionsUpdatedMessageType } from '@/modules/core/graph/generated/graphql' import { getStreamBranchByName } from '@/modules/core/repositories/branches' +import { SaveUploadFile } from '@/modules/fileuploads/domain/operations' +import { SaveUploadFileInput } from '@/modules/fileuploads/repositories/fileUploads' import { - saveUploadFile, - SaveUploadFileInput -} from '@/modules/fileuploads/repositories/fileUploads' -import { FileImportSubscriptions, publish } from '@/modules/shared/utils/subscriptions' + FileImportSubscriptions, + PublishSubscription +} from '@/modules/shared/utils/subscriptions' -export async function insertNewUploadAndNotify(upload: SaveUploadFileInput) { - const branch = await getStreamBranchByName(upload.streamId, upload.branchName) - const file = await saveUploadFile(upload) +export const insertNewUploadAndNotifyFactory = + (deps: { + getStreamBranchByName: typeof getStreamBranchByName + saveUploadFile: SaveUploadFile + publish: PublishSubscription + }) => + async (upload: SaveUploadFileInput) => { + const branch = await deps.getStreamBranchByName(upload.streamId, upload.branchName) + const file = await deps.saveUploadFile(upload) - if (!branch) { - await publish(FileImportSubscriptions.ProjectPendingModelsUpdated, { - projectPendingModelsUpdated: { + if (!branch) { + await deps.publish(FileImportSubscriptions.ProjectPendingModelsUpdated, { + projectPendingModelsUpdated: { + id: file.id, + type: ProjectPendingModelsUpdatedMessageType.Created, + model: file + }, + projectId: file.streamId + }) + } else { + await deps.publish(FileImportSubscriptions.ProjectPendingVersionsUpdated, { + projectPendingVersionsUpdated: { + id: file.id, + type: ProjectPendingVersionsUpdatedMessageType.Created, + version: file + }, + projectId: file.streamId, + branchName: file.branchName + }) + } + + await deps.publish(FileImportSubscriptions.ProjectFileImportUpdated, { + projectFileImportUpdated: { id: file.id, - type: ProjectPendingModelsUpdatedMessageType.Created, - model: file + type: ProjectFileImportUpdatedMessageType.Created, + upload: file }, projectId: file.streamId }) - } else { - await publish(FileImportSubscriptions.ProjectPendingVersionsUpdated, { - projectPendingVersionsUpdated: { - id: file.id, - type: ProjectPendingVersionsUpdatedMessageType.Created, - version: file - }, - projectId: file.streamId, - branchName: file.branchName - }) } - - await publish(FileImportSubscriptions.ProjectFileImportUpdated, { - projectFileImportUpdated: { - id: file.id, - type: ProjectFileImportUpdatedMessageType.Created, - upload: file - }, - projectId: file.streamId - }) -}