fix(server/fileuploads): deprecated endpoint now uses postgres queue (#5410)

This commit is contained in:
Iain Sproat
2025-09-11 14:57:31 +01:00
committed by GitHub
parent 9aff8bafa2
commit 0afdaf5fc0
@@ -1,7 +1,13 @@
import { Router } from 'express'
import { insertNewUploadAndNotifyFactory } from '@/modules/fileuploads/services/management'
import {
insertNewUploadAndNotifyFactory,
insertNewUploadAndNotifyFactoryV2
} from '@/modules/fileuploads/services/management'
import { authMiddlewareCreator } from '@/modules/shared/middleware'
import { saveUploadFileFactory } from '@/modules/fileuploads/repositories/fileUploads'
import {
saveUploadFileFactory,
saveUploadFileFactoryV2
} from '@/modules/fileuploads/repositories/fileUploads'
import { db } from '@/db/knex'
import { streamWritePermissionsPipelineFactory } from '@/modules/shared/authz'
import { getStreamBranchByNameFactory } from '@/modules/core/repositories/branches'
@@ -14,6 +20,24 @@ import type { Nullable } from '@speckle/shared'
import { ensureError } from '@speckle/shared'
import { UploadRequestErrorMessage } from '@/modules/fileuploads/helpers/rest'
import { getEventBus } from '@/modules/shared/services/eventBus'
import { getFeatureFlags } from '@speckle/shared/environment'
import { BranchNotFoundError } from '@/modules/core/errors/branch'
import { fileImportQueues } from '@/modules/fileuploads/queues/fileimports'
import { pushJobToFileImporterFactory } from '@/modules/fileuploads/services/createFileImport'
import {
fileImportServiceShouldUsePrivateObjectsServerUrl,
getPrivateObjectsServerOrigin,
getServerOrigin
} from '@/modules/shared/helpers/envHelper'
import { createAppTokenFactory } from '@/modules/core/services/tokens'
import {
storeApiTokenFactory,
storeTokenResourceAccessDefinitionsFactory,
storeTokenScopesFactory,
storeUserServerAppTokenFactory
} from '@/modules/core/repositories/tokens'
const { FF_NEXT_GEN_FILE_IMPORTER_ENABLED } = getFeatureFlags()
export const fileuploadRouterFactory = (): Router => {
const processNewFileStream = processNewFileStreamFactory()
@@ -48,11 +72,37 @@ export const fileuploadRouterFactory = (): Router => {
const projectDb = await getProjectDbClient({ projectId })
const getStreamBranchByName = getStreamBranchByNameFactory({ db: projectDb })
const branch = await getStreamBranchByName(projectId, branchName)
if (!branch) {
throw new BranchNotFoundError('Branch {branchName} was not found', {
info: { branchName }
})
}
const insertNewUploadAndNotify = insertNewUploadAndNotifyFactory({
saveUploadFile: saveUploadFileFactory({ db: projectDb }),
emit: getEventBus().emit
})
const pushJobToFileImporter = pushJobToFileImporterFactory({
getServerOrigin: fileImportServiceShouldUsePrivateObjectsServerUrl()
? getPrivateObjectsServerOrigin
: getServerOrigin,
createAppToken: createAppTokenFactory({
storeApiToken: storeApiTokenFactory({ db }),
storeTokenScopes: storeTokenScopesFactory({ db }),
storeTokenResourceAccessDefinitions:
storeTokenResourceAccessDefinitionsFactory({ db }),
storeUserServerAppToken: storeUserServerAppTokenFactory({ db })
})
})
const insertNewUploadAndNotifyV2 = insertNewUploadAndNotifyFactoryV2({
queues: fileImportQueues,
pushJobToFileImporter,
saveUploadFile: saveUploadFileFactoryV2({ db: projectDb }),
emit: getEventBus().emit
})
const saveFileUploads = async ({
uploadResults
}: {
@@ -64,15 +114,19 @@ export const fileuploadRouterFactory = (): Router => {
}) => {
await Promise.all(
uploadResults.map(async (upload) => {
await insertNewUploadAndNotify({
await (FF_NEXT_GEN_FILE_IMPORTER_ENABLED
? insertNewUploadAndNotifyV2
: insertNewUploadAndNotify)({
fileId: upload.blobId,
streamId: projectId,
branchName: branch?.name || branchName,
streamId: projectId, //legacy
projectId,
branchName: branch.name || branchName, //legacy
userId,
fileName: upload.fileName,
fileType: upload.fileName?.split('.').pop() || '', //FIXME
fileSize: upload.fileSize,
modelId: branch?.id || null
modelName: branch.name || branchName,
modelId: branch.id
})
})
)