From 8e563e8304dd338dca1f03dfd898964fb480ad80 Mon Sep 17 00:00:00 2001 From: OldHawk Date: Sat, 8 Jul 2017 01:57:31 +0800 Subject: [PATCH] feat(forums): get topic data --- .../forums.admin.server.controller.js | 6 +-- .../controllers/forums.server.controller.js | 40 ++++++++++++++++++- .../server/routes/forums.server.routes.js | 7 ++-- 3 files changed, 44 insertions(+), 9 deletions(-) diff --git a/modules/forums/server/controllers/forums.admin.server.controller.js b/modules/forums/server/controllers/forums.admin.server.controller.js index 53204542..d3205308 100644 --- a/modules/forums/server/controllers/forums.admin.server.controller.js +++ b/modules/forums/server/controllers/forums.admin.server.controller.js @@ -39,8 +39,7 @@ exports.create = function (req, res) { exports.list = function (req, res) { Forum.find() .sort('order -createdat') - .populate('lastNewTopic') - .populate('lastReplyTopic') + .populate('lastTopic') .populate('moderators', 'username displayName profileImageURL uploaded downloaded') .exec(function (err, forums) { if (err) { @@ -164,8 +163,7 @@ exports.forumByID = function (req, res, next, id) { } Forum.findById(id) - .populate('lastNewTopic') - .populate('lastReplyTopic') + .populate('lastTopic') .populate('moderators', 'username displayName profileImageURL uploaded downloaded') .exec(function (err, forum) { if (err) { diff --git a/modules/forums/server/controllers/forums.server.controller.js b/modules/forums/server/controllers/forums.server.controller.js index 927ed847..038eae33 100644 --- a/modules/forums/server/controllers/forums.server.controller.js +++ b/modules/forums/server/controllers/forums.server.controller.js @@ -60,8 +60,6 @@ exports.listTopics = function (req, res) { .sort('-isTop -updatedAt -createdAt') .populate('user', 'username displayName profileImageURL uploaded downloaded') .populate('lastUser', 'username displayName profileImageURL uploaded downloaded') - .populate('_scoreList.user', 'username displayName profileImageURL uploaded downloaded') - .populate('_replies.user', 'username displayName profileImageURL uploaded downloaded') .exec(function (err, topics) { if (err) { return res.status(422).send({ @@ -98,3 +96,41 @@ exports.postNewTopic = function (req, res) { lastTopic: topic }).exec(); }; + +/** + * read forum + * @param req + * @param res + */ +exports.readTopic = function (req, res) { + res.json(req.topic); +}; + +/** + * Invitation middleware + */ +exports.topicById = function (req, res, next, id) { + + if (!mongoose.Types.ObjectId.isValid(id)) { + return res.status(400).send({ + message: 'Topic is invalid' + }); + } + + Topic.findById(id) + .populate('user', 'username displayName profileImageURL uploaded downloaded') + .populate('lastUser', 'username displayName profileImageURL uploaded downloaded') + .populate('_scoreList.user', 'username displayName profileImageURL uploaded downloaded') + .populate('_replies.user', 'username displayName profileImageURL uploaded downloaded') + .exec(function (err, topic) { + if (err) { + return next(err); + } else if (!topic) { + return res.status(404).send({ + message: 'No topic with that identifier has been found' + }); + } + req.topic = topic; + next(); + }); +}; diff --git a/modules/forums/server/routes/forums.server.routes.js b/modules/forums/server/routes/forums.server.routes.js index 0382ccc6..96b5d647 100644 --- a/modules/forums/server/routes/forums.server.routes.js +++ b/modules/forums/server/routes/forums.server.routes.js @@ -7,17 +7,18 @@ var forumsPolicy = require('../policies/forums.server.policy'), forums = require('../controllers/forums.server.controller'); module.exports = function (app) { - // Articles collection routes app.route('/api/forums').all(forumsPolicy.isAllowed) .get(forums.list); - //Single article routes app.route('/api/forums/:forumId').all(forumsPolicy.isAllowed) .get(forums.read); - //Single article routes app.route('/api/topics/:forumId').all(forumsPolicy.isAllowed) .post(forums.postNewTopic) .get(forums.listTopics); + app.route('/api/topics/:forumId/:topicId').all(forumsPolicy.isAllowed) + .get(forums.readTopic); + + app.param('topicId', forums.topicById); };