@@ -7,45 +7,42 @@ const ProjectDeletionError = createApplicationErrorClass(
7
7
'ProjectDeletionError'
8
8
) ;
9
9
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 &&
16
15
( 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
+ }
31
30
}
32
31
33
- export default function deleteProject ( req , res ) {
34
- function sendFailure ( error ) {
32
+ export default async function deleteProject ( req , res ) {
33
+ const sendFailure = ( error ) => {
35
34
res . status ( error . code ) . json ( { message : error . message } ) ;
36
- }
35
+ } ;
37
36
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 ) ;
45
39
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
+ ) ;
49
46
return ;
50
47
}
51
48
@@ -59,19 +56,20 @@ export default function deleteProject(req, res) {
59
56
return ;
60
57
}
61
58
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
+ }
69
69
70
- res . status ( 200 ) . end ( ) ;
71
- } ) ;
70
+ await project . remove ( ) ;
71
+ res . status ( 200 ) . end ( ) ;
72
+ } catch ( error ) {
73
+ sendFailure ( error ) ;
72
74
}
73
-
74
- return Project . findById ( req . params . project_id )
75
- . then ( handleProjectDeletion )
76
- . catch ( sendFailure ) ;
77
75
}
0 commit comments