@@ -8,50 +8,47 @@ import { deleteObjectsFromS3, getObjectKey } from './aws.controller';
8
8
// Bug -> timestamps don't get created, but it seems like this will
9
9
// be fixed in mongoose soon
10
10
// https://github.com/Automattic/mongoose/issues/4049
11
- export function createFile ( req , res ) {
12
- Project . findOneAndUpdate (
13
- {
14
- _id : req . params . project_id ,
15
- user : req . user . _id
16
- } ,
17
- {
18
- $push : {
19
- files : req . body
20
- }
21
- } ,
22
- {
23
- new : true
24
- } ,
25
- ( err , updatedProject ) => {
26
- if ( err || ! updatedProject ) {
27
- console . log ( err ) ;
28
- res . status ( 403 ) . send ( {
29
- success : false ,
30
- message : 'Project does not exist, or user does not match owner.'
31
- } ) ;
32
- return ;
33
- }
34
- const newFile = updatedProject . files [ updatedProject . files . length - 1 ] ;
35
- updatedProject . files . id ( req . body . parentId ) . children . push ( newFile . id ) ;
36
- updatedProject . save ( ( innerErr , savedProject ) => {
37
- if ( innerErr ) {
38
- console . log ( innerErr ) ;
39
- res . json ( { success : false } ) ;
40
- return ;
11
+ export async function createFile ( req , res ) {
12
+ try {
13
+ const updatedProject = await Project . findOneAndUpdate (
14
+ {
15
+ _id : req . params . project_id ,
16
+ user : req . user . _id
17
+ } ,
18
+ {
19
+ $push : {
20
+ files : req . body
41
21
}
42
- savedProject . populate (
43
- { path : 'user' , select : 'username' } ,
44
- ( _ , populatedProject ) => {
45
- res . json ( {
46
- updatedFile :
47
- updatedProject . files [ updatedProject . files . length - 1 ] ,
48
- project : populatedProject
49
- } ) ;
50
- }
51
- ) ;
22
+ } ,
23
+ {
24
+ new : true
25
+ }
26
+ ) . exec ( ) ;
27
+
28
+ if ( ! updatedProject ) {
29
+ return res . status ( 403 ) . send ( {
30
+ success : false ,
31
+ message : 'Project does not exist, or user does not match owner.'
52
32
} ) ;
53
33
}
54
- ) ;
34
+
35
+ const newFile = updatedProject . files [ updatedProject . files . length - 1 ] ;
36
+ updatedProject . files . id ( req . body . parentId ) . children . push ( newFile . id ) ;
37
+
38
+ const savedProject = await updatedProject . save ( ) ;
39
+ const populatedProject = await savedProject . populate ( {
40
+ path : 'user' ,
41
+ select : 'username'
42
+ } ) ;
43
+
44
+ return res . json ( {
45
+ updatedFile : newFile ,
46
+ project : populatedProject
47
+ } ) ;
48
+ } catch ( err ) {
49
+ console . error ( err ) ;
50
+ return res . status ( 500 ) . json ( { success : false } ) ;
51
+ }
55
52
}
56
53
57
54
function getAllDescendantIds ( files , nodeId ) {
@@ -82,7 +79,7 @@ function deleteMany(files, ids) {
82
79
objectKeys . push ( objectKey ) ;
83
80
}
84
81
}
85
- files . id ( id ) . remove ( ) ;
82
+ files . id ( id ) . deleteOne ( ) ;
86
83
cb ( ) ;
87
84
} ,
88
85
( err ) => {
@@ -102,69 +99,88 @@ function deleteChild(files, parentId, id) {
102
99
}
103
100
104
101
export function deleteFile ( req , res ) {
105
- Project . findById ( req . params . project_id , ( err , project ) => {
106
- if ( ! project ) {
107
- res
108
- . status ( 404 )
109
- . send ( { success : false , message : 'Project does not exist.' } ) ;
110
- }
111
- if ( ! project . user . equals ( req . user . _id ) ) {
112
- res . status ( 403 ) . send ( {
113
- success : false ,
114
- message : 'Session does not match owner of project.'
115
- } ) ;
116
- return ;
117
- }
102
+ Project . findById ( req . params . project_id )
103
+ . then ( ( project ) => {
104
+ if ( ! project ) {
105
+ return res . status ( 404 ) . send ( {
106
+ success : false ,
107
+ message : 'Project does not exist.'
108
+ } ) ;
109
+ }
118
110
119
- // make sure file exists for project
120
- const fileToDelete = project . files . find (
121
- ( file ) => file . id === req . params . file_id
122
- ) ;
123
- if ( ! fileToDelete ) {
124
- res
125
- . status ( 404 )
126
- . send ( { success : false , message : 'File does not exist in project.' } ) ;
127
- return ;
128
- }
111
+ if ( ! project . user . equals ( req . user . _id ) ) {
112
+ return res . status ( 403 ) . send ( {
113
+ success : false ,
114
+ message : 'Session does not match owner of project.'
115
+ } ) ;
116
+ }
117
+
118
+ const fileToDelete = project . files . find (
119
+ ( file ) => file . id === req . params . file_id
120
+ ) ;
121
+
122
+ if ( ! fileToDelete ) {
123
+ return res . status ( 404 ) . send ( {
124
+ success : false ,
125
+ message : 'File does not exist in project.'
126
+ } ) ;
127
+ }
128
+
129
+ const idsToDelete = getAllDescendantIds (
130
+ project . files ,
131
+ req . params . file_id
132
+ ) ;
133
+ deleteMany ( project . files , [ req . params . file_id , ...idsToDelete ] ) ;
129
134
130
- const idsToDelete = getAllDescendantIds ( project . files , req . params . file_id ) ;
131
- deleteMany ( project . files , [ req . params . file_id , ...idsToDelete ] ) ;
132
- project . files = deleteChild (
133
- project . files ,
134
- req . query . parentId ,
135
- req . params . file_id
136
- ) ;
137
- project . save ( ( innerErr , savedProject ) => {
138
- res . json ( { project : savedProject } ) ;
135
+ project . files = deleteChild (
136
+ project . files ,
137
+ req . query . parentId ,
138
+ req . params . file_id
139
+ ) ;
140
+
141
+ return project . save ( ) . then ( ( savedProject ) => {
142
+ res . json ( { project : savedProject } ) ;
143
+ } ) ;
144
+ } )
145
+ . catch ( ( error ) => {
146
+ console . error ( error ) ;
147
+ res . status ( 500 ) . json ( { message : 'Failed to process deletion' } ) ;
139
148
} ) ;
140
- } ) ;
141
149
}
142
150
143
151
export function getFileContent ( req , res ) {
144
152
const projectId = req . params . project_id ;
145
- Project . findOne (
146
- { $or : [ { _id : projectId } , { slug : projectId } ] } ,
147
- ( err , project ) => {
148
- if ( err || project === null ) {
153
+
154
+ Project . findOne ( { $or : [ { _id : projectId } , { slug : projectId } ] } )
155
+ . then ( ( project ) => {
156
+ if ( ! project ) {
149
157
res . status ( 404 ) . send ( {
150
158
success : false ,
151
159
message : 'Project with that id does not exist.'
152
160
} ) ;
153
161
return ;
154
162
}
163
+
155
164
const filePath = req . params [ 0 ] ;
156
165
const resolvedFile = resolvePathToFile ( filePath , project . files ) ;
166
+
157
167
if ( ! resolvedFile ) {
158
168
res . status ( 404 ) . send ( {
159
169
success : false ,
160
170
message : 'File with that name and path does not exist.'
161
171
} ) ;
162
172
return ;
163
173
}
174
+
164
175
const contentType =
165
176
mime . getType ( resolvedFile . name ) || 'application/octet-stream' ;
166
177
res . set ( 'Content-Type' , contentType ) ;
167
178
res . send ( resolvedFile . content ) ;
168
- }
169
- ) ;
179
+ } )
180
+ . catch ( ( err ) => {
181
+ console . error ( err ) ;
182
+ res
183
+ . status ( 500 )
184
+ . send ( { success : false , message : 'Internal server error' } ) ;
185
+ } ) ;
170
186
}
0 commit comments