Skip to content

Commit fecaaeb

Browse files
committed
docs(api): controllers and services improve
1 parent de886f4 commit fecaaeb

File tree

4 files changed

+88
-7
lines changed

4 files changed

+88
-7
lines changed

api/controllers/language.controller.js

+15
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22

33
import { LanguageService } from '../services';
44

5+
/**
6+
* Get all languages
7+
*
8+
* GET /languages [None]
9+
*/
510
exports.getAll = (req, res) => {
611
LanguageService.getAll().then(languages => {
712
res.status(200).send(languages);
@@ -10,6 +15,11 @@ exports.getAll = (req, res) => {
1015
});
1116
};
1217

18+
/**
19+
* Get a specific language by its id
20+
*
21+
* GET /languages/:id [None]
22+
*/
1323
exports.getOne = (req, res) => {
1424
LanguageService.getOne(req.params.id).then(language => {
1525
res.status(200).send(language);
@@ -18,6 +28,11 @@ exports.getOne = (req, res) => {
1828
});
1929
};
2030

31+
/**
32+
* Create a text
33+
*
34+
* POST /languages [Admin]
35+
*/
2136
exports.create = (req, res) => {
2237
LanguageService.create(req.body).then(language => {
2338
res.status(200).send(language);

api/controllers/text.controller.js

+25
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22

33
import { TextService } from '../services';
44

5+
/**
6+
* Get all texts
7+
*
8+
* GET /texts [None]
9+
*/
510
exports.getAll = (req, res) => {
611
TextService.getAll()
712
.then(texts => {
@@ -12,6 +17,11 @@ exports.getAll = (req, res) => {
1217
});
1318
};
1419

20+
/**
21+
* Get a random text
22+
*
23+
* GET /texts/rand [None]
24+
*/
1525
exports.getRandom = (req, res) => {
1626
TextService.getRandom()
1727
.then(text => {
@@ -22,6 +32,11 @@ exports.getRandom = (req, res) => {
2232
});
2333
};
2434

35+
/**
36+
* Get a text by its id
37+
*
38+
* GET /texts/:id [None]
39+
*/
2540
exports.getOne = (req, res) => {
2641
TextService.getOne(req.params.id)
2742
.then(text => {
@@ -32,6 +47,11 @@ exports.getOne = (req, res) => {
3247
});
3348
};
3449

50+
/**
51+
* Create a text
52+
*
53+
* POST /texts [Admin]
54+
*/
3555
exports.create = (req, res) => {
3656
TextService.create(req.body.title, req.body.data, req.body.language, req.user.id)
3757
.then(text => {
@@ -42,6 +62,11 @@ exports.create = (req, res) => {
4262
});
4363
};
4464

65+
/**
66+
* Cast a vote on a text
67+
*
68+
* POST /text/:id/vote [User]
69+
*/
4570
exports.castVote = (req, res) => {
4671
TextService.castVote(req.params.id, req.user.id, req.body.value)
4772
.then(() => {

api/controllers/user.controller.js

+7-7
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,7 @@ import { UserService } from '../services';
66
/**
77
* Return the current user
88
*
9-
* @param {Object} req Express request
10-
* @param {Object} res Exress result
11-
* @returns {Object} user
9+
* GET /users/me [User]
1210
*/
1311
exports.getMe = (req, res) => {
1412
res.status(200).send(req.user);
@@ -17,16 +15,16 @@ exports.getMe = (req, res) => {
1715
/**
1816
* Update the current user
1917
*
20-
* @param {Object} req Express request
21-
* @param {Object} res Exress result
22-
* @returns {Null} nothing
18+
* PUT /users/me [User]
2319
*/
2420
exports.putMe = (req, res) => {
2521
res.status(404).send({ message: 'Route under construction.' });
2622
};
2723

2824
/**
29-
* Get all users, for admins only
25+
* Get all users
26+
*
27+
* GET /users [Admin]
3028
*/
3129
exports.getAll = (req, res) => {
3230
UserService.getAll()
@@ -40,6 +38,8 @@ exports.getAll = (req, res) => {
4038

4139
/**
4240
* Create a new result for a user
41+
*
42+
* POST /users/me/game [User]
4343
*/
4444
exports.newResult = (req, res) => {
4545
UserService.newResult(_.assign(req.body, { userId: req.user.id }))

api/services/user.service.js

+41
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,40 @@ import { propsDiffer } from './utils.service';
77
import { User, Test } from '../models';
88
import GithubService from './github.service';
99

10+
/**
11+
* Get all users.
12+
* @returns {Promise}
13+
*/
1014
exports.getAll = () => {
1115
return User.findAll();
1216
};
1317

18+
/**
19+
* Get a user by its id.
20+
*
21+
* @param id {Number}
22+
* @returns {Promise}
23+
*/
1424
exports.getById = id => {
1525
return User.findById(id);
1626
};
1727

28+
/**
29+
* Get a user by its github identifier
30+
*
31+
* @param id {Number}
32+
* @returns {Promise}
33+
*/
1834
exports.getByGithub = id => {
1935
return User.findOne({ where: { githubId: id } });
2036
};
2137

38+
/**
39+
* Get user average wpm across all his results.
40+
*
41+
* @param id {Number}
42+
* @returns {Promise}
43+
*/
2244
exports.getAverageWpm = id => {
2345
return Test.findOne({
2446
attributes: [[Sequelize.fn('AVG', Sequelize.col('wpm')), 'average']],
@@ -27,6 +49,15 @@ exports.getAverageWpm = id => {
2749
.then(res => { return _.get(res, 'dataValues.average'); });
2850
};
2951

52+
/**
53+
* Update a user with his new github infos or create one.
54+
*
55+
* @param githubId {Number} Github user identifier
56+
* @param name {String}
57+
* @param avatar {String}
58+
* @param token {String} Github user token
59+
* @returns {Promise}
60+
*/
3061
exports.updateOrCreate = (githubId, name, avatar, token) => {
3162

3263
return exports.getByGithub(githubId)
@@ -45,6 +76,16 @@ exports.updateOrCreate = (githubId, name, avatar, token) => {
4576

4677
};
4778

79+
/**
80+
* Create a new test result for a user.
81+
*
82+
* @param test {Object}
83+
* @param test.wpm {Number}
84+
* @param test.accuracy {Number}
85+
* @param test.textId {Number}
86+
* @param test.userId {Number}
87+
* @returns {Promise}
88+
*/
4889
exports.newResult = test => {
4990

5091
if (!test.wpm || !test.accuracy || !test.textId || !test.userId) { throw new Error('Missing test data.'); }

0 commit comments

Comments
 (0)