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

1

parent 9c7bab2a
......@@ -7,6 +7,10 @@ var mongoose = require('mongoose');
var forumTagService=require('../../service/forumTagService');
var forumThreadService=require('../../service/forumThreadService');
var forumUserThreadControlService=require('../../service/forumUserThreadControlService');
var user=require('../../utils/user');
var async=require('async');
module.exports = function(app) {
app.use('/v1/forum', router);
......@@ -41,14 +45,39 @@ router.get('/tag/:tid/threads', function(req, res, next) {
};
if(tid){
conditions.tag={$in:[tid]};
forumThreadService.getAllThreadByFid(conditions,pageNo,pageSize,function(err,results){
if(err){
console.error(err);
res.json(returnCode.BUSY);
}else{
res.json(_.assign(results, returnCode.SUCCESS));
}
});
async.waterfall([
function(callback){
forumUserThreadControlService.getUserThreadControlById(user.getMobileUser(),function(err,doc){
if(err){
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{
res.json(returnCode.WRONG_PARAM);
}
......
This diff is collapsed.
......@@ -21,9 +21,17 @@ var ForumCommentSchema = new Schema({
index: true,
ref: 'ForumUser'
},
comments: { //评论的评论
type: [ForumCommentSchema]
thread:{//文章
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: { //评论内容
type: String,
require: true
......@@ -32,6 +40,16 @@ var ForumCommentSchema = new Schema({
type: String,
require: true
},
comment_count: { //评论数量
type: Number,
require: true,
default: 0
},
praise_count: { //点赞数量
type: Number,
require: true,
default: 0
},
created: { //评论时间
type: Date,
require: true,
......
......@@ -15,12 +15,22 @@ var ForumPraiseLogSchema = new Schema({
index: true,
ref: 'ForumUser'
},
type:{//点赞类型 1 文章 2 评论
type: Number,
require: true,
default: 1
},
thread: { //点赞话题
type: Schema.Types.ObjectId,
require: true,
index: true,
ref: 'ForumThread'
},
comment: { //点赞评论
type: Schema.Types.ObjectId,
index: true,
ref: 'ForumComment'
},
ip: { //IP地址
type: String,
require: true
......
......@@ -2,6 +2,8 @@
var mongoose = require('mongoose');
var ForumComment = mongoose.model('ForumComment');
var async=require('async');
//创建评论
exports.createComment=function(entity,callback){
var forum = new ForumComment(entity);
......@@ -37,4 +39,146 @@ exports.updateCommentById=function(cid,entity,callback){
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){
}
});
};
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){
if(rules && rules.length>0){
for(var j=0;j<rules.length;j=j+1){
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 value=json.value;
if(value && value!==''){
......@@ -84,15 +86,20 @@ function getRolePermiss(ent_code,integral,exp,callback){
var ge=array[0];
var le=array[1];
var result=true;
var isMatch=0;
// console.log(defaultValue);
if(ge && ge!==''){
isMatch=1;
result=Number(defaultValue)>=Number(ge);
}
if(result && le && le!==''){
isMatch=1;
result=Number(defaultValue)<=Number(le);
}
if(result){
if(result && isMatch===1){
obj=rolePermission;
break;
callback(null,obj);
return;
}
}
}
......@@ -115,14 +122,15 @@ exports.checkRolePermiss=function(ent_code,action,integral,exp,callback){
if(rolePermission && rolePermission.permission){
var permissions=rolePermission.permission;
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 value=obj.value;
if(tmpAction===action){
if(value==='1'){
result=true;
break;
}
break;
}
}
}
......
......@@ -2,6 +2,9 @@
var mongoose = require('mongoose');
var ForumThread = mongoose.model('ForumThread');
var ForumComment = mongoose.model('ForumComment');
var forumCommentService = require('./forumCommentService');
var async = require('async');
//创建文章
......@@ -19,32 +22,64 @@ exports.createThread=function(entity,callback){
//根据ID获取文章
exports.getThreadById=function(tid,callback){
var conditions={
_id:tid
};
ForumThread.find(conditions).populate('from').populate('info').populate({path:'comments',options:{limit:5}, select:'from to created content'}).exec(function(err, docs) {
if (err) {
console.error(err);
callback(err,null);
} else {
var thread={};
if (docs && docs.length > 0) {
thread=docs[0];
populateComment(thread, function(err,results){
if (err) {
console.log(err);
callback(null, null);
} else {
callback(null,thread);
}
});
async.parallel([
function(cb){
var conditions={
_id:tid
};
ForumThread.find(conditions).populate('from').populate('info').exec(function(err, docs) {
if (err) {
console.error(err);
callback(err,null);
} else {
var thread={};
if (docs && docs.length > 0) {
thread=docs[0];
cb(null,thread);
// populateComment(thread, function(err,results){
// if (err) {
// console.log(err);
// 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{
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更新文章
......@@ -71,30 +106,72 @@ exports.deleteThreadById=function(tid,callback){
});
};
//一级评论
function populateComment(doc, callback){
if (doc && doc.comments.length > 0) {
var asyncTasks = [];
doc.comments.forEach(function(comment){
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) {
console.error(err);
callback(null, null);
} 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) {
if (err) {
console.log(err);
callback(null, null);
} else {
callback(null, null);
callback(null, results);
}
});
......@@ -130,7 +207,7 @@ exports.getAllThreadByFid= function(conditions,pageNo,pageSize,callback) {
var skip = (pageNo - 1) * pageSize;
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) {
console.error(err);
callback(err,null);
......@@ -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){
});
};
exports.updateUserThreadControlById=function(uid,entity,callback){
ForumUserThreadCotrol.update({ _id: uid}, entity,null,function(err,result){
exports.updateUserThreadControlById=function(id,entity,callback){
ForumUserThreadCotrol.update({ _id: id}, entity,null,function(err,result){
if (err) {
console.error(err);
callback(err,null);
......
......@@ -33,6 +33,10 @@ module.exports = {
ACTION_NOT_PERMISSION: {
errorcode: 10005,
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