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

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

parent 8666689d
......@@ -14,6 +14,7 @@ var forumTagService=require('../../service/forumTagService');
var forumCommentService=require('../../service/forumCommentService');
var forumThreadAttendService = require('../../service/forumThreadAttendService');
var httpService = require('../../service/httpService');
var redisPraiseLog = require('../../utils/redisPraiseLog');
var user = require('../../utils/user');
......@@ -153,9 +154,10 @@ router.get('/info/:fid/threads', function(req, res, next) {
var pageNo = req.query.pageNo || 1;
var pageSize = req.query.pageSize || 10;
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 = {
ent_code: req.session.user.ent_code,
ent_code: ent_code,
level: 1,
status:1
};
......@@ -192,7 +194,22 @@ router.get('/info/:fid/threads', function(req, res, next) {
console.error(err);
res.json(returnCode.BUSY);
} else {
//判断是否已经点赞
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) {
var pageNo = req.query.pageNo || 1;
var pageSize = req.query.pageSize || 10;
var content = req.query.content;
var ent_code = req.session.user.ent_code;
var conditions = {
ent_code: req.session.user.ent_code,
ent_code: ent_code,
status:1,
info: fid
};
......@@ -591,7 +608,22 @@ router.get('/info/:fid/serachThreads', function(req, res, next) {
console.error(err);
res.json(returnCode.BUSY);
} else {
//判断是否已经点赞
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
var forumLimitOperationService = require('../../service/forumLimitOperationService');
var forumThreadAttendService = require('../../service/forumThreadAttendService');
var commentTips = require('../../utils/commentTips');
var redisPraiseLog = require('../../utils/redisPraiseLog');
var httpService = require('../../service/httpService');
var forumAboutMEService = require('../../service/forumAboutMEService');
var user = require('../../utils/user');
......@@ -213,6 +214,7 @@ router.post('/thread/create', function(req, res, next) {
//获取目标论坛文章
router.get('/thread/:tid/get', function(req, res, next) {
var tid = req.params.tid || null;
var ent_code = req.session.user.ent_code;
if (tid) {
async.waterfall([
......@@ -254,9 +256,23 @@ router.get('/thread/:tid/get', function(req, res, next) {
console.error(err);
res.json(returnCode.BUSY);
} else {
//判断是否已经点赞
redisPraiseLog.get(ent_code,user.getMobileUser(req),'thread', function(error, docs){
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 {
......@@ -324,20 +340,18 @@ router.post('/thread/:tid/raise', 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, user.getMobileUser(req), 1, function(err, logs) {
forumPraiseLogService.queryPraiseLog(tid, null, user.getMobileUser(req), 1, function(err, doc) {
if (err) {
res.json(returnCode.BUSY);
} else {
if (logs && logs.length > 0) {
res.json(returnCode.CAN_NOT_RAISE_REPEAT);
} else {
//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) {
res.json(returnCode.BUSY);
} else {
......@@ -363,13 +377,23 @@ router.post('/thread/:tid/raise', function(req, res, next) {
}
},
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: req.session.user.ent_code,
ent_code: ent_code,
user: user.getMobileUser(req),
thread: tid,
ip: req.ip,
comment: null,
type: 1
type: 1,
status :0
};
//4.创建点赞日志
forumPraiseLogService.createPraiseLog(entity, function(err, result) {
......@@ -380,23 +404,125 @@ router.post('/thread/:tid/raise', function(req, res, next) {
}
});
}
}
], 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');
// }
// }
// });
forumLimitOperationService.checkLimitOperationProhibitionAddIntegral(userId, function(err, flag){
if(err){
//更新点赞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);
}else{
if(!flag){
httpService.sendRequest(req.session.user.ent_code, req.session.openUser.mid, 'thread_praise');
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.检查是否有权限
forumRolePermissionService.checkRolePermiss(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) {
//3.更新文章统计数据(点赞数)
if (thread && thread.praise_count > 0) {
forumThreadService.updateThreadRaiseCountDec(tid, function(err, cb) {
if (err) {
callback(err, null);
} else {
callback(null, null);
}
});
} else {
callback('cannot find thread by id', null);
}
},
function(callback) {
//4.更新点赞日志
forumPraiseLogService.updatePraiseLog(praiseId, 1, 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 {
//更新点赞redis
redisPraiseLog.get(ent_code,userId,'thread', function(error, docs){
var list = docs;
for (var i = 0; i < list.length; i++) {
if (list[i].toString() == tid){
list.splice(i,1);
break;
}
}
redisPraiseLog.set(ent_code,userId,'thread',list, function(){});
});
forumThreadService.getThreadById(tid, function(err, doc) {
if (err) {
......@@ -1034,16 +1160,9 @@ router.get('/thread/:tid/comment/list', function(req, res, next) {
var tid = req.params.tid || null;
var pageNo = req.query.pageNo || 1;
var pageSize = req.query.pageSize || 10;
// var conditions = {
// ent_code: req.session.user.ent_code,
// thread: tid,
// level: '1',
// status:1
// };
var ent_code = req.session.user.ent_code;
var conditions = {
ent_code: req.session.user.ent_code,
ent_code: ent_code,
thread: tid,
level: '1'
};
......@@ -1055,7 +1174,22 @@ router.get('/thread/:tid/comment/list', function(req, res, next) {
console.log(err);
res.json(returnCode.BUSY);
} else {
//判断是否已经点赞
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 {
......@@ -1067,22 +1201,16 @@ router.get('/thread/:tid/comment/list/byFloor', function(req, res, next) {
var tid = req.params.tid || null;
var floor = req.query.floor || 1;
// var conditions = {
// ent_code: req.session.user.ent_code,
// thread: tid,
// level: '1',
// status:1
// };
var ent_code = req.session.user.ent_code;
var countConditions = {
ent_code: req.session.user.ent_code,
ent_code: ent_code,
thread: tid,
level: '1'
};
var conditions = {
ent_code: req.session.user.ent_code,
ent_code: ent_code,
thread: tid,
level: '1',
floor: {
......@@ -1091,8 +1219,6 @@ router.get('/thread/:tid/comment/list/byFloor', function(req, res, next) {
}
};
//conditions.floor['$lte'] = 12;
if (tid) {
//获取最新5条评论
forumCommentService.count(countConditions, function(err, count) {
......@@ -1105,8 +1231,23 @@ router.get('/thread/:tid/comment/list/byFloor', function(req, res, next) {
console.log(err);
res.json(returnCode.BUSY);
} else {
//判断是否已经点赞
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,17 +1266,14 @@ router.post('/thread/:tid/comment/:cid/raise', function(req, res, next) {
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 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) {
res.json(returnCode.BUSY);
} else {
if (logs && logs.length > 0) {
res.json(returnCode.CAN_NOT_RAISE_REPEAT);
} else {
//1.检查是否有权限
forumRolePermissionService.checkRolePermiss(req.session.user.ent_code, 'raise', integral, exp, function(err, result) {
......@@ -1160,13 +1298,24 @@ router.post('/thread/:tid/comment/:cid/raise', function(req, res, next) {
});
},
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
type: 2,
status :0
};
//4.创建点赞日志
forumPraiseLogService.createPraiseLog(entity, function(err, result) {
......@@ -1177,23 +1326,124 @@ router.post('/thread/:tid/comment/:cid/raise', function(req, res, next) {
}
});
}
}
], 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');
// }
// }
// });
forumLimitOperationService.checkLimitOperationProhibitionAddIntegral(userId, function(err, flag){
if(err){
//更新点赞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);
}else{
if(!flag){
httpService.sendRequest(req.session.user.ent_code, req.session.openUser.mid, 'comment_praise');
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 exp = req.session.openUser.exp || 0;
//判断是否已经点赞
forumPraiseLogService.queryPraiseLog(tid, cid, user.getMobileUser(req), 2, function(err, doc) {
if (err) {
res.json(returnCode.BUSY);
} else {
if (doc) {
var praiseId = doc._id;
//1.检查是否有权限
forumRolePermissionService.checkRolePermiss(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.updatePraiseCountDec(cid, function(err, results) {
if (err) {
console.log(err);
callback(err, null);
} else {
callback(null, null);
}
});
},
function(callback) {
//4.更新点赞日志
forumPraiseLogService.updatePraiseLog(praiseId, 1, 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 {
//更新点赞redis
redisPraiseLog.get(ent_code,userId,'comment', function(error, docs){
var list = docs;
for (var i = 0; i < list.length; i++) {
if (list[i].toString() == cid){
list.splice(i,1);
break;
}
}
redisPraiseLog.set(ent_code,userId,'comment',list, function(){});
});
//返回点赞总数
forumCommentService.getCommentById(cid, function(err, doc) {
if (err) {
......@@ -1205,7 +1455,6 @@ router.post('/thread/:tid/comment/:cid/raise', function(req, res, next) {
res.json(_.assign(rs, returnCode.SUCCESS));
}
});
}
});
}
......
......@@ -35,6 +35,11 @@ var ForumPraiseLogSchema = new Schema({
type: String,
require: true
},
status: { //状态,0点赞,1取消点赞
type: Number,
require: true,
default: 0
},
created: { //点赞时间
type: Date,
require: true,
......
'use strict';
var mongoose = require('mongoose');
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);
forum.save(function(err, forum) {
if (err) {
console.error(err);
callback(err,null);
callback(err, null);
} else {
callback(null,forum);
callback(null, forum);
}
});
};
//根据ID获取评论
exports.getCommentById=function(cid,callback){
exports.getCommentById = function(cid, callback) {
ForumComment.findById(cid, function(err, comment) {
if (err) {
console.error(err);
callback(err,null);
callback(err, null);
} else {
callback(null,comment);
callback(null, comment);
}
});
};
//根据ID更新评论
exports.updateCommentStatusById=function(cid,status,callback){
ForumComment.update({ _id: cid}, {"status" : status},null,function(err,result){
exports.updateCommentStatusById = function(cid, status, callback) {
ForumComment.update({
_id: cid
}, {
"status": status
}, null, function(err, result) {
if (err) {
console.error(err);
callback(err,null);
callback(err, null);
} else {
callback(null,null);
callback(null, null);
}
});
};
//根据ID更新评论
exports.updateCommentFloorById=function(cid,floor,callback){
ForumComment.update({ _id: cid}, {"floor" : floor},null,function(err,result){
exports.updateCommentFloorById = function(cid, floor, callback) {
ForumComment.update({
_id: cid
}, {
"floor": floor
}, null, function(err, result) {
if (err) {
console.error(err);
callback(err,null);
callback(err, null);
} else {
callback(null,null);
callback(null, null);
}
});
};
//根据ID更新评论 entity
exports.updateCommentById=function(cid,entity,callback){
ForumComment.update({ _id: cid}, entity, null, function(err,result){
exports.updateCommentById = function(cid, entity, callback) {
ForumComment.update({
_id: cid
}, entity, null, function(err, result) {
if (err) {
console.error(err);
callback(err,null);
callback(err, null);
} else {
callback(null,null);
callback(null, null);
}
});
};
//根据ID删除评论
exports.deleteCommentById=function(cid,callback){
ForumComment.remove({ _id: cid},function(err,result){
exports.deleteCommentById = function(cid, callback) {
ForumComment.remove({
_id: cid
}, function(err, result) {
if (err) {
console.error(err);
callback(err,null);
callback(err, null);
} else {
callback(null,null);
callback(null, null);
}
});
};
//获取数量
function countAll(conditions,callback) {
ForumComment.count(conditions, function (err, count) {
if(err){
function countAll(conditions, callback) {
ForumComment.count(conditions, function(err, count) {
if (err) {
console.error(err);
callback(err,null);
}else{
callback(null,count);
callback(err, null);
} else {
callback(null, count);
}
});
}
//获取数量
exports.count = function(conditions,callback) {
ForumComment.count(conditions, function (err, count) {
if(err){
exports.count = function(conditions, callback) {
ForumComment.count(conditions, function(err, count) {
if (err) {
console.error(err);
callback(err,null);
}else{
callback(null,count);
callback(err, null);
} else {
callback(null, count);
}
});
}
//获取全部列表数据
exports.getAllComment= function(conditions,pageNo,pageSize,callback) {
exports.getAllComment = function(conditions, pageNo, pageSize, callback) {
countAll(conditions,function(err,count){
if(err){
countAll(conditions, function(err, count) {
if (err) {
console.error(err);
callback(err,null);
}else{
callback(err, null);
} else {
var skip = (pageNo - 1) * pageSize;
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) {
if (err) {
console.error(err);
callback(err,null);
callback(err, null);
} else {
var obj={};
obj.total=count;
obj.pageNo=pageNo;
obj.pageSize=pageSize;
obj.items=docs;
var obj = {};
obj.total = count;
obj.pageNo = pageNo;
obj.pageSize = pageSize;
obj.items = docs;
if (docs && docs.length > 0) {
var asyncTasks = [];
docs.forEach(function(doc){
docs.forEach(function(doc) {
asyncTasks.push(function(callback) {
populateComment(doc, function(err,c){
if(err){
callback(err,null);
}else{
populateComment(doc, function(err, c) {
if (err) {
callback(err, null);
} else {
var newobj = doc.toObject();
newobj.comments = (c==null?[]:c);
callback(null,newobj);
newobj.comments = (c == null ? [] : c);
callback(null, newobj);
}
});
});
......@@ -146,13 +156,13 @@ exports.getAllComment= function(conditions,pageNo,pageSize,callback) {
console.log(err);
callback(null, null);
} else {
obj.items=results;
callback(null,obj);
obj.items = results;
callback(null, obj);
}
});
}else{
callback(null,obj);
} else {
callback(null, obj);
}
}
});
......@@ -161,19 +171,25 @@ exports.getAllComment= function(conditions,pageNo,pageSize,callback) {
};
//评论
function populateComment(doc, callback){
function populateComment(doc, callback) {
if (doc && doc.comments.length > 0) {
var asyncTasks = [];
doc.comments.forEach(function(comment){
doc.comments.forEach(function(comment) {
asyncTasks.push(function(callback) {
ForumComment.findOne({_id: comment,status:1}).populate({path:'from to', select:'uid nickName icon'}).exec(function(err,c){
ForumComment.findOne({
_id: comment,
status: 1
}).populate({
path: 'from to',
select: 'uid nickName icon'
}).exec(function(err, c) {
if (err) {
console.error(err);
callback(null, null);
} else{
if(c){
callback(null ,c);
}else{
} else {
if (c) {
callback(null, c);
} else {
callback(null);
}
}
......@@ -186,54 +202,101 @@ function populateComment(doc, callback){
callback(null, null);
} else {
var comments = [];
for(var i=0;i<results.length;i+=1){
if(results[i]){
for (var i = 0; i < results.length; i += 1) {
if (results[i]) {
comments.push(results[i]);
}
}
callback(null,comments);
callback(null, comments);
}
});
} else{
} else {
callback(null, null);
}
}
//原子更新评论点赞数
exports.updatePraiseCount=function(cid,callback){
ForumComment.update(
{_id:cid},
{$inc: {praise_count: 1 }},
{w:1,safe:true},
function(err,result){
if(err){
exports.updatePraiseCount = function(cid, callback) {
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, 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,null);
callback(err, null);
} else {
callback(null, c);
}
});
} else {
callback(null);
}
}
});
};
//原子更新评论点赞数
exports.updateCommentCount=function(cid,callback){
ForumComment.update(
{_id:cid},
{$inc: {comment_count: 1 }},
{w:1,safe:true},
function(err,result){
if(err){
exports.updateCommentCount = function(cid, callback) {
ForumComment.update({
_id: cid
}, {
$inc: {
comment_count: 1
}
}, {
w: 1,
safe: true
},
function(err, result) {
if (err) {
console.error(err);
callback(err,null);
}else{
callback(null,null);
callback(err, null);
} else {
callback(null, null);
}
});
};
// 查找数组元素下标
function indexOf(array,val) {
function indexOf(array, val) {
for (var i = 0; i < array.length; i++) {
if (array[i] == val) return i;
}
......@@ -241,63 +304,74 @@ function indexOf(array,val) {
};
// 删除数组指定值
exports.remove = function(array,val) {
var index = indexOf(array,val);
exports.remove = function(array, val) {
var index = indexOf(array, val);
if (index > -1) {
array.splice(index, 1);
}
return array;
};
//更改评论状态
exports.changeStatus = function(cid,status,callback){
ForumComment.update(
{_id:cid},
{status:status},
function(err,update){
callback(err,update);
exports.changeStatus = function(cid, status, callback) {
ForumComment.update({
_id: cid
}, {
status: status
},
function(err, update) {
callback(err, update);
}
);
};
//获取评论列表
exports.getCommentList = function(conditions,pageNo,pageSize,callback){
countAll(conditions,function(err,count){
if(err){
exports.getCommentList = function(conditions, pageNo, pageSize, callback) {
countAll(conditions, function(err, count) {
if (err) {
callback(err);
}else{
} else {
var skip = (pageNo - 1) * pageSize;
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) {
if (err) {
console.error(err);
callback(err,null);
callback(err, null);
} else {
var obj={};
obj.total=count;
obj.pageNo=pageNo;
obj.pageSize=pageSize;
obj.items=docs;
var obj = {};
obj.total = count;
obj.pageNo = pageNo;
obj.pageSize = pageSize;
obj.items = docs;
callback(null,obj);
callback(null, obj);
}
});
}
});
};
exports.getCommentParent = function(cid,callback){
ForumComment.findOne({comments:{$in:[cid]}},function(err,doc){
callback(err,doc);
exports.getCommentParent = function(cid, callback) {
ForumComment.findOne({
comments: {
$in: [cid]
}
}, function(err, doc) {
callback(err, doc);
});
};
//根据ID获取评论
exports.getPopulateCommentById=function(cid,callback){
ForumComment.findById({_id:cid}).populate({path:'from to', select:'uid nickName icon'}).exec(function(err,c){
exports.getPopulateCommentById = function(cid, callback) {
ForumComment.findById({
_id: cid
}).populate({
path: 'from to',
select: 'uid nickName icon'
}).exec(function(err, c) {
if (err) {
console.error(err);
callback(null, null);
} else{
callback(null ,c);
} else {
callback(null, c);
}
});
};
......@@ -305,42 +379,47 @@ exports.getPopulateCommentById=function(cid,callback){
//我的评论
var countMyComment = function(conditions,callback) {
var countMyComment = function(conditions, callback) {
ForumComment.find(conditions)
.count(conditions, function (err, count) {
if(err){
.count(conditions, function(err, count) {
if (err) {
console.error(err);
callback(err,null);
}else{
callback(null,count);
callback(err, null);
} else {
callback(null, count);
}
});
};
function populateParentComment(doc, callback){
function populateParentComment(doc, callback) {
if (doc && doc._id && doc.level === 2) {
ForumComment.findOne({comments: { $elemMatch : doc._id },status:1}).exec(function(err,c){
ForumComment.findOne({
comments: {
$elemMatch: doc._id
},
status: 1
}).exec(function(err, c) {
if (err) {
console.error(err);
callback(null, null);
} else{
if(c){
callback(null ,c);
}else{
} else {
if (c) {
callback(null, c);
} else {
callback(null);
}
}
});
} else{
} else {
callback(null, null);
}
}
//我的评论
exports.getMyComment = function(conditions,pageNo,pageSize,callback){
countMyComment(conditions,function(err,count){
if(err){
exports.getMyComment = function(conditions, pageNo, pageSize, callback) {
countMyComment(conditions, function(err, count) {
if (err) {
callback(err);
}else{
} else {
var skip = (pageNo - 1) * pageSize;
var limit = count - skip > pageSize ? pageSize : (count - skip);
......@@ -348,29 +427,32 @@ exports.getMyComment = function(conditions,pageNo,pageSize,callback){
.populate({
path: 'thread',
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({
path: 'from to',
select: 'uid nickName icon'
}).limit(limit).skip(skip).sort('-created').exec(function(err, docs) {
if (err) {
console.error(err);
callback(err,null);
callback(err, null);
} else {
var obj={};
obj.total=count;
obj.pageNo=pageNo;
obj.pageSize=pageSize;
obj.items=docs;
var obj = {};
obj.total = count;
obj.pageNo = pageNo;
obj.pageSize = pageSize;
obj.items = docs;
if (docs && docs.length > 0) {
var asyncTasks = [];
docs.forEach(function(doc){
docs.forEach(function(doc) {
asyncTasks.push(function(callback) {
populateParentComment(doc, function(err,c){
if(err){
callback(err,null);
}else{
populateParentComment(doc, function(err, c) {
if (err) {
callback(err, null);
} else {
var newobj = doc.toObject();
newobj.parent = c;
delete newobj.comments;
callback(null,newobj);
callback(null, newobj);
}
});
});
......@@ -380,13 +462,13 @@ exports.getMyComment = function(conditions,pageNo,pageSize,callback){
console.log(err);
callback(null, null);
} else {
obj.items=results;
callback(null,obj);
obj.items = results;
callback(null, obj);
}
});
}else{
callback(null,obj);
} else {
callback(null, obj);
}
}
});
......@@ -396,33 +478,36 @@ exports.getMyComment = function(conditions,pageNo,pageSize,callback){
//获取全部列表数据
exports.getAllCommentByThread= function(conditions,callback) {
exports.getAllCommentByThread = function(conditions, callback) {
countAll(conditions,function(err,count){
if(err){
countAll(conditions, function(err, count) {
if (err) {
console.error(err);
callback(err,null);
}else{
callback(err, null);
} else {
ForumComment.find(conditions).populate({
path: 'thread',
select: 'from'
}).populate({path:'from to', select:'_id uid nickName icon'}).sort('-created').exec(function(err, docs) {
}).populate({
path: 'from to',
select: '_id uid nickName icon'
}).sort('-created').exec(function(err, docs) {
if (err) {
console.error(err);
callback(err,null);
callback(err, null);
} else {
if (docs && docs.length > 0) {
var asyncTasks = [];
docs.forEach(function(doc){
docs.forEach(function(doc) {
asyncTasks.push(function(callback) {
populateComment(doc, function(err,c){
if(err){
callback(err,null);
}else{
populateComment(doc, function(err, c) {
if (err) {
callback(err, null);
} else {
var newobj = doc.toObject();
newobj.comments = (c==null?[]:c);
callback(null,newobj);
newobj.comments = (c == null ? [] : c);
callback(null, newobj);
}
});
});
......@@ -432,12 +517,12 @@ exports.getAllCommentByThread= function(conditions,callback) {
console.log(err);
callback(null, null);
} else {
callback(null,results);
callback(null, results);
}
});
}else{
callback(null,null);
} else {
callback(null, null);
}
}
});
......
......@@ -24,7 +24,7 @@ exports.queryPraiseLog=function(tid,cid,user,type,callback){
if(cid){
conditions.comment=cid;
}
ForumPraiseLog.find(conditions).exec(function(err,docs){
ForumPraiseLog.findOne(conditions).sort({created : -1}).exec(function(err,docs){
if(err){
callback(err,null);
}else{
......@@ -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){
ForumPraiseLog.find(conditions).populate('user').exec(function(err,docs){
......@@ -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) {
});
};
//减少文章点赞数
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) {
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