UNPKG

wejsv2old-plugin-rating

Version:
100 lines (84 loc) 2.92 kB
/** * 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); }