forked from cnodejs/nodeclub
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmessage.js
87 lines (73 loc) · 2.36 KB
/
message.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
var eventproxy = require('eventproxy');
var Message = require('../../proxy').Message;
var _ = require('lodash');
var index = function (req, res, next) {
var user_id = req.user._id;
var ep = new eventproxy();
ep.fail(next);
ep.all('has_read_messages', 'hasnot_read_messages', function (has_read_messages, hasnot_read_messages) {
res.send({
data: {
has_read_messages: has_read_messages,
hasnot_read_messages: hasnot_read_messages
}
});
});
ep.all('has_read', 'unread', function (has_read, unread) {
[has_read, unread].forEach(function (msgs, idx) {
var epfill = new eventproxy();
epfill.fail(next);
epfill.after('message_ready', msgs.length, function (docs) {
docs = docs.filter(function (doc) {
return !doc.is_invalid;
});
docs = docs.map(function (doc) {
doc.author = _.pick(doc.author, ['loginname', 'avatar_url']);
doc.topic = _.pick(doc.topic, ['id', 'author', 'title', 'last_reply_at']);
doc.reply = _.pick(doc.reply, ['id', 'content', 'ups', 'create_at']);
doc = _.pick(doc, ['id', 'type', 'has_read', 'author', 'topic', 'reply']);
return doc;
});
ep.emit(idx === 0 ? 'has_read_messages' : 'hasnot_read_messages', docs);
});
msgs.forEach(function (doc) {
Message.getMessageById(doc._id, epfill.group('message_ready'));
});
});
});
Message.getReadMessagesByUserId(user_id, ep.done('has_read'));
Message.getUnreadMessageByUserId(user_id, ep.done('unread'));
};
exports.index = index;
var markAll = function (req, res, next) {
var user_id = req.user._id;
var ep = new eventproxy();
ep.fail(next);
Message.getUnreadMessageByUserId(user_id, ep.done('unread', function (docs) {
docs.forEach(function (doc) {
doc.has_read = true;
doc.save();
});
return docs;
}));
ep.all('unread', function (unread) {
unread = unread.map(function (doc) {
doc = _.pick(doc, ['id']);
return doc;
});
res.send({
success: true,
marked_msgs: unread,
});
});
};
exports.markAll = markAll;
var count = function (req, res, next) {
var userId = req.user.id;
var ep = new eventproxy();
ep.fail(next);
Message.getMessagesCount(userId, ep.done(function (count) {
res.send({data: count});
}));
};
exports.count = count;