Skip to content

Commit fb42ac8

Browse files
committed
Add comments as per JSDOC3
1 parent fb6c0a7 commit fb42ac8

File tree

7 files changed

+89
-5
lines changed

7 files changed

+89
-5
lines changed

index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ mongoose.connection.on('error', () => {
1414

1515
const debug = require('debug')('express-mongoose-es6-rest-api:index');
1616

17-
// listen on port port
17+
// listen on port config.port
1818
app.listen(config.port, () => {
1919
debug(`started server on port ${config.port} (${config.env})`);
2020
});

server/controllers/user.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,29 @@
11
import User from '../models/user';
22

3+
/**
4+
* Load user and append to req.
5+
*/
36
export function load(req, res, next, id) {
47
User.get(id).then((user) => {
58
req.user = user; // eslint-disable-line no-param-reassign
69
return next();
710
}).error((e) => next(e));
811
}
912

13+
/**
14+
* Get user
15+
* @returns {User}
16+
*/
1017
export function get(req, res) {
1118
return res.json(req.user);
1219
}
1320

21+
/**
22+
* Create new user
23+
* @property {string} req.body.username - The username of user.
24+
* @property {string} req.body.mobileNumber - The mobileNumber of user.
25+
* @returns {User}
26+
*/
1427
export function create(req, res, next) {
1528
const user = new User({
1629
username: req.body.username,
@@ -22,6 +35,12 @@ export function create(req, res, next) {
2235
.error((e) => next(e));
2336
}
2437

38+
/**
39+
* Update existing user
40+
* @property {string} req.body.username - The username of user.
41+
* @property {string} req.body.mobileNumber - The mobileNumber of user.
42+
* @returns {User}
43+
*/
2544
export function update(req, res, next) {
2645
const user = req.user;
2746
user.username = req.body.username;
@@ -32,12 +51,22 @@ export function update(req, res, next) {
3251
.error((e) => next(e));
3352
}
3453

54+
/**
55+
* Get user list.
56+
* @property {number} req.query.skip - Number of users to be skipped.
57+
* @property {number} req.query.limit - Limit number of users to be returned.
58+
* @returns {User[]}
59+
*/
3560
export function list(req, res, next) {
3661
const { limit = 50, skip = 0 } = req.query;
3762
User.list({ limit, skip }).then((users) => res.json(users))
3863
.error((e) => next(e));
3964
}
4065

66+
/**
67+
* Delete user.
68+
* @returns {User}
69+
*/
4170
export function remove(req, res, next) {
4271
const user = req.user;
4372
user.removeAsync()

server/helpers/APIError.js

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,31 @@
11
import httpStatus from 'http-status';
22

3+
/**
4+
* @extends Error
5+
*/
36
class ExtendableError extends Error {
47
constructor(message, status, isPublic) {
58
super(message);
69
this.name = this.constructor.name;
710
this.message = message;
811
this.status = status;
912
this.isPublic = isPublic;
10-
this.isOperational = true;
13+
this.isOperational = true; // This is required since bluebird 4 doesn't append it anymore.
1114
Error.captureStackTrace(this, this.constructor.name);
1215
}
1316
}
1417

18+
/**
19+
* Class representing an API error.
20+
* @extends ExtendableError
21+
*/
1522
class APIError extends ExtendableError {
23+
/**
24+
* Creates an API error.
25+
* @param {string} message - Error message.
26+
* @param {number} status - HTTP status code of error.
27+
* @param {boolean} isPublic - Whether the message should be visible to user or not.
28+
*/
1629
constructor(message, status = httpStatus.INTERNAL_SERVER_ERROR, isPublic = false) {
1730
super(message, status, isPublic);
1831
}

server/models/user.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ import mongoose from 'mongoose';
33
import httpStatus from 'http-status';
44
import APIError from '../helpers/APIError';
55

6+
/**
7+
* User Schema
8+
*/
69
const UserSchema = new mongoose.Schema({
710
username: {
811
type: String,
@@ -19,7 +22,28 @@ const UserSchema = new mongoose.Schema({
1922
}
2023
});
2124

25+
/**
26+
* Add your
27+
* - pre-save hooks
28+
* - validations
29+
* - virtuals
30+
*/
31+
32+
/**
33+
* Methods
34+
*/
35+
UserSchema.method({
36+
});
37+
38+
/**
39+
* Statics
40+
*/
2241
UserSchema.statics = {
42+
/**
43+
* Get user
44+
* @param {ObjectId} id - The objectId of user.
45+
* @returns {Promise<User, APIError>}
46+
*/
2347
get(id) {
2448
return this.findById(id)
2549
.execAsync().then((user) => {
@@ -31,6 +55,12 @@ UserSchema.statics = {
3155
});
3256
},
3357

58+
/**
59+
* List users in descending order of 'createdAt' timestamp.
60+
* @param {number} skip - Number of users to be skipped.
61+
* @param {number} limit - Limit number of users to be returned.
62+
* @returns {Promise<User[]>}
63+
*/
3464
list({ skip = 0, limit = 50 } = {}) {
3565
return this.find()
3666
.sort({ createdAt: -1 })
@@ -40,4 +70,7 @@ UserSchema.statics = {
4070
}
4171
};
4272

73+
/**
74+
* @typedef User
75+
*/
4376
export default mongoose.model('User', UserSchema);

server/routes/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@ import userRoutes from './user';
33

44
const router = express.Router(); // eslint-disable-line new-cap
55

6-
/* GET home page. */
6+
/** GET /health-check - Check service health */
77
router.get('/health-check', (req, res) =>
88
res.send('OK')
99
);
1010

11-
// mount all routes here
11+
// mount user routes at /users
1212
router.use('/users', userRoutes);
1313

1414
export default router;

server/routes/user.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,23 @@ import * as userCtrl from '../controllers/user';
44
const router = express.Router(); // eslint-disable-line new-cap
55

66
router.route('/')
7+
/** GET /api/users - Get list of users */
78
.get(userCtrl.list)
9+
10+
/** POST /api/users - Create new user */
811
.post(userCtrl.create);
912

1013
router.route('/:userId')
14+
/** GET /api/users/:userId - Get user */
1115
.get(userCtrl.get)
16+
17+
/** PUT /api/users/:userId - Update user */
1218
.put(userCtrl.update)
19+
20+
/** DELETE /api/users/:userId - Delete user */
1321
.delete(userCtrl.remove);
1422

23+
/** Load user when API with userId route parameter is hit */
1524
router.param('userId', userCtrl.load);
1625

1726
export default router;

server/tests/misc-tests.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,5 +41,5 @@ describe('## Misc', () => {
4141
done();
4242
});
4343
});
44-
})
44+
});
4545
});

0 commit comments

Comments
 (0)