Skip to content

Commit 1f660d9

Browse files
committed
Restructure ClassesRouter as a class.
1 parent e21dafd commit 1f660d9

File tree

4 files changed

+107
-117
lines changed

4 files changed

+107
-117
lines changed

src/Routers/ClassesRouter.js

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
2+
import PromiseRouter from '../PromiseRouter';
3+
import rest from '../rest';
4+
5+
export class ClassesRouter {
6+
// Returns a promise that resolves to a {response} object.
7+
handleFind(req) {
8+
let body = Object.assign(req.body, req.query);
9+
let options = {};
10+
if (body.skip) {
11+
options.skip = Number(body.skip);
12+
}
13+
if (body.limit) {
14+
options.limit = Number(body.limit);
15+
}
16+
if (body.order) {
17+
options.order = String(body.order);
18+
}
19+
if (body.count) {
20+
options.count = true;
21+
}
22+
if (typeof body.keys == 'string') {
23+
options.keys = body.keys;
24+
}
25+
if (body.include) {
26+
options.include = String(body.include);
27+
}
28+
if (body.redirectClassNameForKey) {
29+
options.redirectClassNameForKey = String(body.redirectClassNameForKey);
30+
}
31+
if (typeof body.where === 'string') {
32+
body.where = JSON.parse(body.where);
33+
}
34+
return rest.find(req.config, req.auth, req.params.className, body.where, options)
35+
.then((response) => {
36+
if (response && response.results) {
37+
for (let result of response.results) {
38+
if (result.sessionToken) {
39+
result.sessionToken = req.info.sessionToken || result.sessionToken;
40+
}
41+
}
42+
}
43+
return { response: response };
44+
});
45+
}
46+
47+
// Returns a promise for a {response} object.
48+
handleGet(req) {
49+
return rest.find(req.config, req.auth, req.params.className, {objectId: req.params.objectId})
50+
.then((response) => {
51+
if (!response.results || response.results.length == 0) {
52+
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Object not found.');
53+
}
54+
return { response: response.results[0] };
55+
});
56+
}
57+
58+
handleCreate(req) {
59+
return rest.create(req.config, req.auth, req.params.className, req.body);
60+
}
61+
62+
handleUpdate(req) {
63+
return rest.update(req.config, req.auth, req.params.className, req.params.objectId, req.body)
64+
.then((response) => {
65+
return {response: response};
66+
});
67+
}
68+
69+
handleDelete(req) {
70+
return rest.del(req.config, req.auth, req.params.className, req.params.objectId)
71+
.then(() => {
72+
return {response: {}};
73+
});
74+
}
75+
76+
getExpressRouter() {
77+
var router = new PromiseRouter();
78+
router.route('GET', '/classes/:className', (req) => { return this.handleFind(req); });
79+
router.route('GET', '/classes/:className/:objectId', (req) => { return this.handleGet(req); });
80+
router.route('POST', '/classes/:className', (req) => { return this.handleCreate(req); });
81+
router.route('PUT', '/classes/:className/:objectId', (req) => { return this.handleUpdate(req); });
82+
router.route('DELETE', '/classes/:className/:objectId', (req) => { return this.handleDelete(req); });
83+
return router;
84+
}
85+
}
86+
87+
export default ClassesRouter;

src/classes.js

Lines changed: 0 additions & 101 deletions
This file was deleted.

src/index.js

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import { FilesController } from './Controllers/FilesController';
1818
import ParsePushAdapter from './Adapters/Push/ParsePushAdapter';
1919
import { PushController } from './Controllers/PushController';
2020

21+
import { ClassesRouter } from './Routers/ClassesRouter';
2122

2223
// Mutate the Parse object to add the Cloud Code handlers
2324
addParseCloud();
@@ -125,25 +126,28 @@ function ParseServer(args) {
125126
api.use(middlewares.allowMethodOverride);
126127
api.use(middlewares.handleParseHeaders);
127128

128-
var router = new PromiseRouter();
129-
130-
router.merge(require('./classes'));
131-
router.merge(require('./users'));
132-
router.merge(require('./sessions'));
133-
router.merge(require('./roles'));
134-
router.merge(require('./analytics'));
135-
router.merge(require('./installations'));
136-
router.merge(require('./functions'));
137-
router.merge(require('./schemas'));
129+
let routers = [
130+
new ClassesRouter().getExpressRouter(),
131+
require('./users'),
132+
require('./sessions'),
133+
require('./roles'),
134+
require('./analytics'),
135+
require('./installations'),
136+
require('./functions'),
137+
require('./schemas'),
138+
new PushController(pushAdapter).getExpressRouter()
139+
];
138140
if (process.env.PARSE_EXPERIMENTAL_CONFIG_ENABLED || process.env.TESTING) {
139-
router.merge(require('./global_config'));
141+
routers.push(require('./global_config'));
140142
}
141-
let pushController = new PushController(pushAdapter);
142-
router.merge(pushController.getExpressRouter());
143143

144-
batch.mountOnto(router);
144+
let appRouter = new PromiseRouter();
145+
routers.forEach((router) => {
146+
appRouter.merge(router);
147+
});
148+
batch.mountOnto(appRouter);
145149

146-
router.mountOnto(api);
150+
appRouter.mountOnto(api);
147151

148152
api.use(middlewares.handleParseErrors);
149153

src/users.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ function handleLogIn(req) {
9191
}
9292

9393
// Returns a promise that resolves to a {response} object.
94-
// TODO: share code with classes.js
94+
// TODO: share code with ClassesRouter.js
9595
function handleFind(req) {
9696
var options = {};
9797
if (req.body.skip) {

0 commit comments

Comments
 (0)