Skip to content
Merged
38 changes: 25 additions & 13 deletions server/controllers/aws.controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
});
});
12 changes: 1 addition & 11 deletions server/controllers/project.controller/deleteProject.js
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down