Jump To …

questionresponse.js

routes/
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);
          });
      });
    }
  }
};

generated Tue Apr 30 2013 17:31:04 GMT-0400 (EDT)
Modfinder