feat(forums): add forum search server side controller,route,policy

This commit is contained in:
OldHawk
2017-07-19 15:56:40 +08:00
parent d6bdd7ea6f
commit 2d1fea1873
3 changed files with 79 additions and 0 deletions

View File

@@ -125,6 +125,81 @@ exports.read = function (req, res) {
res.json(req.forum);
};
/**
* forumsSearch
* @param req
* @param res
*/
exports.forumsSearch = function (req, res) {
var condition = {};
var keysA = [];
var skip = 0;
var limit = 0;
if (req.body.skip !== undefined) {
skip = parseInt(req.body.skip, 10);
}
if (req.body.limit !== undefined) {
limit = parseInt(req.body.limit, 10);
}
if (req.body.keys && req.body.keys.length > 0) {
var keysS = req.body.keys + '';
var keysT = keysS.split(' ');
keysT.forEach(function (it) {
var ti = new RegExp(it, 'i');
keysA.push(ti);
});
}
if (req.body.forumId) {
condition.forum = req.body.forumId
}
if (keysA.length > 0) {
condition.$or = [
{title: {'$all': keysA}},
{content: {'$all': keysA}},
{'_replies.content': {'$all': keysA}}
];
}
var countQuery = function (callback) {
Topic.count(condition, function (err, count) {
if (err) {
callback(err, null);
} else {
callback(null, count);
}
});
};
var findQuery = function (callback) {
Topic.find(condition)
.sort('-lastReplyAt -createdAt')
.populate('user', 'username displayName profileImageURL uploaded downloaded')
.populate('lastUser', 'username displayName profileImageURL uploaded downloaded')
.populate('forum', 'name category')
.skip(skip)
.limit(limit)
.exec(function (err, topics) {
if (err) {
callback(err, null);
} else {
callback(null, topics);
}
});
};
async.parallel([countQuery, findQuery], function (err, results) {
if (err) {
return res.status(422).send(err);
} else {
res.json({rows: results[1], total: results[0]});
}
});
};
/**
* listTopics
* @param req

View File

@@ -22,6 +22,7 @@ exports.invokeRolesPolicies = function () {
{resources: '/api/attach/upload', permissions: '*'},
{resources: '/api/attach/:topicId', permissions: '*'},
{resources: '/api/attach/:topicId/:replyId', permissions: '*'},
{resources: '/api/forums/search', permissions: '*'},
{resources: '/api/forums/:forumId', permissions: '*'},
{resources: '/api/topics/:forumId', permissions: '*'},
{resources: '/api/topics/:forumId/:topicId', permissions: '*'},

View File

@@ -21,6 +21,9 @@ module.exports = function (app) {
app.route('/api/attach/:topicId/:replyId').all(forumsPolicy.isAllowed)
.get(forums.attachDownload);
app.route('/api/forums/search').all(forumsPolicy.isAllowed)
.put(forums.forumsSearch);
app.route('/api/forums/:forumId').all(forumsPolicy.isAllowed)
.get(forums.read);