mirror of
https://github.com/cnodejs/nodeclub.git
synced 2025-12-08 19:55:55 +00:00
118 lines
3.1 KiB
JavaScript
118 lines
3.1 KiB
JavaScript
var EventProxy = require('eventproxy');
|
||
var _ = require('lodash');
|
||
|
||
var Message = require('../models').Message;
|
||
|
||
var User = require('./user');
|
||
var Topic = require('./topic');
|
||
var Reply = require('./reply');
|
||
|
||
/**
|
||
* 根据用户ID,获取未读消息的数量
|
||
* Callback:
|
||
* 回调函数参数列表:
|
||
* - err, 数据库错误
|
||
* - count, 未读消息数量
|
||
* @param {String} id 用户ID
|
||
* @param {Function} callback 获取消息数量
|
||
*/
|
||
exports.getMessagesCount = function (id, callback) {
|
||
Message.countDocuments({master_id: id, has_read: false}, callback);
|
||
};
|
||
|
||
|
||
/**
|
||
* 根据消息Id获取消息
|
||
* Callback:
|
||
* - err, 数据库错误
|
||
* - message, 消息对象
|
||
* @param {String} id 消息ID
|
||
* @param {Function} callback 回调函数
|
||
*/
|
||
exports.getMessageById = function (id, callback) {
|
||
Message.findOne({_id: id}, function (err, message) {
|
||
if (err) {
|
||
return callback(err);
|
||
}
|
||
getMessageRelations(message, callback);
|
||
});
|
||
};
|
||
|
||
var getMessageRelations = exports.getMessageRelations = function (message, callback) {
|
||
if (message.type === 'reply' || message.type === 'reply2' || message.type === 'at') {
|
||
var proxy = new EventProxy();
|
||
proxy.fail(callback);
|
||
proxy.assign('author', 'topic', 'reply', function (author, topic, reply) {
|
||
message.author = author;
|
||
message.topic = topic;
|
||
message.reply = reply;
|
||
if (!author || !topic) {
|
||
message.is_invalid = true;
|
||
}
|
||
return callback(null, message);
|
||
}); // 接收异常
|
||
User.getUserById(message.author_id, proxy.done('author'));
|
||
Topic.getTopicById(message.topic_id, proxy.done('topic'));
|
||
Reply.getReplyById(message.reply_id, proxy.done('reply'));
|
||
} else {
|
||
return callback(null, {is_invalid: true});
|
||
}
|
||
};
|
||
|
||
/**
|
||
* 根据用户ID,获取已读消息列表
|
||
* Callback:
|
||
* - err, 数据库异常
|
||
* - messages, 消息列表
|
||
* @param {String} userId 用户ID
|
||
* @param {Function} callback 回调函数
|
||
*/
|
||
exports.getReadMessagesByUserId = function (userId, callback) {
|
||
Message.find({master_id: userId, has_read: true}, null,
|
||
{sort: '-create_at', limit: 20}, callback);
|
||
};
|
||
|
||
/**
|
||
* 根据用户ID,获取未读消息列表
|
||
* Callback:
|
||
* - err, 数据库异常
|
||
* - messages, 未读消息列表
|
||
* @param {String} userId 用户ID
|
||
* @param {Function} callback 回调函数
|
||
*/
|
||
exports.getUnreadMessageByUserId = function (userId, callback) {
|
||
Message.find({master_id: userId, has_read: false}, null,
|
||
{sort: '-create_at'}, callback);
|
||
};
|
||
|
||
|
||
/**
|
||
* 将消息设置成已读
|
||
*/
|
||
exports.updateMessagesToRead = function (userId, messages, callback) {
|
||
callback = callback || _.noop;
|
||
if (messages.length === 0) {
|
||
return callback();
|
||
}
|
||
|
||
var ids = messages.map(function (m) {
|
||
return m.id;
|
||
});
|
||
|
||
var query = { master_id: userId, _id: { $in: ids } };
|
||
Message.updateMany(query, { $set: { has_read: true } }).exec(callback);
|
||
};
|
||
|
||
|
||
/**
|
||
* 将单个消息设置成已读
|
||
*/
|
||
exports.updateOneMessageToRead = function (msg_id, callback) {
|
||
callback = callback || _.noop;
|
||
if (!msg_id) {
|
||
return callback();
|
||
}
|
||
var query = { _id: msg_id };
|
||
Message.updateMany(query, { $set: { has_read: true } }).exec(callback);
|
||
};
|