Skip to content

Commit 0c30f11

Browse files
committed
refactor portions related to deleting in aws and project controllers
1 parent 92c252f commit 0c30f11

File tree

2 files changed

+67
-66
lines changed

2 files changed

+67
-66
lines changed

server/controllers/aws.controller.js

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -43,33 +43,36 @@ export function getObjectKey(url) {
4343
export async function deleteObjectsFromS3(keyList, callback) {
4444
const objectsToDelete = keyList?.map((key) => ({ Key: key }));
4545

46-
if (objectsToDelete.length > 0) {
47-
const params = {
48-
Bucket: process.env.S3_BUCKET,
49-
Delete: { Objects: objectsToDelete }
50-
};
46+
if (!objectsToDelete.length) {
47+
callback?.();
48+
return;
49+
}
5150

52-
try {
53-
await s3Client.send(new DeleteObjectsCommand(params));
54-
if (callback) {
55-
callback();
56-
}
57-
} catch (error) {
58-
console.error('Error deleting objects from S3: ', error);
59-
if (callback) {
60-
callback(error);
61-
}
62-
}
63-
} else if (callback) {
64-
callback();
51+
const params = {
52+
Bucket: process.env.S3_BUCKET,
53+
Delete: { Objects: objectsToDelete }
54+
};
55+
56+
try {
57+
const deleteResult = await s3Client.send(new DeleteObjectsCommand(params));
58+
callback?.(null, deleteResult);
59+
} catch (error) {
60+
callback?.(error);
6561
}
6662
}
6763

6864
export function deleteObjectFromS3(req, res) {
6965
const { objectKey, userId } = req.params;
7066
const fullObjectKey = userId ? `${userId}/${objectKey}` : objectKey;
71-
deleteObjectsFromS3([fullObjectKey], () => {
72-
res.json({ success: true });
67+
68+
deleteObjectsFromS3([fullObjectKey], (error, result) => {
69+
if (error) {
70+
return res
71+
.status(500)
72+
.json({ error: 'Failed to delete object from s3.' });
73+
}
74+
75+
return res.json({ success: true, message: 'Object deleted successfully.' });
7376
});
7477
}
7578

server/controllers/project.controller/deleteProject.js

Lines changed: 44 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -7,45 +7,42 @@ const ProjectDeletionError = createApplicationErrorClass(
77
'ProjectDeletionError'
88
);
99

10-
function deleteFilesFromS3(files) {
11-
deleteObjectsFromS3(
12-
files
13-
.filter((file) => {
14-
if (
15-
file.url &&
10+
async function deleteFilesFromS3(files) {
11+
const filteredFiles = files
12+
.filter((file) => {
13+
const isValidFile =
14+
(file.url &&
1615
(file.url.includes(process.env.S3_BUCKET_URL_BASE) ||
17-
file.url.includes(process.env.S3_BUCKET))
18-
) {
19-
if (
20-
!process.env.S3_DATE ||
21-
(process.env.S3_DATE &&
22-
isBefore(new Date(process.env.S3_DATE), new Date(file.createdAt)))
23-
) {
24-
return true;
25-
}
26-
}
27-
return false;
28-
})
29-
.map((file) => getObjectKey(file.url))
30-
);
16+
file.url.includes(process.env.S3_BUCKET)) &&
17+
!process.env.S3_DATE) ||
18+
(process.env.S3_DATE &&
19+
isBefore(new Date(process.env.S3_DATE), new Date(file.createdAt)));
20+
21+
return isValidFile;
22+
})
23+
.map((file) => getObjectKey(file.url));
24+
25+
try {
26+
await deleteObjectsFromS3(filteredFiles);
27+
} catch (error) {
28+
console.error('Failed to delete files from S3:', error);
29+
}
3130
}
3231

33-
export default function deleteProject(req, res) {
34-
function sendFailure(error) {
32+
export default async function deleteProject(req, res) {
33+
const sendFailure = (error) => {
3534
res.status(error.code).json({ message: error.message });
36-
}
35+
};
3736

38-
function sendProjectNotFound() {
39-
sendFailure(
40-
new ProjectDeletionError('Project with that id does not exist', {
41-
code: 404
42-
})
43-
);
44-
}
37+
try {
38+
const project = await Project.findById(req.params.project_id);
4539

46-
function handleProjectDeletion(project) {
47-
if (project == null) {
48-
sendProjectNotFound();
40+
if (!project) {
41+
sendFailure(
42+
new ProjectDeletionError('Project with that id does not exist', {
43+
code: 404
44+
})
45+
);
4946
return;
5047
}
5148

@@ -59,19 +56,20 @@ export default function deleteProject(req, res) {
5956
return;
6057
}
6158

62-
deleteFilesFromS3(project.files);
63-
64-
project.remove((removeProjectError) => {
65-
if (removeProjectError) {
66-
sendProjectNotFound();
67-
return;
68-
}
59+
try {
60+
await deleteFilesFromS3(project.files);
61+
} catch (error) {
62+
sendFailure(
63+
new ProjectDeletionError('Failed to delete associated project files.', {
64+
code: 500
65+
})
66+
);
67+
return;
68+
}
6969

70-
res.status(200).end();
71-
});
70+
await project.remove();
71+
res.status(200).end();
72+
} catch (error) {
73+
sendFailure(error);
7274
}
73-
74-
return Project.findById(req.params.project_id)
75-
.then(handleProjectDeletion)
76-
.catch(sendFailure);
7775
}

0 commit comments

Comments
 (0)