Files
speckle-server/packages/server/modules/fileuploads/services/resultHandler.ts
T
Gergő Jedlicska 2e86a723c6 feat(fileimport-service): add next gen file importer (#4697)
* feat(fileimport-service): add next gen file importer

* feat(fileimports): integrate server and fileimporter

* chore(dui3): remove leftover artifacts

* fix(server): test typing fixes

* fix(fileimports): test and pr comment fixes

* feat(fileimports: moare test fixes

* fix(fileimports): tests and yarn dedupe
2025-05-23 10:27:00 +02:00

84 lines
2.2 KiB
TypeScript

import { Logger } from '@/observability/logging'
import {
ProcessFileImportResult,
UpdateFileStatus
} from '@/modules/fileuploads/domain/operations'
import {
FileImportSubscriptions,
PublishSubscription
} from '@/modules/shared/utils/subscriptions'
import {
ProjectFileImportUpdatedMessageType,
ProjectPendingVersionsUpdatedMessageType
} from '@/test/graphql/generated/graphql'
import {
jobResultStatusToFileUploadStatus,
jobResultToConvertedMessage
} from '@/modules/fileuploads/helpers/convert'
import { ensureError } from '@speckle/shared'
type OnFileImportResultDeps = {
updateFileStatus: UpdateFileStatus
publish: PublishSubscription
logger: Logger
}
export const onFileImportResultFactory =
(deps: OnFileImportResultDeps): ProcessFileImportResult =>
async (params) => {
const { logger } = deps
const { jobId, jobResult } = params
logger.info('Processing result for file upload')
const status = jobResultStatusToFileUploadStatus(jobResult.status)
const convertedMessage = jobResultToConvertedMessage(jobResult)
let convertedCommitId = null
switch (jobResult.status) {
case 'error':
break
case 'success':
convertedCommitId = jobResult.result.versionId
}
let updatedFile
try {
updatedFile = await deps.updateFileStatus({
fileId: jobId,
status,
convertedMessage,
convertedCommitId
})
} catch (e) {
const err = ensureError(e)
logger.error(
{ err },
'Error updating imported file status in database. File ID: %s',
jobId
)
throw err
}
await deps.publish(FileImportSubscriptions.ProjectPendingVersionsUpdated, {
projectPendingVersionsUpdated: {
id: updatedFile.id,
type: ProjectPendingVersionsUpdatedMessageType.Updated,
version: updatedFile
},
projectId: updatedFile.streamId,
branchName: updatedFile.branchName
})
await deps.publish(FileImportSubscriptions.ProjectFileImportUpdated, {
projectFileImportUpdated: {
id: updatedFile.id,
type: ProjectFileImportUpdatedMessageType.Updated,
upload: updatedFile
},
projectId: updatedFile.streamId
})
logger.info('File upload status updated')
}