nodeclub/api/v1/user.js

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;