wejsv2old-plugin-rating
Version:
We.js v2 Old - Rating Plugin
100 lines (84 loc) • 2.92 kB
JavaScript
/**
* RatingManagerController
*
* @module :: Controller
* @description :: Contains logic for handling requests.
*/
module.exports = {
computeRating: function (req, res) {
// body...
var sqlModel = sails.models.ratingmanager;
var sql = 'SELECT DISTINCT id';
sql += ' FROM ratingvote';
sql += ' WHERE manager = ' + req.param('manager');
sql += ' AND modelId = ' + req.param('modelId');
sqlModel
.query(sql, function (err, ids) {
if (err) {
return res.negotiate(err);
}
var inRating = ids.map(function (i){ return i.id; }).join(',');
if (!inRating.length) {
return res.json({});
}
sqlComputeRating(inRating, req, function (err, result){
if (err) {
return res.negotiate(err);
}
result.rating = result.rating[0];
result.terms = result.terms.map(function (r){
r.id = r.term;
delete r.term;
return r;
});
var totalGeral = 0;
for (var i = 0; i < result.terms.length; i++) {
totalGeral += result.terms[i].total;
};
result.totalGeral = totalGeral;
res.json(result);
});
});
}
};
function sqlComputeRating(ratings, req, cb) {
var sqlModel = sails.models.ratingmanager,
modelId = req.param('modelId'),
manager = req.param('manager');
async
.parallel({
/*
* SELECT AVG(rate) AS rate
* FROM ratingvote
* WHERE modelId = 1312 AND
* manager = 3
*/
rating: function (callback) {
var sqlQuery = 'SELECT AVG(rate) AS rate, COUNT(*) as total';
sqlQuery += ' FROM ratingvote';
sqlQuery += ' WHERE modelId = ' + modelId;
sqlQuery += ' AND manager = ' + manager;
sqlModel
.query(sqlQuery, callback);
},
/*
* SELECT term_termsRated AS terms, (count(*) / (select count(*) from bd_wejs.ratingvote_terms__term_termsrated
* WHERE ratingvote_terms IN (3, 4))) * 100 as percentage
* FROM bd_wejs.ratingvote_terms__term_termsrated
* WHERE ratingvote_terms IN (3, 4)
* group by terms
*/
terms: function (callback) {
// var sqlQuery = 'SELECT term_termsRated AS term, (COUNT(*) / (SELECT COUNT(*) FROM ratingvote_terms__term_termsrated';
// sqlQuery += ' WHERE ratingvote_terms IN (' + ratings +'))) * 100 as percentage';
// sqlQuery += ' FROM ratingvote_terms__term_termsrated';
// sqlQuery += ' WHERE ratingvote_terms IN (' + ratings + ')';
// sqlQuery += ' GROUP BY term';
var sqlQuery = 'SELECT term_termsRated AS term, COUNT(*) as total FROM ratingvote_terms__term_termsrated';
sqlQuery += ' WHERE ratingvote_terms IN (' + ratings + ')';
sqlQuery += ' GROUP BY term';
sqlModel
.query(sqlQuery, callback);
}
}, cb);
}