Commit c296a878 authored by 陈家荣's avatar 陈家荣

获取点赞记录,添加取消点赞功能

parent 8666689d
...@@ -14,6 +14,7 @@ var forumTagService=require('../../service/forumTagService'); ...@@ -14,6 +14,7 @@ var forumTagService=require('../../service/forumTagService');
var forumCommentService=require('../../service/forumCommentService'); var forumCommentService=require('../../service/forumCommentService');
var forumThreadAttendService = require('../../service/forumThreadAttendService'); var forumThreadAttendService = require('../../service/forumThreadAttendService');
var httpService = require('../../service/httpService'); var httpService = require('../../service/httpService');
var redisPraiseLog = require('../../utils/redisPraiseLog');
var user = require('../../utils/user'); var user = require('../../utils/user');
...@@ -153,9 +154,10 @@ router.get('/info/:fid/threads', function(req, res, next) { ...@@ -153,9 +154,10 @@ router.get('/info/:fid/threads', function(req, res, next) {
var pageNo = req.query.pageNo || 1; var pageNo = req.query.pageNo || 1;
var pageSize = req.query.pageSize || 10; var pageSize = req.query.pageSize || 10;
var fid = req.params.fid; var fid = req.params.fid;
var sort = '-top -topTime -created' var sort = '-top -topTime -created';
var ent_code = req.session.user.ent_code;
var conditions = { var conditions = {
ent_code: req.session.user.ent_code, ent_code: ent_code,
level: 1, level: 1,
status:1 status:1
}; };
...@@ -192,7 +194,22 @@ router.get('/info/:fid/threads', function(req, res, next) { ...@@ -192,7 +194,22 @@ router.get('/info/:fid/threads', function(req, res, next) {
console.error(err); console.error(err);
res.json(returnCode.BUSY); res.json(returnCode.BUSY);
} else { } else {
res.json(_.assign(results, returnCode.SUCCESS)); //判断是否已经点赞
redisPraiseLog.get(ent_code,user.getMobileUser(req),'thread', function(error, docs){
_.forEach(results.items, function(d,i) {
if(results.items[i].toObject){
results.items[i] = results.items[i].toObject();
}
results.items[i].isPraise = false;
for (var k = docs.length - 1; k >= 0; k--) {
if(results.items[i]._id == docs[k]){
results.items[i].isPraise = true;
break;
}
};
});
res.json(_.assign(results, returnCode.SUCCESS));
});
} }
}); });
} }
...@@ -545,9 +562,9 @@ router.get('/info/:fid/serachThreads', function(req, res, next) { ...@@ -545,9 +562,9 @@ router.get('/info/:fid/serachThreads', function(req, res, next) {
var pageNo = req.query.pageNo || 1; var pageNo = req.query.pageNo || 1;
var pageSize = req.query.pageSize || 10; var pageSize = req.query.pageSize || 10;
var content = req.query.content; var content = req.query.content;
var ent_code = req.session.user.ent_code;
var conditions = { var conditions = {
ent_code: req.session.user.ent_code, ent_code: ent_code,
status:1, status:1,
info: fid info: fid
}; };
...@@ -591,7 +608,22 @@ router.get('/info/:fid/serachThreads', function(req, res, next) { ...@@ -591,7 +608,22 @@ router.get('/info/:fid/serachThreads', function(req, res, next) {
console.error(err); console.error(err);
res.json(returnCode.BUSY); res.json(returnCode.BUSY);
} else { } else {
res.json(_.assign(results, returnCode.SUCCESS)); //判断是否已经点赞
redisPraiseLog.get(ent_code,user.getMobileUser(req),'thread', function(error, docs){
_.forEach(results.items, function(d,i) {
if(results.items[i].toObject){
results.items[i] = results.items[i].toObject();
}
results.items[i].isPraise = false;
for (var k = docs.length - 1; k >= 0; k--) {
if(results.items[i]._id == docs[k]){
results.items[i].isPraise = true;
break;
}
};
});
res.json(_.assign(results, returnCode.SUCCESS));
});
} }
}); });
} }
......
...@@ -17,6 +17,7 @@ var forumUserThreadControlService = require('../../service/forumUserThreadContro ...@@ -17,6 +17,7 @@ var forumUserThreadControlService = require('../../service/forumUserThreadContro
var forumLimitOperationService = require('../../service/forumLimitOperationService'); var forumLimitOperationService = require('../../service/forumLimitOperationService');
var forumThreadAttendService = require('../../service/forumThreadAttendService'); var forumThreadAttendService = require('../../service/forumThreadAttendService');
var commentTips = require('../../utils/commentTips'); var commentTips = require('../../utils/commentTips');
var redisPraiseLog = require('../../utils/redisPraiseLog');
var httpService = require('../../service/httpService'); var httpService = require('../../service/httpService');
var forumAboutMEService = require('../../service/forumAboutMEService'); var forumAboutMEService = require('../../service/forumAboutMEService');
var user = require('../../utils/user'); var user = require('../../utils/user');
...@@ -213,6 +214,7 @@ router.post('/thread/create', function(req, res, next) { ...@@ -213,6 +214,7 @@ router.post('/thread/create', function(req, res, next) {
//获取目标论坛文章 //获取目标论坛文章
router.get('/thread/:tid/get', function(req, res, next) { router.get('/thread/:tid/get', function(req, res, next) {
var tid = req.params.tid || null; var tid = req.params.tid || null;
var ent_code = req.session.user.ent_code;
if (tid) { if (tid) {
async.waterfall([ async.waterfall([
...@@ -254,9 +256,23 @@ router.get('/thread/:tid/get', function(req, res, next) { ...@@ -254,9 +256,23 @@ router.get('/thread/:tid/get', function(req, res, next) {
console.error(err); console.error(err);
res.json(returnCode.BUSY); res.json(returnCode.BUSY);
} else { } else {
var rs = {}; //判断是否已经点赞
rs.data = thread; redisPraiseLog.get(ent_code,user.getMobileUser(req),'thread', function(error, docs){
res.json(_.assign(rs, returnCode.SUCCESS)); if(thread.toObject){
thread = thread.toObject();
}
thread.isPraise = false;
for (var k = docs.length - 1; k >= 0; k--) {
if(thread._id == docs[k]){
thread.isPraise = true;
break;
}
};
var rs = {};
rs.data = thread;
res.json(_.assign(rs, returnCode.SUCCESS));
});
} }
}); });
} else { } else {
...@@ -324,20 +340,139 @@ router.post('/thread/:tid/raise', function(req, res, next) { ...@@ -324,20 +340,139 @@ router.post('/thread/:tid/raise', function(req, res, next) {
var userId = req.session.mobileForumUser.userId; var userId = req.session.mobileForumUser.userId;
var mid = req.session.openUser.mid; var mid = req.session.openUser.mid;
var tid = req.params.tid || null; var tid = req.params.tid || null;
var ent_code = req.session.user.ent_code;
if (tid) { if (tid) {
var integral = req.session.openUser.integral || 0; var integral = req.session.openUser.integral || 0;
var exp = req.session.openUser.exp || 0; var exp = req.session.openUser.exp || 0;
//判断是否已经点赞 //判断是否已经点赞
forumPraiseLogService.queryPraiseLog(tid, null, user.getMobileUser(req), 1, function(err, logs) { forumPraiseLogService.queryPraiseLog(tid, null, user.getMobileUser(req), 1, function(err, doc) {
if (err) { if (err) {
res.json(returnCode.BUSY); res.json(returnCode.BUSY);
} else { } else {
if (logs && logs.length > 0) { //1.检查是否有权限
res.json(returnCode.CAN_NOT_RAISE_REPEAT); forumRolePermissionService.checkRolePermiss(ent_code, 'raise', integral, exp, function(err, result) {
} else { if (err) {
res.json(returnCode.BUSY);
} else {
if (result) { //有操作权限
//2.获取论坛文章
forumThreadService.getThreadById(tid, function(err, thread) {
if (err) {
res.json(returnCode.BUSY);
} else {
async.parallel([
function(callback) {
//3.更新文章统计数据(点赞数)
if (thread) {
forumThreadService.updateThreadRaiseCount(tid, function(err, cb) {
if (err) {
callback(err, null);
} else {
callback(null, null);
}
});
} else {
callback('cannot find thread by id', null);
}
},
function(callback) {
if(doc){ //如果已存在,更新为点赞日志
forumPraiseLogService.updatePraiseLog(doc._id, 0, function(err, result) {
if (err) {
callback(err, null);
} else {
callback(null, null);
}
});
}else{ //不存在,创建点赞日志
var entity = {
ent_code: ent_code,
user: user.getMobileUser(req),
thread: tid,
ip: req.ip,
comment: null,
type: 1,
status :0
};
//4.创建点赞日志
forumPraiseLogService.createPraiseLog(entity, function(err, result) {
if (err) {
callback(err, null);
} else {
callback(null, null);
}
});
}
}
], function(err, results) {
if (err) {
console.error(err);
res.json(returnCode.BUSY);
} else {
// forumLimitOperationService.checkLimitOperationProhibitionAddIntegral(userId, function(err, flag){
// if(err){
// console.error(err);
// }else{
// if(!flag){
// httpService.sendRequest(ent_code, req.session.openUser.mid, 'thread_praise');
// }
// }
// });
//更新点赞redis
redisPraiseLog.get(ent_code,userId,'thread', function(error, docs){
var list = docs;
list.push(tid);
redisPraiseLog.set(ent_code,userId,'thread',list, function(){});
});
forumThreadService.getThreadById(tid, function(err, doc) {
if (err) {
console.error(err);
res.json(returnCode.BUSY);
} else {
var rs = {};
rs.praise_count = doc.praise_count;
res.json(_.assign(rs, returnCode.SUCCESS));
}
});
}
});
}
});
} else {
res.json(returnCode.ACTION_NOT_PERMISSION);
}
}
});
}
});
} else {
res.json(returnCode.WRONG_PARAM);
}
});
//文章取消点赞
router.post('/thread/:tid/cancelRaise', function(req, res, next) {
var userId = req.session.mobileForumUser.userId;
var mid = req.session.openUser.mid;
var tid = req.params.tid || null;
var ent_code = req.session.user.ent_code;
if (tid) {
var integral = req.session.openUser.integral || 0;
var exp = req.session.openUser.exp || 0;
//判断是否已经点赞
forumPraiseLogService.queryPraiseLog(tid, null, userId, 1, function(err, doc) {
if (err) {
res.json(returnCode.BUSY);
} else {
if (doc) {
var praiseId = doc._id;
//1.检查是否有权限 //1.检查是否有权限
forumRolePermissionService.checkRolePermiss(req.session.user.ent_code, 'raise', integral, exp, function(err, result) { forumRolePermissionService.checkRolePermiss(ent_code, 'raise', integral, exp, function(err, result) {
if (err) { if (err) {
res.json(returnCode.BUSY); res.json(returnCode.BUSY);
} else { } else {
...@@ -350,8 +485,8 @@ router.post('/thread/:tid/raise', function(req, res, next) { ...@@ -350,8 +485,8 @@ router.post('/thread/:tid/raise', function(req, res, next) {
async.parallel([ async.parallel([
function(callback) { function(callback) {
//3.更新文章统计数据(点赞数) //3.更新文章统计数据(点赞数)
if (thread) { if (thread && thread.praise_count > 0) {
forumThreadService.updateThreadRaiseCount(tid, function(err, cb) { forumThreadService.updateThreadRaiseCountDec(tid, function(err, cb) {
if (err) { if (err) {
callback(err, null); callback(err, null);
} else { } else {
...@@ -363,16 +498,8 @@ router.post('/thread/:tid/raise', function(req, res, next) { ...@@ -363,16 +498,8 @@ router.post('/thread/:tid/raise', function(req, res, next) {
} }
}, },
function(callback) { function(callback) {
var entity = { //4.更新点赞日志
ent_code: req.session.user.ent_code, forumPraiseLogService.updatePraiseLog(praiseId, 1, function(err, result) {
user: user.getMobileUser(req),
thread: tid,
ip: req.ip,
comment: null,
type: 1
};
//4.创建点赞日志
forumPraiseLogService.createPraiseLog(entity, function(err, result) {
if (err) { if (err) {
callback(err, null); callback(err, null);
} else { } else {
...@@ -385,18 +512,17 @@ router.post('/thread/:tid/raise', function(req, res, next) { ...@@ -385,18 +512,17 @@ router.post('/thread/:tid/raise', function(req, res, next) {
console.error(err); console.error(err);
res.json(returnCode.BUSY); res.json(returnCode.BUSY);
} else { } else {
//更新点赞redis
forumLimitOperationService.checkLimitOperationProhibitionAddIntegral(userId, function(err, flag){ redisPraiseLog.get(ent_code,userId,'thread', function(error, docs){
if(err){ var list = docs;
console.error(err); for (var i = 0; i < list.length; i++) {
}else{ if (list[i].toString() == tid){
if(!flag){ list.splice(i,1);
httpService.sendRequest(req.session.user.ent_code, req.session.openUser.mid, 'thread_praise'); break;
} }
} }
redisPraiseLog.set(ent_code,userId,'thread',list, function(){});
}); });
forumThreadService.getThreadById(tid, function(err, doc) { forumThreadService.getThreadById(tid, function(err, doc) {
if (err) { if (err) {
...@@ -1034,16 +1160,9 @@ router.get('/thread/:tid/comment/list', function(req, res, next) { ...@@ -1034,16 +1160,9 @@ router.get('/thread/:tid/comment/list', function(req, res, next) {
var tid = req.params.tid || null; var tid = req.params.tid || null;
var pageNo = req.query.pageNo || 1; var pageNo = req.query.pageNo || 1;
var pageSize = req.query.pageSize || 10; var pageSize = req.query.pageSize || 10;
var ent_code = req.session.user.ent_code;
// var conditions = {
// ent_code: req.session.user.ent_code,
// thread: tid,
// level: '1',
// status:1
// };
var conditions = { var conditions = {
ent_code: req.session.user.ent_code, ent_code: ent_code,
thread: tid, thread: tid,
level: '1' level: '1'
}; };
...@@ -1055,7 +1174,22 @@ router.get('/thread/:tid/comment/list', function(req, res, next) { ...@@ -1055,7 +1174,22 @@ router.get('/thread/:tid/comment/list', function(req, res, next) {
console.log(err); console.log(err);
res.json(returnCode.BUSY); res.json(returnCode.BUSY);
} else { } else {
res.json(_.assign(results, returnCode.SUCCESS)); //判断是否已经点赞
redisPraiseLog.get(ent_code,user.getMobileUser(req),'comment', function(error, docs){
_.forEach(results.items, function(d,i) {
if(results.items[i].toObject){
results.items[i] = results.items[i].toObject();
}
results.items[i].isPraise = false;
for (var k = docs.length - 1; k >= 0; k--) {
if(results.items[i]._id == docs[k]){
results.items[i].isPraise = true;
break;
}
};
});
res.json(_.assign(results, returnCode.SUCCESS));
});
} }
}); });
} else { } else {
...@@ -1067,22 +1201,16 @@ router.get('/thread/:tid/comment/list/byFloor', function(req, res, next) { ...@@ -1067,22 +1201,16 @@ router.get('/thread/:tid/comment/list/byFloor', function(req, res, next) {
var tid = req.params.tid || null; var tid = req.params.tid || null;
var floor = req.query.floor || 1; var floor = req.query.floor || 1;
var ent_code = req.session.user.ent_code;
// var conditions = {
// ent_code: req.session.user.ent_code,
// thread: tid,
// level: '1',
// status:1
// };
var countConditions = { var countConditions = {
ent_code: req.session.user.ent_code, ent_code: ent_code,
thread: tid, thread: tid,
level: '1' level: '1'
}; };
var conditions = { var conditions = {
ent_code: req.session.user.ent_code, ent_code: ent_code,
thread: tid, thread: tid,
level: '1', level: '1',
floor: { floor: {
...@@ -1091,8 +1219,6 @@ router.get('/thread/:tid/comment/list/byFloor', function(req, res, next) { ...@@ -1091,8 +1219,6 @@ router.get('/thread/:tid/comment/list/byFloor', function(req, res, next) {
} }
}; };
//conditions.floor['$lte'] = 12;
if (tid) { if (tid) {
//获取最新5条评论 //获取最新5条评论
forumCommentService.count(countConditions, function(err, count) { forumCommentService.count(countConditions, function(err, count) {
...@@ -1105,8 +1231,23 @@ router.get('/thread/:tid/comment/list/byFloor', function(req, res, next) { ...@@ -1105,8 +1231,23 @@ router.get('/thread/:tid/comment/list/byFloor', function(req, res, next) {
console.log(err); console.log(err);
res.json(returnCode.BUSY); res.json(returnCode.BUSY);
} else { } else {
results.total = count; //判断是否已经点赞
res.json(_.assign(results, returnCode.SUCCESS)); redisPraiseLog.get(ent_code,user.getMobileUser(req),'comment', function(error, docs){
_.forEach(results.items, function(d,i) {
if(results.items[i].toObject){
results.items[i] = results.items[i].toObject();
}
results.items[i].isPraise = false;
for (var k = docs.length - 1; k >= 0; k--) {
if(results.items[i]._id == docs[k]){
results.items[i].isPraise = true;
break;
}
};
});
results.total = count;
res.json(_.assign(results, returnCode.SUCCESS));
});
} }
}); });
} }
...@@ -1125,20 +1266,138 @@ router.post('/thread/:tid/comment/:cid/raise', function(req, res, next) { ...@@ -1125,20 +1266,138 @@ router.post('/thread/:tid/comment/:cid/raise', function(req, res, next) {
var tid = req.params.tid || null; var tid = req.params.tid || null;
var cid = req.params.cid || null; var cid = req.params.cid || null;
var mid = req.session.openUser.mid; var mid = req.session.openUser.mid;
var ent_code = req.session.user.ent_code;
if (tid && cid) { if (tid && cid) {
var integral = req.session.openUser.integral || 0;
var exp = req.session.openUser.exp || 0;
//判断是否已经点赞
forumPraiseLogService.queryPraiseLog(tid, cid, user.getMobileUser(req), 2, function(err, doc) {
if (err) {
res.json(returnCode.BUSY);
} else {
//1.检查是否有权限
forumRolePermissionService.checkRolePermiss(req.session.user.ent_code, 'raise', integral, exp, function(err, result) {
if (err) {
res.json(returnCode.BUSY);
} else {
if (result) { //有操作权限
//2.获取论坛文章
forumThreadService.getThreadById(tid, function(err, thread) {
if (err) {
res.json(returnCode.BUSY);
} else {
async.parallel([
function(callback) {
forumCommentService.updatePraiseCount(cid, function(err, results) {
if (err) {
console.log(err);
callback(err, null);
} else {
callback(null, null);
}
});
},
function(callback) {
if(doc){
//4.更新点赞日志
forumPraiseLogService.updatePraiseLog(doc._id, 0, function(err, result) {
if (err) {
callback(err, null);
} else {
callback(null, null);
}
});
}else{
var entity = {
ent_code: req.session.user.ent_code,
user: user.getMobileUser(req),
thread: tid,
ip: req.ip,
comment: cid,
type: 2,
status :0
};
//4.创建点赞日志
forumPraiseLogService.createPraiseLog(entity, function(err, result) {
if (err) {
callback(err, null);
} else {
callback(null, null);
}
});
}
}
], function(err, results) {
if (err) {
console.error(err);
res.json(returnCode.BUSY);
} else {
// forumLimitOperationService.checkLimitOperationProhibitionAddIntegral(userId, function(err, flag){
// if(err){
// console.error(err);
// }else{
// if(!flag){
// httpService.sendRequest(req.session.user.ent_code, req.session.openUser.mid, 'comment_praise');
// }
// }
// });
//更新点赞redis
redisPraiseLog.get(ent_code,userId,'comment', function(error, docs){
var list = docs;
list.push(cid);
redisPraiseLog.set(ent_code,userId,'comment',list, function(){});
});
//返回点赞总数
forumCommentService.getCommentById(cid, function(err, doc) {
if (err) {
console.error(err);
res.json(returnCode.BUSY);
} else {
var rs = {};
rs.praise_count = doc.praise_count;
res.json(_.assign(rs, returnCode.SUCCESS));
}
});
}
});
}
});
} else {
res.json(returnCode.ACTION_NOT_PERMISSION);
}
}
});
}
});
} else {
res.json(returnCode.WRONG_PARAM);
}
});
//评论取消点赞
router.post('/thread/:tid/comment/:cid/cancelRaise', function(req, res, next) {
var userId = req.session.mobileForumUser.userId;
var tid = req.params.tid || null;
var cid = req.params.cid || null;
var mid = req.session.openUser.mid;
var ent_code = req.session.user.ent_code;
if (tid && cid) {
var integral = req.session.openUser.integral || 0; var integral = req.session.openUser.integral || 0;
var exp = req.session.openUser.exp || 0; var exp = req.session.openUser.exp || 0;
//判断是否已经点赞 //判断是否已经点赞
forumPraiseLogService.queryPraiseLog(tid, cid, user.getMobileUser(req), 2, function(err, logs) { forumPraiseLogService.queryPraiseLog(tid, cid, user.getMobileUser(req), 2, function(err, doc) {
if (err) { if (err) {
res.json(returnCode.BUSY); res.json(returnCode.BUSY);
} else { } else {
if (logs && logs.length > 0) { if (doc) {
res.json(returnCode.CAN_NOT_RAISE_REPEAT); var praiseId = doc._id;
} else {
//1.检查是否有权限 //1.检查是否有权限
forumRolePermissionService.checkRolePermiss(req.session.user.ent_code, 'raise', integral, exp, function(err, result) { forumRolePermissionService.checkRolePermiss(ent_code, 'raise', integral, exp, function(err, result) {
if (err) { if (err) {
res.json(returnCode.BUSY); res.json(returnCode.BUSY);
} else { } else {
...@@ -1150,7 +1409,7 @@ router.post('/thread/:tid/comment/:cid/raise', function(req, res, next) { ...@@ -1150,7 +1409,7 @@ router.post('/thread/:tid/comment/:cid/raise', function(req, res, next) {
} else { } else {
async.parallel([ async.parallel([
function(callback) { function(callback) {
forumCommentService.updatePraiseCount(cid, function(err, results) { forumCommentService.updatePraiseCountDec(cid, function(err, results) {
if (err) { if (err) {
console.log(err); console.log(err);
callback(err, null); callback(err, null);
...@@ -1160,16 +1419,8 @@ router.post('/thread/:tid/comment/:cid/raise', function(req, res, next) { ...@@ -1160,16 +1419,8 @@ router.post('/thread/:tid/comment/:cid/raise', function(req, res, next) {
}); });
}, },
function(callback) { function(callback) {
var entity = { //4.更新点赞日志
ent_code: req.session.user.ent_code, forumPraiseLogService.updatePraiseLog(praiseId, 1, function(err, result) {
user: user.getMobileUser(req),
thread: tid,
ip: req.ip,
comment: cid,
type: 2
};
//4.创建点赞日志
forumPraiseLogService.createPraiseLog(entity, function(err, result) {
if (err) { if (err) {
callback(err, null); callback(err, null);
} else { } else {
...@@ -1182,18 +1433,17 @@ router.post('/thread/:tid/comment/:cid/raise', function(req, res, next) { ...@@ -1182,18 +1433,17 @@ router.post('/thread/:tid/comment/:cid/raise', function(req, res, next) {
console.error(err); console.error(err);
res.json(returnCode.BUSY); res.json(returnCode.BUSY);
} else { } else {
//更新点赞redis
forumLimitOperationService.checkLimitOperationProhibitionAddIntegral(userId, function(err, flag){ redisPraiseLog.get(ent_code,userId,'comment', function(error, docs){
if(err){ var list = docs;
console.error(err); for (var i = 0; i < list.length; i++) {
}else{ if (list[i].toString() == cid){
if(!flag){ list.splice(i,1);
httpService.sendRequest(req.session.user.ent_code, req.session.openUser.mid, 'comment_praise'); break;
} }
} }
redisPraiseLog.set(ent_code,userId,'comment',list, function(){});
}); });
//返回点赞总数 //返回点赞总数
forumCommentService.getCommentById(cid, function(err, doc) { forumCommentService.getCommentById(cid, function(err, doc) {
if (err) { if (err) {
...@@ -1205,7 +1455,6 @@ router.post('/thread/:tid/comment/:cid/raise', function(req, res, next) { ...@@ -1205,7 +1455,6 @@ router.post('/thread/:tid/comment/:cid/raise', function(req, res, next) {
res.json(_.assign(rs, returnCode.SUCCESS)); res.json(_.assign(rs, returnCode.SUCCESS));
} }
}); });
} }
}); });
} }
...@@ -1215,7 +1464,7 @@ router.post('/thread/:tid/comment/:cid/raise', function(req, res, next) { ...@@ -1215,7 +1464,7 @@ router.post('/thread/:tid/comment/:cid/raise', function(req, res, next) {
} }
} }
}); });
} }
} }
}); });
......
...@@ -35,6 +35,11 @@ var ForumPraiseLogSchema = new Schema({ ...@@ -35,6 +35,11 @@ var ForumPraiseLogSchema = new Schema({
type: String, type: String,
require: true require: true
}, },
status: { //状态,0点赞,1取消点赞
type: Number,
require: true,
default: 0
},
created: { //点赞时间 created: { //点赞时间
type: Date, type: Date,
require: true, require: true,
......
'use strict'; 'use strict';
var mongoose = require('mongoose'); var mongoose = require('mongoose');
var ForumComment = mongoose.model('ForumComment'); var ForumComment = mongoose.model('ForumComment');
var async=require('async'); var async = require('async');
//创建评论 //创建评论
exports.createComment=function(entity,callback){ exports.createComment = function(entity, callback) {
var forum = new ForumComment(entity); var forum = new ForumComment(entity);
forum.save(function(err, forum) { forum.save(function(err, forum) {
if (err) { if (err) {
console.error(err); console.error(err);
callback(err,null); callback(err, null);
} else { } else {
callback(null,forum); callback(null, forum);
} }
}); });
}; };
//根据ID获取评论 //根据ID获取评论
exports.getCommentById=function(cid,callback){ exports.getCommentById = function(cid, callback) {
ForumComment.findById(cid, function(err, comment) { ForumComment.findById(cid, function(err, comment) {
if (err) { if (err) {
console.error(err); console.error(err);
callback(err,null); callback(err, null);
} else { } else {
callback(null,comment); callback(null, comment);
} }
}); });
}; };
//根据ID更新评论 //根据ID更新评论
exports.updateCommentStatusById=function(cid,status,callback){ exports.updateCommentStatusById = function(cid, status, callback) {
ForumComment.update({ _id: cid}, {"status" : status},null,function(err,result){ ForumComment.update({
if (err) { _id: cid
console.error(err); }, {
callback(err,null); "status": status
} else { }, null, function(err, result) {
callback(null,null); if (err) {
} console.error(err);
}); callback(err, null);
} else {
callback(null, null);
}
});
}; };
//根据ID更新评论 //根据ID更新评论
exports.updateCommentFloorById=function(cid,floor,callback){ exports.updateCommentFloorById = function(cid, floor, callback) {
ForumComment.update({ _id: cid}, {"floor" : floor},null,function(err,result){ ForumComment.update({
if (err) { _id: cid
console.error(err); }, {
callback(err,null); "floor": floor
} else { }, null, function(err, result) {
callback(null,null); if (err) {
} console.error(err);
}); callback(err, null);
} else {
callback(null, null);
}
});
}; };
//根据ID更新评论 entity //根据ID更新评论 entity
exports.updateCommentById=function(cid,entity,callback){ exports.updateCommentById = function(cid, entity, callback) {
ForumComment.update({ _id: cid}, entity, null, function(err,result){ ForumComment.update({
if (err) { _id: cid
console.error(err); }, entity, null, function(err, result) {
callback(err,null); if (err) {
} else { console.error(err);
callback(null,null); callback(err, null);
} } else {
}); callback(null, null);
}
});
}; };
//根据ID删除评论 //根据ID删除评论
exports.deleteCommentById=function(cid,callback){ exports.deleteCommentById = function(cid, callback) {
ForumComment.remove({ _id: cid},function(err,result){ ForumComment.remove({
if (err) { _id: cid
console.error(err); }, function(err, result) {
callback(err,null); if (err) {
} else { console.error(err);
callback(null,null); callback(err, null);
} } else {
}); callback(null, null);
}
});
}; };
//获取数量 //获取数量
function countAll(conditions,callback) { function countAll(conditions, callback) {
ForumComment.count(conditions, function (err, count) { ForumComment.count(conditions, function(err, count) {
if(err){ if (err) {
console.error(err); console.error(err);
callback(err,null); callback(err, null);
}else{ } else {
callback(null,count); callback(null, count);
} }
}); });
} }
//获取数量 //获取数量
exports.count = function(conditions,callback) { exports.count = function(conditions, callback) {
ForumComment.count(conditions, function (err, count) { ForumComment.count(conditions, function(err, count) {
if(err){ if (err) {
console.error(err); console.error(err);
callback(err,null); callback(err, null);
}else{ } else {
callback(null,count); callback(null, count);
} }
}); });
} }
//获取全部列表数据 //获取全部列表数据
exports.getAllComment= function(conditions,pageNo,pageSize,callback) { exports.getAllComment = function(conditions, pageNo, pageSize, callback) {
countAll(conditions,function(err,count){ countAll(conditions, function(err, count) {
if(err){ if (err) {
console.error(err); console.error(err);
callback(err,null); callback(err, null);
}else{ } else {
var skip = (pageNo - 1) * pageSize; var skip = (pageNo - 1) * pageSize;
var limit = count - skip > pageSize ? pageSize : (count - skip); var limit = count - skip > pageSize ? pageSize : (count - skip);
ForumComment.find(conditions).populate('from').populate('to').limit(limit).skip(skip).sort('-created').exec(function(err, docs) { ForumComment.find(conditions).populate('from').populate('to').limit(limit).skip(skip).sort('-created').exec(function(err, docs) {
if (err) { if (err) {
console.error(err); console.error(err);
callback(err,null); callback(err, null);
} else { } else {
var obj={}; var obj = {};
obj.total=count; obj.total = count;
obj.pageNo=pageNo; obj.pageNo = pageNo;
obj.pageSize=pageSize; obj.pageSize = pageSize;
obj.items=docs; obj.items = docs;
if (docs && docs.length > 0) { if (docs && docs.length > 0) {
var asyncTasks = []; var asyncTasks = [];
docs.forEach(function(doc){ docs.forEach(function(doc) {
asyncTasks.push(function(callback) { asyncTasks.push(function(callback) {
populateComment(doc, function(err,c){ populateComment(doc, function(err, c) {
if(err){ if (err) {
callback(err,null); callback(err, null);
}else{ } else {
var newobj = doc.toObject(); var newobj = doc.toObject();
newobj.comments = (c==null?[]:c); newobj.comments = (c == null ? [] : c);
callback(null,newobj); callback(null, newobj);
} }
}); });
}); });
}); });
async.parallel(asyncTasks, function(err, results) { async.parallel(asyncTasks, function(err, results) {
if (err) { if (err) {
console.log(err); console.log(err);
callback(null, null); callback(null, null);
} else { } else {
obj.items=results; obj.items = results;
callback(null,obj); callback(null, obj);
} }
}); });
}else{ } else {
callback(null,obj); callback(null, obj);
} }
} }
}); });
} }
}); });
}; };
//评论 //评论
function populateComment(doc, callback){ function populateComment(doc, callback) {
if (doc && doc.comments.length > 0) { if (doc && doc.comments.length > 0) {
var asyncTasks = []; var asyncTasks = [];
doc.comments.forEach(function(comment){ doc.comments.forEach(function(comment) {
asyncTasks.push(function(callback) { asyncTasks.push(function(callback) {
ForumComment.findOne({_id: comment,status:1}).populate({path:'from to', select:'uid nickName icon'}).exec(function(err,c){ ForumComment.findOne({
if (err) { _id: comment,
console.error(err); status: 1
callback(null, null); }).populate({
} else{ path: 'from to',
if(c){ select: 'uid nickName icon'
callback(null ,c); }).exec(function(err, c) {
}else{ if (err) {
callback(null); console.error(err);
} callback(null, null);
} } else {
}); if (c) {
callback(null, c);
} else {
callback(null);
}
}
});
}); });
}); });
async.parallel(asyncTasks, function(err, results) { async.parallel(asyncTasks, function(err, results) {
if (err) { if (err) {
console.log(err); console.log(err);
callback(null, null); callback(null, null);
} else { } else {
var comments = []; var comments = [];
for(var i=0;i<results.length;i+=1){ for (var i = 0; i < results.length; i += 1) {
if(results[i]){ if (results[i]) {
comments.push(results[i]); comments.push(results[i]);
} }
} }
callback(null,comments); callback(null, comments);
} }
}); });
} else{ } else {
callback(null, null); callback(null, null);
} }
} }
//原子更新评论点赞数 //原子更新评论点赞数
exports.updatePraiseCount=function(cid,callback){ exports.updatePraiseCount = function(cid, callback) {
ForumComment.update( ForumComment.update({
{_id:cid}, _id: cid
{$inc: {praise_count: 1 }}, }, {
{w:1,safe:true}, $inc: {
function(err,result){ praise_count: 1
if(err){ }
console.error(err); }, {
callback(err,null); w: 1,
}else{ safe: true
callback(null,null); },
} function(err, result) {
}); if (err) {
console.error(err);
callback(err, null);
} else {
callback(null, null);
}
});
};
//原子减少评论点赞数
exports.updatePraiseCountDec = function(cid, callback) {
ForumComment.findOne({
_id: cid
}).exec(function(err, c) {
if (err) {
console.error(err);
callback(null, null);
} else {
if (c && c.praise_count > 0) {
ForumComment.update({
_id: cid
}, {
$inc: {
praise_count: -1
}
}, {
w: 1,
safe: true
},
function(err, result) {
if (err) {
console.error(err);
callback(err, null);
} else {
callback(null, c);
}
});
} else {
callback(null);
}
}
});
}; };
//原子更新评论点赞数 //原子更新评论点赞数
exports.updateCommentCount=function(cid,callback){ exports.updateCommentCount = function(cid, callback) {
ForumComment.update( ForumComment.update({
{_id:cid}, _id: cid
{$inc: {comment_count: 1 }}, }, {
{w:1,safe:true}, $inc: {
function(err,result){ comment_count: 1
if(err){ }
console.error(err); }, {
callback(err,null); w: 1,
}else{ safe: true
callback(null,null); },
} function(err, result) {
}); if (err) {
console.error(err);
callback(err, null);
} else {
callback(null, null);
}
});
}; };
// 查找数组元素下标 // 查找数组元素下标
function indexOf(array,val) { function indexOf(array, val) {
for (var i = 0; i < array.length; i++) { for (var i = 0; i < array.length; i++) {
if (array[i] == val) return i; if (array[i] == val) return i;
} }
...@@ -241,206 +304,228 @@ function indexOf(array,val) { ...@@ -241,206 +304,228 @@ function indexOf(array,val) {
}; };
// 删除数组指定值 // 删除数组指定值
exports.remove = function(array,val) { exports.remove = function(array, val) {
var index = indexOf(array,val); var index = indexOf(array, val);
if (index > -1) { if (index > -1) {
array.splice(index, 1); array.splice(index, 1);
} }
return array; return array;
}; };
//更改评论状态 //更改评论状态
exports.changeStatus = function(cid,status,callback){ exports.changeStatus = function(cid, status, callback) {
ForumComment.update( ForumComment.update({
{_id:cid}, _id: cid
{status:status}, }, {
function(err,update){ status: status
callback(err,update); },
} function(err, update) {
); callback(err, update);
}
);
}; };
//获取评论列表 //获取评论列表
exports.getCommentList = function(conditions,pageNo,pageSize,callback){ exports.getCommentList = function(conditions, pageNo, pageSize, callback) {
countAll(conditions,function(err,count){ countAll(conditions, function(err, count) {
if(err){ if (err) {
callback(err); callback(err);
}else{ } else {
var skip = (pageNo - 1) * pageSize; var skip = (pageNo - 1) * pageSize;
var limit = count - skip > pageSize ? pageSize : (count - skip); var limit = count - skip > pageSize ? pageSize : (count - skip);
ForumComment.find(conditions).populate('from').populate('to').limit(limit).skip(skip).sort('-created').exec(function(err, docs) { ForumComment.find(conditions).populate('from').populate('to').limit(limit).skip(skip).sort('-created').exec(function(err, docs) {
if (err) { if (err) {
console.error(err); console.error(err);
callback(err,null); callback(err, null);
} else { } else {
var obj={}; var obj = {};
obj.total=count; obj.total = count;
obj.pageNo=pageNo; obj.pageNo = pageNo;
obj.pageSize=pageSize; obj.pageSize = pageSize;
obj.items=docs; obj.items = docs;
callback(null,obj); callback(null, obj);
} }
}); });
} }
}); });
}; };
exports.getCommentParent = function(cid,callback){ exports.getCommentParent = function(cid, callback) {
ForumComment.findOne({comments:{$in:[cid]}},function(err,doc){ ForumComment.findOne({
callback(err,doc); comments: {
}); $in: [cid]
}
}, function(err, doc) {
callback(err, doc);
});
}; };
//根据ID获取评论 //根据ID获取评论
exports.getPopulateCommentById=function(cid,callback){ exports.getPopulateCommentById = function(cid, callback) {
ForumComment.findById({_id:cid}).populate({path:'from to', select:'uid nickName icon'}).exec(function(err,c){ ForumComment.findById({
if (err) { _id: cid
console.error(err); }).populate({
callback(null, null); path: 'from to',
} else{ select: 'uid nickName icon'
callback(null ,c); }).exec(function(err, c) {
} if (err) {
}); console.error(err);
callback(null, null);
} else {
callback(null, c);
}
});
}; };
//我的评论 //我的评论
var countMyComment = function(conditions,callback) { var countMyComment = function(conditions, callback) {
ForumComment.find(conditions) ForumComment.find(conditions)
.count(conditions, function (err, count) { .count(conditions, function(err, count) {
if(err){ if (err) {
console.error(err); console.error(err);
callback(err,null); callback(err, null);
}else{ } else {
callback(null,count); callback(null, count);
} }
}); });
}; };
function populateParentComment(doc, callback){ function populateParentComment(doc, callback) {
if (doc && doc._id && doc.level === 2) { if (doc && doc._id && doc.level === 2) {
ForumComment.findOne({comments: { $elemMatch : doc._id },status:1}).exec(function(err,c){ ForumComment.findOne({
if (err) { comments: {
console.error(err); $elemMatch: doc._id
callback(null, null); },
} else{ status: 1
if(c){ }).exec(function(err, c) {
callback(null ,c); if (err) {
}else{ console.error(err);
callback(null); callback(null, null);
} } else {
} if (c) {
}); callback(null, c);
} else{ } else {
callback(null, null); callback(null);
} }
}
});
} else {
callback(null, null);
}
} }
//我的评论 //我的评论
exports.getMyComment = function(conditions,pageNo,pageSize,callback){ exports.getMyComment = function(conditions, pageNo, pageSize, callback) {
countMyComment(conditions,function(err,count){ countMyComment(conditions, function(err, count) {
if(err){ if (err) {
callback(err); callback(err);
}else{ } else {
var skip = (pageNo - 1) * pageSize; var skip = (pageNo - 1) * pageSize;
var limit = count - skip > pageSize ? pageSize : (count - skip); var limit = count - skip > pageSize ? pageSize : (count - skip);
ForumComment.find(conditions) ForumComment.find(conditions)
.populate({ .populate({
path: 'thread', path: 'thread',
select: '_id content title type level tag' select: '_id content title type level tag'
}).populate({path:'from to', select:'uid nickName icon'}).limit(limit).skip(skip).sort('-created').exec(function(err, docs) { }).populate({
if (err) { path: 'from to',
console.error(err); select: 'uid nickName icon'
callback(err,null); }).limit(limit).skip(skip).sort('-created').exec(function(err, docs) {
} else { if (err) {
var obj={}; console.error(err);
obj.total=count; callback(err, null);
obj.pageNo=pageNo; } else {
obj.pageSize=pageSize; var obj = {};
obj.items=docs; obj.total = count;
obj.pageNo = pageNo;
if (docs && docs.length > 0) { obj.pageSize = pageSize;
var asyncTasks = []; obj.items = docs;
docs.forEach(function(doc){
asyncTasks.push(function(callback) { if (docs && docs.length > 0) {
populateParentComment(doc, function(err,c){ var asyncTasks = [];
if(err){ docs.forEach(function(doc) {
callback(err,null); asyncTasks.push(function(callback) {
}else{ populateParentComment(doc, function(err, c) {
var newobj = doc.toObject(); if (err) {
newobj.parent = c; callback(err, null);
delete newobj.comments; } else {
callback(null,newobj); var newobj = doc.toObject();
} newobj.parent = c;
}); delete newobj.comments;
}); callback(null, newobj);
}); }
async.parallel(asyncTasks, function(err, results) { });
if (err) { });
console.log(err); });
callback(null, null); async.parallel(asyncTasks, function(err, results) {
} else { if (err) {
obj.items=results; console.log(err);
callback(null,obj); callback(null, null);
} } else {
}); obj.items = results;
callback(null, obj);
}else{ }
callback(null,obj); });
}
} } else {
}); callback(null, obj);
} }
}); }
});
}
});
}; };
//获取全部列表数据 //获取全部列表数据
exports.getAllCommentByThread= function(conditions,callback) { exports.getAllCommentByThread = function(conditions, callback) {
countAll(conditions,function(err,count){ countAll(conditions, function(err, count) {
if(err){ if (err) {
console.error(err); console.error(err);
callback(err,null); callback(err, null);
}else{ } else {
ForumComment.find(conditions).populate({ ForumComment.find(conditions).populate({
path: 'thread', path: 'thread',
select: 'from' select: 'from'
}).populate({path:'from to', select:'_id uid nickName icon'}).sort('-created').exec(function(err, docs) { }).populate({
if (err) { path: 'from to',
console.error(err); select: '_id uid nickName icon'
callback(err,null); }).sort('-created').exec(function(err, docs) {
} else { if (err) {
if (docs && docs.length > 0) { console.error(err);
var asyncTasks = []; callback(err, null);
docs.forEach(function(doc){ } else {
asyncTasks.push(function(callback) { if (docs && docs.length > 0) {
populateComment(doc, function(err,c){ var asyncTasks = [];
if(err){ docs.forEach(function(doc) {
callback(err,null); asyncTasks.push(function(callback) {
}else{ populateComment(doc, function(err, c) {
var newobj = doc.toObject(); if (err) {
newobj.comments = (c==null?[]:c); callback(err, null);
callback(null,newobj); } else {
} var newobj = doc.toObject();
}); newobj.comments = (c == null ? [] : c);
}); callback(null, newobj);
}); }
async.parallel(asyncTasks, function(err, results) { });
if (err) { });
console.log(err); });
callback(null, null); async.parallel(asyncTasks, function(err, results) {
} else { if (err) {
callback(null,results); console.log(err);
} callback(null, null);
}); } else {
callback(null, results);
}else{ }
callback(null,null); });
}
} } else {
}); callback(null, null);
} }
}); }
}; });
\ No newline at end of file }
});
};
...@@ -24,7 +24,7 @@ exports.queryPraiseLog=function(tid,cid,user,type,callback){ ...@@ -24,7 +24,7 @@ exports.queryPraiseLog=function(tid,cid,user,type,callback){
if(cid){ if(cid){
conditions.comment=cid; conditions.comment=cid;
} }
ForumPraiseLog.find(conditions).exec(function(err,docs){ ForumPraiseLog.findOne(conditions).sort({created : -1}).exec(function(err,docs){
if(err){ if(err){
callback(err,null); callback(err,null);
}else{ }else{
...@@ -33,6 +33,21 @@ exports.queryPraiseLog=function(tid,cid,user,type,callback){ ...@@ -33,6 +33,21 @@ exports.queryPraiseLog=function(tid,cid,user,type,callback){
}); });
}; };
//更新
exports.updatePraiseLog=function(id, status,callback){
ForumPraiseLog.findOneAndUpdate({
_id: id
}, {
status: status
}, function(err, doc) {
if (err) {
callback(err, null);
} else {
callback(null, doc);
}
});
};
exports.queryPraiseLogV2=function(conditions,callback){ exports.queryPraiseLogV2=function(conditions,callback){
ForumPraiseLog.find(conditions).populate('user').exec(function(err,docs){ ForumPraiseLog.find(conditions).populate('user').exec(function(err,docs){
...@@ -43,3 +58,14 @@ exports.queryPraiseLogV2=function(conditions,callback){ ...@@ -43,3 +58,14 @@ exports.queryPraiseLogV2=function(conditions,callback){
} }
}); });
}; };
exports.queryPraiseLogV3=function(conditions,callback){
ForumPraiseLog.find(conditions).exec(function(err,docs){
if(err){
callback(err,null);
}else{
callback(null,docs);
}
});
};
...@@ -882,6 +882,28 @@ exports.updateThreadRaiseCount = function(threadId, callback) { ...@@ -882,6 +882,28 @@ exports.updateThreadRaiseCount = function(threadId, callback) {
}); });
}; };
//减少文章点赞数
exports.updateThreadRaiseCountDec = function(threadId, callback) {
ForumThread.update({
_id: threadId
}, {
$inc: {
praise_count: -1
}
}, {
w: 1,
safe: true
},
function(err, result) {
if (err) {
console.error(err);
callback(err, null);
} else {
callback(null, null);
}
});
};
//更新文章分享数 //更新文章分享数
exports.updateThreadShareCount = function(threadId, callback) { exports.updateThreadShareCount = function(threadId, callback) {
ForumThread.update({ ForumThread.update({
......
'use strict';
var redis=global.redis;
var prefix = '_userPraiseLog_';
var expire = 60*60*12;
var _ = require('lodash');
var then = require('thenjs');
var forumPraiseLogService=require('../service/forumPraiseLogService');
function getKey(entcode,userId,type){
var key = entcode + userId + prefix + type;
return key;
}
function setToRedis(entcode,userId,type,value){
var key = getKey(entcode,userId,type);
if(!redis){
console.log('redis error');
return 'error'
}
redis.set(key, value, function(error, res){
redis.expire(key, expire);
return 'success'
});
}
exports.get=function(entcode,userId,type,callback){
var key = getKey(entcode,userId,type);
if(!redis){
console.log('redis error');
return callback && callback('error');
}
redis.get(key, function(error, res){
if(!res){
//不存在,先获取再返回
getPraiseLogs(entcode, userId, function(err){
redis.get(key, function(error, res){
return callback && callback(error, res.split(",") || 0);
});
});
}else{
return callback && callback(error, res.split(",") || 0);
}
});
};
exports.set=function(entcode,userId,type,value,callback){
var key = getKey(entcode,userId,type);
if(!redis){
console.log('redis error');
return callback && callback('error');
}
redis.set(key, value, function(error, res){
redis.expire(key, expire);
return callback && callback(error, 'success');
});
};
exports.clear = function(entcode,userId,type,callback){
var key = getKey(entcode,userId,type);
if(!redis){
console.log('redis error');
return callback && callback('error');
}
redis.del(key, function(error, res){
return callback && callback(error, !!res);
});
};
function getPraiseLogs(ent_code,userId,callback){
if(userId && ent_code){
var conditions = {
user:userId,
ent_code:ent_code,
status:{$ne : 1}
}
then.parallel([
function(cont) { //查询帖子点赞
conditions.type = 1;
forumPraiseLogService.queryPraiseLogV3(conditions, function(err, docs){
var threads = [];
_.forEach(docs, function(e) {
threads.push(e.thread);
});
cont(err, threads);
});
},
function(cont) { //查询评论点赞
conditions.type = 2;
forumPraiseLogService.queryPraiseLogV3(conditions, function(err, docs){
var comments = [];
_.forEach(docs, function(d) {
comments.push(d.comment);
});
cont(err, comments);
});
}
]).then(function(cont, results) {
setToRedis(ent_code,userId,'thread',results[0]);
setToRedis(ent_code,userId,'comment',results[1]);
callback(null);
}).fail(function(cont, err) {
console.error(err);
callback(err);
});
}else{
callback('err');
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment