custom error handler can be removed as functionality is already provided by our existing middleware
This commit is contained in:
@@ -1,27 +0,0 @@
|
||||
import type { Request, Response } from 'express'
|
||||
import {
|
||||
NotFoundError,
|
||||
ResourceMismatch,
|
||||
BadRequestError
|
||||
} from '@/modules/shared/errors'
|
||||
import { ensureError } from '@speckle/shared'
|
||||
|
||||
type ErrorHandler = (
|
||||
req: Request,
|
||||
res: Response,
|
||||
callback: (req: Request, res: Response) => Promise<void>
|
||||
) => Promise<void>
|
||||
export const errorHandler: ErrorHandler = async (req, res, callback) => {
|
||||
try {
|
||||
await callback(req, res)
|
||||
} catch (err) {
|
||||
//TODO we can probably delegate to the default error handler, but need to verify where this is called and whether we can refactor the callbacks
|
||||
if (err instanceof NotFoundError) {
|
||||
res.status(404).send({ error: err.message })
|
||||
} else if (err instanceof ResourceMismatch || err instanceof BadRequestError) {
|
||||
res.status(400).send({ error: err.message })
|
||||
} else {
|
||||
res.status(500).send({ error: ensureError(err, 'Unknown error').message })
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -32,7 +32,6 @@ import {
|
||||
import { getProjectDbClient } from '@/modules/multiregion/utils/dbSelector'
|
||||
import { getStreamFactory } from '@/modules/core/repositories/streams'
|
||||
import { ensureError } from '@speckle/shared'
|
||||
import { errorHandler } from '@/modules/blobstorage/rest/errorHandler'
|
||||
import { processNewFileStreamFactory } from '@/modules/blobstorage/services/streams'
|
||||
|
||||
export const blobStorageRouterFactory = (): Router => {
|
||||
@@ -135,32 +134,30 @@ export const blobStorageRouterFactory = (): Router => {
|
||||
allowAnonymousUsersOnPublicStreams
|
||||
]),
|
||||
async (req, res) => {
|
||||
errorHandler(req, res, async (req, res) => {
|
||||
const streamId = req.params.streamId
|
||||
const [projectDb, projectStorage] = await Promise.all([
|
||||
getProjectDbClient({ projectId: streamId }),
|
||||
getProjectObjectStorage({ projectId: streamId })
|
||||
])
|
||||
const streamId = req.params.streamId
|
||||
const [projectDb, projectStorage] = await Promise.all([
|
||||
getProjectDbClient({ projectId: streamId }),
|
||||
getProjectObjectStorage({ projectId: streamId })
|
||||
])
|
||||
|
||||
const getBlobMetadata = getBlobMetadataFactory({ db: projectDb })
|
||||
const getFileStream = getFileStreamFactory({ getBlobMetadata })
|
||||
const getObjectStream = getObjectStreamFactory({ storage: projectStorage })
|
||||
const getBlobMetadata = getBlobMetadataFactory({ db: projectDb })
|
||||
const getFileStream = getFileStreamFactory({ getBlobMetadata })
|
||||
const getObjectStream = getObjectStreamFactory({ storage: projectStorage })
|
||||
|
||||
const { fileName } = await getBlobMetadata({
|
||||
streamId: req.params.streamId,
|
||||
blobId: req.params.blobId
|
||||
})
|
||||
const fileStream = await getFileStream({
|
||||
getObjectStream,
|
||||
streamId: req.params.streamId,
|
||||
blobId: req.params.blobId
|
||||
})
|
||||
res.writeHead(200, {
|
||||
'Content-Type': 'application/octet-stream',
|
||||
'Content-Disposition': `attachment; filename="${fileName}"`
|
||||
})
|
||||
fileStream.pipe(res)
|
||||
const { fileName } = await getBlobMetadata({
|
||||
streamId: req.params.streamId,
|
||||
blobId: req.params.blobId
|
||||
})
|
||||
const fileStream = await getFileStream({
|
||||
getObjectStream,
|
||||
streamId: req.params.streamId,
|
||||
blobId: req.params.blobId
|
||||
})
|
||||
res.writeHead(200, {
|
||||
'Content-Type': 'application/octet-stream',
|
||||
'Content-Disposition': `attachment; filename="${fileName}"`
|
||||
})
|
||||
fileStream.pipe(res)
|
||||
}
|
||||
)
|
||||
|
||||
@@ -168,27 +165,25 @@ export const blobStorageRouterFactory = (): Router => {
|
||||
'/api/stream/:streamId/blob/:blobId',
|
||||
authMiddlewareCreator(createStreamReadPermissions()),
|
||||
async (req, res) => {
|
||||
errorHandler(req, res, async (req, res) => {
|
||||
const streamId = req.params.streamId
|
||||
const [projectDb, projectStorage] = await Promise.all([
|
||||
getProjectDbClient({ projectId: streamId }),
|
||||
getProjectObjectStorage({ projectId: streamId })
|
||||
])
|
||||
const streamId = req.params.streamId
|
||||
const [projectDb, projectStorage] = await Promise.all([
|
||||
getProjectDbClient({ projectId: streamId }),
|
||||
getProjectObjectStorage({ projectId: streamId })
|
||||
])
|
||||
|
||||
const getBlobMetadata = getBlobMetadataFactory({ db: projectDb })
|
||||
const deleteBlob = fullyDeleteBlobFactory({
|
||||
getBlobMetadata,
|
||||
deleteBlob: deleteBlobFactory({ db: projectDb })
|
||||
})
|
||||
const deleteObject = deleteObjectFactory({ storage: projectStorage })
|
||||
|
||||
await deleteBlob({
|
||||
streamId: req.params.streamId,
|
||||
blobId: req.params.blobId,
|
||||
deleteObject
|
||||
})
|
||||
res.status(204).send()
|
||||
const getBlobMetadata = getBlobMetadataFactory({ db: projectDb })
|
||||
const deleteBlob = fullyDeleteBlobFactory({
|
||||
getBlobMetadata,
|
||||
deleteBlob: deleteBlobFactory({ db: projectDb })
|
||||
})
|
||||
const deleteObject = deleteObjectFactory({ storage: projectStorage })
|
||||
|
||||
await deleteBlob({
|
||||
streamId: req.params.streamId,
|
||||
blobId: req.params.blobId,
|
||||
deleteObject
|
||||
})
|
||||
res.status(204).send()
|
||||
}
|
||||
)
|
||||
|
||||
@@ -205,19 +200,18 @@ export const blobStorageRouterFactory = (): Router => {
|
||||
const getBlobMetadataCollection = getBlobMetadataCollectionFactory({
|
||||
db: projectDb
|
||||
})
|
||||
errorHandler(req, res, async (req, res) => {
|
||||
const blobMetadataCollection = await getBlobMetadataCollection({
|
||||
streamId: req.params.streamId,
|
||||
query: fileName as string
|
||||
})
|
||||
|
||||
res.status(200).send(blobMetadataCollection)
|
||||
const blobMetadataCollection = await getBlobMetadataCollection({
|
||||
streamId: req.params.streamId,
|
||||
query: fileName as string
|
||||
})
|
||||
|
||||
return res.status(200).send(blobMetadataCollection)
|
||||
}
|
||||
)
|
||||
|
||||
app.delete('/api/stream/:streamId/blobs', async (_req, res) => {
|
||||
res.status(501).send('This method is not implemented yet.')
|
||||
return res.status(501).send('This method is not implemented yet.')
|
||||
})
|
||||
|
||||
return app
|
||||
|
||||
Reference in New Issue
Block a user