@@ -9,8 +9,11 @@ import { deleteObjectsFromS3, getObjectKey } from './aws.controller';
9
9
// be fixed in mongoose soon
10
10
// https://github.com/Automattic/mongoose/issues/4049
11
11
export function createFile ( req , res ) {
12
- Project . findByIdAndUpdate (
13
- req . params . project_id ,
12
+ Project . findOneAndUpdate (
13
+ {
14
+ _id : req . params . project_id ,
15
+ user : req . user . _id
16
+ } ,
14
17
{
15
18
$push : {
16
19
files : req . body
@@ -19,9 +22,9 @@ export function createFile(req, res) {
19
22
{
20
23
new : true
21
24
} , ( err , updatedProject ) => {
22
- if ( err ) {
25
+ if ( err || ! updatedProject ) {
23
26
console . log ( err ) ;
24
- res . json ( { success : false } ) ;
27
+ res . status ( 403 ) . send ( { success : false , message : 'Project does not exist, or user does not match owner.' } ) ;
25
28
return ;
26
29
}
27
30
const newFile = updatedProject . files [ updatedProject . files . length - 1 ] ;
@@ -39,7 +42,9 @@ export function createFile(req, res) {
39
42
}
40
43
41
44
function getAllDescendantIds ( files , nodeId ) {
42
- return files . find ( file => file . id === nodeId ) . children
45
+ const parentFile = files . find ( file => file . id === nodeId ) ;
46
+ if ( ! parentFile ) return [ ] ;
47
+ return parentFile . children
43
48
. reduce ( ( acc , childId ) => (
44
49
[ ...acc , childId , ...getAllDescendantIds ( files , childId ) ]
45
50
) , [ ] ) ;
@@ -75,12 +80,24 @@ function deleteChild(files, parentId, id) {
75
80
76
81
export function deleteFile ( req , res ) {
77
82
Project . findById ( req . params . project_id , ( err , project ) => {
83
+ if ( ! project ) {
84
+ res . status ( 404 ) . send ( { success : false , message : 'Project does not exist.' } ) ;
85
+ }
86
+ if ( ! project . user . equals ( req . user . _id ) ) {
87
+ res . status ( 403 ) . send ( { success : false , message : 'Session does not match owner of project.' } ) ;
88
+ return ;
89
+ }
90
+
91
+ // make sure file exists for project
92
+ const fileToDelete = project . files . find ( file => file . id === req . params . file_id ) ;
93
+ if ( ! fileToDelete ) {
94
+ res . status ( 404 ) . send ( { success : false , message : 'File does not exist in project.' } ) ;
95
+ return ;
96
+ }
97
+
78
98
const idsToDelete = getAllDescendantIds ( project . files , req . params . file_id ) ;
79
99
deleteMany ( project . files , [ req . params . file_id , ...idsToDelete ] ) ;
80
100
project . files = deleteChild ( project . files , req . query . parentId , req . params . file_id ) ;
81
- // project.files.id(req.params.file_id).remove();
82
- // const childrenArray = project.files.id(req.query.parentId).children;
83
- // project.files.id(req.query.parentId).children = childrenArray.filter(id => id !== req.params.file_id);
84
101
project . save ( ( innerErr ) => {
85
102
res . json ( project . files ) ;
86
103
} ) ;
0 commit comments