questionresponse.jsroutes/ | |
---|---|
var _ = require('underscore')
, validator = require('../lib/requestValidator')
, async = require('async')
, sqlHelper = require("../lib/sqlHelper");
function finishQuestionResponse(req,res,op,mysql) {
async.series([
function(cb) {
mysql.query("UPDATE `user` SET `numResponses` = `numResponses` "+op+" 1 WHERE `userID` = ? ;",[req.session.userID],cb);
},
function(cb) {
mysql.query("UPDATE `question` SET `numResponses` = `numResponses` "+op+" 1 WHERE `questionID` = ? ;",[req.body.questionID],cb);
},
function(cb) {
mysql.query("UPDATE `answer` SET `numResponses` = `numResponses` "+op+" 1 WHERE `answerID` = ? ;",[req.body.answerID],cb)
}
],function(errs,results) {
if(!_.isEmpty(errs)) {
console.log(errs);
clientPool.releaseConnection(mysql);
return false;
}
clientPool.releaseConnection(mysql);
if(op === "+")
req.session.numResponses++;
else
req.session.numResponses--;
res.send({status:"success"});
});
}
exports.create = {
validate:validator.makeValidator({
canOnly:["answerID","questionID","importance","explanation","acceptable"],
types:{
questionID:"int",
answerID:"int",
importance:"float"
}
}),
route :function(req,res) {
res.set({"Content-Type":"text/json"});
if(_.isEmpty(req.body.acceptable)){
req.body.acceptable = [];
}
clientPool.acquire(function(err,mysql) {
if(err){
throw new Error("can't get mysql con",err);
res.send(500);
return false;
}
sqlHelper.insert(mysql,"questionResponse",{
userID: req.session.userID,
answerID: req.body.answerID,
questionID: req.body.questionID,
importance: req.body.importance,
explanation: req.body.explanation,
numAcceptable: req.body.acceptable.length
},
function(err,result) {
if(err) {
console.log(err);
throw new Error("error inserting into mysql",err);
res.send(500);
clientPool.releaseConnection(mysql);
return false;
}
if(!_.isEmpty(req.body.acceptable)) {
var insertQuery = [];
_.each(req.body.acceptable,function(acceptable) {
insertQuery.push(function(cb) {
mysql.query("INSERT INTO `acceptableResponse` (`userID`,`questionID`,`answerID`) VALUES (?,?,?) ;",[req.session.userID,req.body.questionID,acceptable],cb);
});
insertQuery.push(function(cb) {
mysql.query("UPDATE `answer` SET `numAccept` = `numAccept` + 1 WHERE `answerID` = ? ;",[acceptable],cb);
});
});
async.series(insertQuery,function(errs,results) {
if(!_.isEmpty(errs)) {
console.log("errs inserting into acceptable responses",errs);
clientPool.releaseConnection(mysql);
res.send(500);
return false;
}
finishQuestionResponse(req,res,"+",mysql);
});
} else {
finishQuestionResponse(req,res,"+",mysql);
}
});
});
}
}
exports.delete = {
validate:validator.makeValidator({
canOnly:['questionResponseID'],
types:{questionResponseID:"int"}
}),
route:function(req,res) {
res.set({"Content-Type":"text/json"});
if(sqlHelper.requestHas(req.body,["questionResponseID"])){
clientPool.acquire(function(err,mysql) {
if(err){
throw new Error("can't get mysql con",err);
res.send(500);
return false;
}
mysql.query(
"DELETE FROM `questionresponse` WHERE `questionResponseID` = ? AND `userID` = ?; \
DELETE FROM `acceptableresponse` WHERE `questionID` = ? AND `userID` = ?",
[req.body.questionResponseID,req.session.userID,req.body.questionID,req.session.userID],function(err,result){
if(err){
throw new Error("can't get mysql con",err);
res.send(500);
clientPool.releaseConnection(mysql);
return false;
}
console.log(result);
finishQuestionResponse(req,res,"-",mysql);
});
});
}
}
};
|