Skip to content

Commit cc358b8

Browse files
committed
remove callbacks and update relevant calls
1 parent 0fda27a commit cc358b8

File tree

8 files changed

+180
-175
lines changed

8 files changed

+180
-175
lines changed

server/controllers/collection.controller/removeCollection.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,12 @@ export default function createCollection(req, res) {
2121
return null;
2222
}
2323

24-
return collection.remove();
24+
return collection.deleteOne();
2525
}
2626

2727
function findCollection() {
2828
// Only returned if owner matches current user
29-
return Collection.findOne({ _id: collectionId, owner });
29+
return Collection.findOne({ _id: collectionId, owner }).exec();
3030
}
3131

3232
return findCollection()

server/controllers/collection.controller/removeProjectFromCollection.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ export default function removeProjectFromCollection(req, res) {
2626
const project = collection.items.find((p) => p.projectId === projectId);
2727

2828
if (project != null) {
29-
project.remove();
29+
project.deleteOne();
3030
return collection.save();
3131
}
3232

server/controllers/embed.controller.js

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,23 +10,35 @@ import { get404Sketch } from '../views/404Page';
1010

1111
export function serveProject(req, res) {
1212
const projectId = req.params.project_id;
13-
Project.findOne(
14-
{ $or: [{ _id: projectId }, { slug: projectId }] },
15-
(err, project) => {
16-
if (err || !project) {
13+
14+
Project.findOne({ $or: [{ _id: projectId }, { slug: projectId }] })
15+
.then((project) => {
16+
if (!project) {
1717
get404Sketch((html) => res.send(html));
1818
return;
1919
}
20-
// TODO this does not parse html
20+
2121
const { files } = project;
2222
const htmlFile = files.find((file) => file.name.match(/\.html$/i))
23-
.content;
23+
?.content;
24+
25+
if (!htmlFile) {
26+
get404Sketch((html) => res.send(html));
27+
return;
28+
}
29+
2430
const filesToInject = files.filter((file) =>
2531
file.name.match(/\.(js|css)$/i)
2632
);
33+
2734
injectMediaUrls(filesToInject, files, req.params.project_id);
2835

2936
jsdom.env(htmlFile, (innerErr, window) => {
37+
if (innerErr) {
38+
res.status(500).send('Error rendering project');
39+
return;
40+
}
41+
3042
const sketchDoc = window.document;
3143

3244
const base = sketchDoc.createElement('base');
@@ -42,8 +54,11 @@ export function serveProject(req, res) {
4254
res.setHeader('Cache-Control', 'public, max-age=0');
4355
res.send(serializeDocument(sketchDoc));
4456
});
45-
}
46-
);
57+
})
58+
.catch((err) => {
59+
console.error(err);
60+
get404Sketch((html) => res.send(html));
61+
});
4762
}
4863

4964
export default serveProject;

server/controllers/file.controller.js

Lines changed: 97 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -8,50 +8,47 @@ import { deleteObjectsFromS3, getObjectKey } from './aws.controller';
88
// Bug -> timestamps don't get created, but it seems like this will
99
// be fixed in mongoose soon
1010
// 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
4121
}
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.'
5232
});
5333
}
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+
}
5552
}
5653

5754
function getAllDescendantIds(files, nodeId) {
@@ -82,7 +79,7 @@ function deleteMany(files, ids) {
8279
objectKeys.push(objectKey);
8380
}
8481
}
85-
files.id(id).remove();
82+
files.id(id).deleteOne();
8683
cb();
8784
},
8885
(err) => {
@@ -102,69 +99,88 @@ function deleteChild(files, parentId, id) {
10299
}
103100

104101
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+
}
118110

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]);
129134

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' });
139148
});
140-
});
141149
}
142150

143151
export function getFileContent(req, res) {
144152
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) {
149157
res.status(404).send({
150158
success: false,
151159
message: 'Project with that id does not exist.'
152160
});
153161
return;
154162
}
163+
155164
const filePath = req.params[0];
156165
const resolvedFile = resolvePathToFile(filePath, project.files);
166+
157167
if (!resolvedFile) {
158168
res.status(404).send({
159169
success: false,
160170
message: 'File with that name and path does not exist.'
161171
});
162172
return;
163173
}
174+
164175
const contentType =
165176
mime.getType(resolvedFile.name) || 'application/octet-stream';
166177
res.set('Content-Type', contentType);
167178
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+
});
170186
}

server/controllers/project.controller.js

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ export async function updateProject(req, res) {
6868
const newFileIds = req.body.files.map((file) => file.id);
6969
const staleIds = oldFileIds.filter((id) => newFileIds.indexOf(id) === -1);
7070
staleIds.forEach((staleId) => {
71-
updatedProject.files.id(staleId).remove();
71+
updatedProject.files.id(staleId).deleteOne();
7272
});
7373
const savedProject = await updatedProject.save();
7474
res.json(savedProject);
@@ -101,13 +101,6 @@ export async function getProject(req, res) {
101101
return res.json(project);
102102
}
103103

104-
export function getProjectsForUserId(userId) {
105-
return Project.find({ user: userId })
106-
.sort('-createdAt')
107-
.select('name files id createdAt updatedAt')
108-
.exec();
109-
}
110-
111104
export async function getProjectAsset(req, res) {
112105
const projectId = req.params.project_id;
113106
const project = await Project.findOne({
@@ -146,7 +139,7 @@ export async function getProjectAsset(req, res) {
146139

147140
export async function getProjects(req, res) {
148141
if (req.user) {
149-
const projects = await getProjectsForUserId(req.user._id);
142+
const projects = await Project.getProjectsForUserId(req.user._id);
150143
res.json(projects);
151144
} else {
152145
// could just move this to client side

server/controllers/project.controller/deleteProject.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ export default async function deleteProject(req, res) {
6565
}
6666

6767
await deleteFilesFromS3(project.files);
68-
await project.remove();
68+
await project.deleteOne();
6969
res.status(200).end();
7070
} catch (error) {
7171
if (error.name === 'CastError' && error.kind === 'ObjectId') {

0 commit comments

Comments
 (0)