75 lines
2.4 KiB
TypeScript
75 lines
2.4 KiB
TypeScript
import { Router } from 'express'
|
|
import { authMiddlewareCreator } from '@/modules/shared/middleware'
|
|
import { db } from '@/db/knex'
|
|
import { streamWritePermissionsPipelineFactory } from '@/modules/shared/authz'
|
|
import { getStreamFactory } from '@/modules/core/repositories/streams'
|
|
import { getProjectDbClient } from '@/modules/multiregion/utils/dbSelector'
|
|
import { fileImportResultPayload } from '@speckle/shared/workers/fileimport'
|
|
import { onFileImportResultFactory } from '@/modules/fileuploads/services/resultHandler'
|
|
import {
|
|
getFileInfoFactoryV2,
|
|
updateFileUploadFactory
|
|
} from '@/modules/fileuploads/repositories/fileUploads'
|
|
import { validateRequest } from 'zod-express'
|
|
import { z } from 'zod'
|
|
import { getEventBus } from '@/modules/shared/services/eventBus'
|
|
import type { FileImportQueue } from '@/modules/fileuploads/domain/types'
|
|
import type { ObserveResult } from '@/modules/fileuploads/observability/metrics'
|
|
|
|
export const nextGenFileImporterRouterFactory = (params: {
|
|
queues: FileImportQueue[]
|
|
observeResult: ObserveResult | undefined
|
|
}): Router => {
|
|
const app = Router()
|
|
|
|
app.post(
|
|
'/api/projects/:streamId/fileimporter/jobs/:jobId/results',
|
|
authMiddlewareCreator(
|
|
streamWritePermissionsPipelineFactory({
|
|
getStream: getStreamFactory({ db })
|
|
})
|
|
),
|
|
validateRequest({
|
|
params: z.object({
|
|
streamId: z.string(),
|
|
jobId: z.string()
|
|
}),
|
|
body: fileImportResultPayload
|
|
}),
|
|
async (req, res) => {
|
|
const userId = req.context.userId
|
|
const projectId = req.params.streamId
|
|
const jobId = req.params.jobId
|
|
const logger = req.log.child({
|
|
projectId,
|
|
streamId: projectId, //legacy
|
|
userId,
|
|
jobId
|
|
})
|
|
|
|
const jobResult = req.body
|
|
|
|
const projectDb = await getProjectDbClient({ projectId })
|
|
|
|
const onFileImportResult = onFileImportResultFactory({
|
|
logger: logger.child({ fileUploadStatus: jobResult.status }),
|
|
updateFileUpload: updateFileUploadFactory({ db: projectDb }),
|
|
getFileInfo: getFileInfoFactoryV2({ db: projectDb }),
|
|
observeResult: params.observeResult,
|
|
eventEmit: getEventBus().emit
|
|
})
|
|
|
|
await onFileImportResult({
|
|
jobId,
|
|
jobResult
|
|
})
|
|
|
|
res.status(200).send({
|
|
message: 'Job result processed successfully'
|
|
})
|
|
return
|
|
}
|
|
)
|
|
return app
|
|
}
|