diff --git a/server/controllers/aws.controller.js b/server/controllers/aws.controller.js index 6746ad84f2..249dbd2310 100644 --- a/server/controllers/aws.controller.js +++ b/server/controllers/aws.controller.js @@ -39,25 +39,37 @@ export function getObjectKey(url) { } return objectKey; } -// TODO: callback should be removed +// TODO: callbacks should be removed from deleteObjectsFromS3 and deleteObjectFromS3 export async function deleteObjectsFromS3(keyList, callback) { const objectsToDelete = keyList?.map((key) => ({ Key: key })); - if (!objectsToDelete.length) { - callback?.(); - return; - } + const sendResponse = (cb, err) => { + if (cb && err) { + callback(err); + } else if (cb) { + callback(); + } else if (!cb && err) { + console.error('Failed to delete objects from S3.'); + throw err; + } - const params = { - Bucket: process.env.S3_BUCKET, - Delete: { Objects: objectsToDelete } + return 'Objects successfully deleted from S3.'; }; - try { - const deleteResult = await s3Client.send(new DeleteObjectsCommand(params)); - callback?.(null, deleteResult); - } catch (error) { - callback?.(error); + if (objectsToDelete.length > 0) { + const params = { + Bucket: process.env.S3_BUCKET, + Delete: { Objects: objectsToDelete } + }; + + try { + await s3Client.send(new DeleteObjectsCommand(params)); + sendResponse(); + } catch (error) { + sendResponse(); + } + } else { + sendResponse(); } } diff --git a/server/controllers/project.controller/__test__/deleteProject.test.js b/server/controllers/project.controller/__test__/deleteProject.test.js index c1c28f9a03..fe812e4dd5 100644 --- a/server/controllers/project.controller/__test__/deleteProject.test.js +++ b/server/controllers/project.controller/__test__/deleteProject.test.js @@ -74,8 +74,8 @@ describe('project.controller', () => { await deleteProject(request, response); - expect(response.status).toHaveBeenCalledWith(200); expect(deleteObjectsFromS3).toHaveBeenCalled(); expect(project.remove).toHaveBeenCalled(); + expect(response.status).toHaveBeenCalledWith(200); }); }); diff --git a/server/controllers/project.controller/deleteProject.js b/server/controllers/project.controller/deleteProject.js index 19a8166eae..1b747cc028 100644 --- a/server/controllers/project.controller/deleteProject.js +++ b/server/controllers/project.controller/deleteProject.js @@ -56,17 +56,7 @@ export default async function deleteProject(req, res) { return; } - try { - await deleteFilesFromS3(project.files); - } catch (error) { - sendFailure( - new ProjectDeletionError('Failed to delete associated project files.', { - code: 500 - }) - ); - return; - } - + await deleteFilesFromS3(project.files); await project.remove(); res.status(200).end(); } catch (error) {