Commit 6bec50cc authored by 张淼's avatar 张淼

1

parent 9c7bab2a
...@@ -7,6 +7,10 @@ var mongoose = require('mongoose'); ...@@ -7,6 +7,10 @@ var mongoose = require('mongoose');
var forumTagService=require('../../service/forumTagService'); var forumTagService=require('../../service/forumTagService');
var forumThreadService=require('../../service/forumThreadService'); var forumThreadService=require('../../service/forumThreadService');
var forumUserThreadControlService=require('../../service/forumUserThreadControlService');
var user=require('../../utils/user');
var async=require('async');
module.exports = function(app) { module.exports = function(app) {
app.use('/v1/forum', router); app.use('/v1/forum', router);
...@@ -41,14 +45,39 @@ router.get('/tag/:tid/threads', function(req, res, next) { ...@@ -41,14 +45,39 @@ router.get('/tag/:tid/threads', function(req, res, next) {
}; };
if(tid){ if(tid){
conditions.tag={$in:[tid]}; conditions.tag={$in:[tid]};
forumThreadService.getAllThreadByFid(conditions,pageNo,pageSize,function(err,results){
if(err){ async.waterfall([
console.error(err); function(callback){
res.json(returnCode.BUSY); forumUserThreadControlService.getUserThreadControlById(user.getMobileUser(),function(err,doc){
}else{ if(err){
res.json(_.assign(results, returnCode.SUCCESS)); callback(err,null);
} }else{
}); if(doc){
callback(null,doc);
}else{
callback(null,null);
}
}
});
}
],function(err,result){
if(err){
console.error(err);
res.json(returnCode.BUSY);
}else{
if(result){
conditions._id={$nin:result.thread};
}
forumThreadService.getAllThreadByFid(conditions,pageNo,pageSize,function(err,results){
if(err){
console.error(err);
res.json(returnCode.BUSY);
}else{
res.json(_.assign(results, returnCode.SUCCESS));
}
});
}
});
}else{ }else{
res.json(returnCode.WRONG_PARAM); res.json(returnCode.WRONG_PARAM);
} }
......
This diff is collapsed.
...@@ -21,9 +21,17 @@ var ForumCommentSchema = new Schema({ ...@@ -21,9 +21,17 @@ var ForumCommentSchema = new Schema({
index: true, index: true,
ref: 'ForumUser' ref: 'ForumUser'
}, },
comments: { //评论的评论 thread:{//文章
type: [ForumCommentSchema] type: Schema.Types.ObjectId,
index: true,
ref: 'ForumThread',
require:true
},
level:{//评论等级 1、父评论 2、子评论
type:String,
require:true
}, },
comments:[{type: Schema.Types.ObjectId, ref: 'ForumComment'}], //评论的评论
content: { //评论内容 content: { //评论内容
type: String, type: String,
require: true require: true
...@@ -32,6 +40,16 @@ var ForumCommentSchema = new Schema({ ...@@ -32,6 +40,16 @@ var ForumCommentSchema = new Schema({
type: String, type: String,
require: true require: true
}, },
comment_count: { //评论数量
type: Number,
require: true,
default: 0
},
praise_count: { //点赞数量
type: Number,
require: true,
default: 0
},
created: { //评论时间 created: { //评论时间
type: Date, type: Date,
require: true, require: true,
......
...@@ -15,12 +15,22 @@ var ForumPraiseLogSchema = new Schema({ ...@@ -15,12 +15,22 @@ var ForumPraiseLogSchema = new Schema({
index: true, index: true,
ref: 'ForumUser' ref: 'ForumUser'
}, },
type:{//点赞类型 1 文章 2 评论
type: Number,
require: true,
default: 1
},
thread: { //点赞话题 thread: { //点赞话题
type: Schema.Types.ObjectId, type: Schema.Types.ObjectId,
require: true, require: true,
index: true, index: true,
ref: 'ForumThread' ref: 'ForumThread'
}, },
comment: { //点赞评论
type: Schema.Types.ObjectId,
index: true,
ref: 'ForumComment'
},
ip: { //IP地址 ip: { //IP地址
type: String, type: String,
require: true require: true
......
...@@ -2,6 +2,8 @@ ...@@ -2,6 +2,8 @@
var mongoose = require('mongoose'); var mongoose = require('mongoose');
var ForumComment = mongoose.model('ForumComment'); var ForumComment = mongoose.model('ForumComment');
var async=require('async');
//创建评论 //创建评论
exports.createComment=function(entity,callback){ exports.createComment=function(entity,callback){
var forum = new ForumComment(entity); var forum = new ForumComment(entity);
...@@ -37,4 +39,146 @@ exports.updateCommentById=function(cid,entity,callback){ ...@@ -37,4 +39,146 @@ exports.updateCommentById=function(cid,entity,callback){
callback(null,null); callback(null,null);
} }
}); });
}; };
\ No newline at end of file
//根据ID更新评论
exports.deleteCommentById=function(cid,callback){
ForumComment.remove({ _id: cid},function(err,result){
if (err) {
console.error(err);
callback(err,null);
} else {
callback(null,null);
}
});
};
//获取数量
function countAll(conditions,callback) {
ForumComment.count(conditions, function (err, count) {
if(err){
console.error(err);
callback(err,null);
}else{
callback(null,count);
}
});
}
//获取全部列表数据
exports.getAllComment= function(conditions,pageNo,pageSize,callback) {
countAll(conditions,function(err,count){
if(err){
console.error(err);
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);
} else {
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){
asyncTasks.push(function(callback) {
populateComment(doc, function(err,c){
if(err){
callback(err,null);
}else{
var newobj = doc.toObject();
newobj.comments = c;
callback(null,newobj);
}
});
});
});
async.parallel(asyncTasks, function(err, results) {
if (err) {
console.log(err);
callback(null, null);
} else {
obj.items=results;
callback(null,obj);
}
});
}else{
callback(null,obj);
}
}
});
}
});
};
//评论
function populateComment(doc, callback){
if (doc && doc.comments.length > 0) {
var asyncTasks = [];
doc.comments.forEach(function(comment){
asyncTasks.push(function(callback) {
ForumComment.findOne({_id: comment}).populate({path:'from to', select:'uid nickName icon'}).exec(function(err,c){
if (err) {
console.error(err);
callback(null, null);
} else{
callback(null ,c);
}
});
});
});
async.parallel(asyncTasks, function(err, results) {
if (err) {
console.log(err);
callback(null, null);
} else {
// console.log(results);
callback(null, results);
}
});
} 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){
console.error(err);
callback(err,null);
}else{
callback(null,null);
}
});
};
//原子更新评论点赞数
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);
}
});
};
...@@ -14,3 +14,20 @@ exports.createPraiseLog=function(entity,callback){ ...@@ -14,3 +14,20 @@ exports.createPraiseLog=function(entity,callback){
} }
}); });
}; };
exports.queryPraiseLog=function(tid,cid,user,callback){
var conditions={
user:user,
thread:tid
};
if(cid){
conditions.comment=cid;
}
ForumPraiseLog.find(conditions).exec(function(err,docs){
if(err){
callback(err,null);
}else{
callback(null,docs);
}
});
};
...@@ -70,7 +70,9 @@ function getRolePermiss(ent_code,integral,exp,callback){ ...@@ -70,7 +70,9 @@ function getRolePermiss(ent_code,integral,exp,callback){
if(rules && rules.length>0){ if(rules && rules.length>0){
for(var j=0;j<rules.length;j=j+1){ for(var j=0;j<rules.length;j=j+1){
var json=rules[j]; var json=rules[j];
json=JSON.parse(json); // console.log(json);
// json= {value: '1-2', key: 'integral' }
// json=JSON.parse(json);
var key=json.key; var key=json.key;
var value=json.value; var value=json.value;
if(value && value!==''){ if(value && value!==''){
...@@ -84,15 +86,20 @@ function getRolePermiss(ent_code,integral,exp,callback){ ...@@ -84,15 +86,20 @@ function getRolePermiss(ent_code,integral,exp,callback){
var ge=array[0]; var ge=array[0];
var le=array[1]; var le=array[1];
var result=true; var result=true;
var isMatch=0;
// console.log(defaultValue);
if(ge && ge!==''){ if(ge && ge!==''){
isMatch=1;
result=Number(defaultValue)>=Number(ge); result=Number(defaultValue)>=Number(ge);
} }
if(result && le && le!==''){ if(result && le && le!==''){
isMatch=1;
result=Number(defaultValue)<=Number(le); result=Number(defaultValue)<=Number(le);
} }
if(result){ if(result && isMatch===1){
obj=rolePermission; obj=rolePermission;
break; callback(null,obj);
return;
} }
} }
} }
...@@ -115,14 +122,15 @@ exports.checkRolePermiss=function(ent_code,action,integral,exp,callback){ ...@@ -115,14 +122,15 @@ exports.checkRolePermiss=function(ent_code,action,integral,exp,callback){
if(rolePermission && rolePermission.permission){ if(rolePermission && rolePermission.permission){
var permissions=rolePermission.permission; var permissions=rolePermission.permission;
for(var i=0;i<permissions.length;i=i+1){ for(var i=0;i<permissions.length;i=i+1){
var obj=JSON.parse(permissions[i]); // var obj=JSON.parse(permissions[i]);
var obj=permissions[i];
var tmpAction=obj.action; var tmpAction=obj.action;
var value=obj.value; var value=obj.value;
if(tmpAction===action){ if(tmpAction===action){
if(value==='1'){ if(value==='1'){
result=true; result=true;
break;
} }
break;
} }
} }
} }
......
...@@ -2,6 +2,9 @@ ...@@ -2,6 +2,9 @@
var mongoose = require('mongoose'); var mongoose = require('mongoose');
var ForumThread = mongoose.model('ForumThread'); var ForumThread = mongoose.model('ForumThread');
var ForumComment = mongoose.model('ForumComment'); var ForumComment = mongoose.model('ForumComment');
var forumCommentService = require('./forumCommentService');
var async = require('async'); var async = require('async');
//创建文章 //创建文章
...@@ -19,32 +22,64 @@ exports.createThread=function(entity,callback){ ...@@ -19,32 +22,64 @@ exports.createThread=function(entity,callback){
//根据ID获取文章 //根据ID获取文章
exports.getThreadById=function(tid,callback){ exports.getThreadById=function(tid,callback){
var conditions={ async.parallel([
_id:tid function(cb){
}; var conditions={
ForumThread.find(conditions).populate('from').populate('info').populate({path:'comments',options:{limit:5}, select:'from to created content'}).exec(function(err, docs) { _id:tid
if (err) { };
console.error(err); ForumThread.find(conditions).populate('from').populate('info').exec(function(err, docs) {
callback(err,null); if (err) {
} else { console.error(err);
var thread={}; callback(err,null);
} else {
if (docs && docs.length > 0) { var thread={};
thread=docs[0]; if (docs && docs.length > 0) {
populateComment(thread, function(err,results){ thread=docs[0];
if (err) { cb(null,thread);
console.log(err); // populateComment(thread, function(err,results){
callback(null, null); // if (err) {
} else { // console.log(err);
callback(null,thread); // cb(null, null);
} // } else {
}); // var threadObj = thread.toObject();
// threadObj.comments = results;
// cb(null,threadObj);
// }
// });
}else{
cb(null,thread);
}
}
});
},
function(cb){
var conditions={
thread:tid,
level:'1'
};
//获取最新5条评论
forumCommentService.getAllComment(conditions,1,5,function(err,results){
if(err){
console.log(err);
cb(err,null);
}else{ }else{
callback(null,thread); cb(null,results);
} }
} });
}); }
],function(err,results){
if(err){
callback(err,null);
}else{
var thread=results[0];
var comments=results[1];
// console.log(comments);
var threadObj=thread.toObject();
threadObj.comments=comments;
callback(null,threadObj);
}
});
}; };
//根据ID更新文章 //根据ID更新文章
...@@ -71,30 +106,72 @@ exports.deleteThreadById=function(tid,callback){ ...@@ -71,30 +106,72 @@ exports.deleteThreadById=function(tid,callback){
}); });
}; };
//一级评论
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.populate(comment, {path:'from to', select:'uid nickName icon'} , function(err, c){ ForumComment.populate(comment, {path:'from to', select:'uid nickName icon comments'} , function(err, c){
if (err) { if (err) {
console.error(err); console.error(err);
callback(null, null); callback(null, null);
} else{ } else{
callback(null ,null); if(comment.comments){
populateSubComment(comment,function(err, results){
if(err){
console.error(err);
callback(null, null);
} else {
var newobj = comment.toObject();
newobj.comments = results;
callback(null,newobj);
}
});
}else{
callback(null,null);
}
} }
}); });
}); });
});
async.parallel(asyncTasks, function(err, results) {
if (err) {
console.log(err);
callback(null, null);
} else {
// console.log(results);
callback(null, results);
}
});
} else{
callback(null, null);
}
}
//二级评论
function populateSubComment(subComments, callback){
if (subComments.comments && subComments.comments.length > 0) {
var asyncTasks = [];
subComments.comments.forEach(function(comment){
asyncTasks.push(function(callback) {
ForumComment.findOne({_id: comment}).populate({path:'from to', select:'uid nickName icon'}).exec(function(err, c){
if (err) {
console.error(err);
callback(null, null);
} else{
callback(null ,c);
}
});
});
}); });
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 {
callback(null, null); callback(null, results);
} }
}); });
...@@ -130,7 +207,7 @@ exports.getAllThreadByFid= function(conditions,pageNo,pageSize,callback) { ...@@ -130,7 +207,7 @@ exports.getAllThreadByFid= function(conditions,pageNo,pageSize,callback) {
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);
ForumThread.find(conditions).populate('from').populate('info').populate({path:'tag'}).populate({path:'comments',options:{limit:5}, select:'from to created content'}).limit(limit).skip(skip).sort('-top created').exec(function(err, docs) { ForumThread.find(conditions).populate('from').populate('info').populate({path:'tag'}).populate({path:'comments',options:{limit:5,sort:'-created'}, select:'from to created content'}).limit(limit).skip(skip).sort('-top created').exec(function(err, docs) {
if (err) { if (err) {
console.error(err); console.error(err);
callback(err,null); callback(err,null);
...@@ -182,3 +259,51 @@ exports.updateTopByThreadId=function(infoId,threadId,callback){ ...@@ -182,3 +259,51 @@ exports.updateTopByThreadId=function(infoId,threadId,callback){
} }
}); });
}; };
//更新文章点赞数
exports.updateThreadRaiseCount=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(
{_id:threadId},
{$inc: { share_count: 1 }},
{w:1,safe:true},
function(err,result){
if(err){
console.error(err);
callback(err,null);
}else{
callback(null,null);
}
});
};
//更新文章分享数
exports.updateThreadCommentCount=function(threadId,callback){
ForumThread.update(
{_id:threadId},
{$inc: { comment_count: 1 }},
{w:1,safe:true},
function(err,result){
if(err){
console.error(err);
callback(err,null);
}else{
callback(null,null);
}
});
};
...@@ -25,8 +25,8 @@ exports.getUserThreadControlById=function(uid,callback){ ...@@ -25,8 +25,8 @@ exports.getUserThreadControlById=function(uid,callback){
}); });
}; };
exports.updateUserThreadControlById=function(uid,entity,callback){ exports.updateUserThreadControlById=function(id,entity,callback){
ForumUserThreadCotrol.update({ _id: uid}, entity,null,function(err,result){ ForumUserThreadCotrol.update({ _id: id}, entity,null,function(err,result){
if (err) { if (err) {
console.error(err); console.error(err);
callback(err,null); callback(err,null);
......
...@@ -33,6 +33,10 @@ module.exports = { ...@@ -33,6 +33,10 @@ module.exports = {
ACTION_NOT_PERMISSION: { ACTION_NOT_PERMISSION: {
errorcode: 10005, errorcode: 10005,
errormsg: '没有权限' errormsg: '没有权限'
},
CAN_NOT_RAISE_REPEAT: {
errorcode: 10006,
errormsg: '不能重复点赞'
} }
......
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