mirror of
https://github.com/cnodejs/nodeclub.git
synced 2025-12-08 19:55:55 +00:00
63 lines
2.2 KiB
JavaScript
63 lines
2.2 KiB
JavaScript
var _ = require('lodash');
|
|
var eventproxy = require('eventproxy');
|
|
var UserProxy = require('../../proxy').User;
|
|
var TopicProxy = require('../../proxy').Topic;
|
|
var ReplyProxy = require('../../proxy').Reply;
|
|
var TopicCollect = require('../../proxy').TopicCollect;
|
|
|
|
var show = function (req, res, next) {
|
|
var loginname = req.params.loginname;
|
|
var ep = new eventproxy();
|
|
|
|
ep.fail(next);
|
|
|
|
UserProxy.getUserByLoginName(loginname, ep.done(function (user) {
|
|
if (!user) {
|
|
res.status(404);
|
|
return res.send({success: false, error_msg: '用户不存在'});
|
|
}
|
|
var query = {author_id: user._id};
|
|
var opt = {limit: 15, sort: '-create_at'};
|
|
TopicProxy.getTopicsByQuery(query, opt, ep.done('recent_topics'));
|
|
|
|
ReplyProxy.getRepliesByAuthorId(user._id, {limit: 20, sort: '-create_at'},
|
|
ep.done(function (replies) {
|
|
var topic_ids = replies.map(function (reply) {
|
|
return reply.topic_id.toString()
|
|
});
|
|
topic_ids = _.uniq(topic_ids).slice(0, 5); // 只显示最近5条
|
|
|
|
var query = {_id: {'$in': topic_ids}};
|
|
var opt = {};
|
|
TopicProxy.getTopicsByQuery(query, opt, ep.done('recent_replies', function (recent_replies) {
|
|
recent_replies = _.sortBy(recent_replies, function (topic) {
|
|
return topic_ids.indexOf(topic._id.toString())
|
|
});
|
|
return recent_replies;
|
|
}));
|
|
}));
|
|
|
|
ep.all('recent_topics', 'recent_replies',
|
|
function (recent_topics, recent_replies) {
|
|
|
|
user = _.pick(user, ['loginname', 'avatar_url', 'githubUsername',
|
|
'create_at', 'score']);
|
|
|
|
user.recent_topics = recent_topics.map(function (topic) {
|
|
topic.author = _.pick(topic.author, ['loginname', 'avatar_url']);
|
|
topic = _.pick(topic, ['id', 'author', 'title', 'last_reply_at']);
|
|
return topic;
|
|
});
|
|
user.recent_replies = recent_replies.map(function (topic) {
|
|
topic.author = _.pick(topic.author, ['loginname', 'avatar_url']);
|
|
topic = _.pick(topic, ['id', 'author', 'title', 'last_reply_at']);
|
|
return topic;
|
|
});
|
|
|
|
res.send({success: true, data: user});
|
|
});
|
|
}));
|
|
};
|
|
|
|
exports.show = show;
|