Skip to content

Commit

Permalink
rating
Browse files Browse the repository at this point in the history
  • Loading branch information
laxyapahuja committed Sep 1, 2020
1 parent c3ce959 commit ceb8e34
Show file tree
Hide file tree
Showing 7 changed files with 128 additions and 35 deletions.
30 changes: 30 additions & 0 deletions config/reputation.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
const User = require('../models/User')
const Post = require('../models/Post')

async function reputation(username, post_id, rating) {
const user = await User.findOne({ username: username})
console.log(user)
Post.findById(post_id, (err, post) => {
let ratingData = user.ratingData;
console.log(ratingData)
ratingData[post_id] = rating;
console.log(ratingData)
user.ratingData = ratingData;
console.log(user.ratingData)
postRating = post.rating;
let rep = Math.abs(postRating - rating)
if (rep > 10) {
rep = 0;
}
else {
rep = 10 - rep
}
rep = Math.floor(rep)
user.reputation = user.reputation + rep;
user.save();
}).catch((err) => {
console.log(err);
})
}

module.exports = reputation;
4 changes: 4 additions & 0 deletions models/Post.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,10 @@ const PostSchema = new mongoose.Schema({
recommendations: {
type: Object,
required: false
},
rating: {
type: Number,
default: 0
}
})

Expand Down
12 changes: 12 additions & 0 deletions models/User.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,18 @@ const UserSchema = new mongoose.Schema({
badge: {
type: Boolean,
default: false
},
premium: {
type: Boolean,
default: false
},
ratingData: {
type: Object,
required: true
},
reputation: {
type: Number,
default: 0
}
})

Expand Down
31 changes: 31 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
"license": "ISC",
"dependencies": {
"bcryptjs": "^2.4.3",
"chart.js": "^2.9.3",
"connect-flash": "^0.1.1",
"dotenv": "^8.2.0",
"ejs": "^3.1.3",
Expand Down
83 changes: 49 additions & 34 deletions routes/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ const { ensureAuthenticated } = require('../config/auth');
const nodemailer = require('nodemailer')
let consCriticism = require('../config/constructiveCriticismAlgo')
const stats = require('stats-lite')
let reputation = require('../config/reputation')

const transporter = nodemailer.createTransport({
service: 'gmail',
Expand Down Expand Up @@ -291,39 +292,64 @@ router.post('/post', ensureAuthenticated, (req, res) => {

router.post('/rate', ensureAuthenticated, (req, res) => {
const { post_id, rating, recommendation } = req.body
consCriticism(recommendation).then((recommendation => {
console.log(recommendation)
Post.findById(post_id, function(err, post) {
post.reviewers ++
post.save(function (err) {
if(err) {
console.log(err)
}
Post.findByIdAndUpdate(post_id, { $push: { reviews: {'username': req.user.username, 'rating': rating }, recommendations: {'username': req.user.username, 'recommendation': recommendation} } }, function(err, success) {
reputation(req.user.username, post_id, rating).then(() => {
consCriticism(recommendation).then((recommendation => {
Post.findById(post_id, function(err, post) {
post.reviewers ++
post.save(function (err) {
if(err) {
console.log(err)
}
Post.findByIdAndUpdate(post_id, { $push: { reviewers_usernames: req.user.username } }, function(err, success) {
Post.findByIdAndUpdate(post_id, { $push: { reviews: {'username': req.user.username, 'rating': rating }, recommendations: {'username': req.user.username, 'recommendation': recommendation} } }, function(err, success) {
if(err) {
console.log(err)
}
User.findById(req.user.id, function(err, user) {
user.reviews_done = user.reviews_done + 1
user.save(function(err) {
if(err) {
console.log(err)
}
req.flash('success_msg', 'Your review was submitted');
res.redirect('/dashboard')
if(success) {
Post.findById(post_id, (err, post) => {
console.log(post)
const reviews = post.reviews;
let reviews_array = [];
reviews.forEach((element) => {
reviews_array.push(Number(element['rating']))
})
let Rating = stats.mean(reviews_array);
let rv_ar = [];
reviews_array.forEach((i) => {
if (rv_ar.includes(i)) {
Rating = stats.mode(reviews_array)
console.log('success')
console.log(Rating)
}
rv_ar.push(i)
console.log(rv_ar)
})
post.rating = Rating;
console.log(post.rating)
post.save();
})
}
Post.findByIdAndUpdate(post_id, { $push: { reviewers_usernames: req.user.username } }, function(err, success) {
if(err) {
console.log(err)
}
User.findById(req.user.id, function(err, user) {
user.reviews_done = user.reviews_done + 1
user.save(function(err) {
if(err) {
console.log(err)
}
req.flash('success_msg', 'Your review was submitted');
res.redirect('/dashboard')
})
})
})
})

})

console.log(err)
})
console.log(err)
})
}))
}))
});
})

router.get('/profile', ensureAuthenticated, (req, res) => {
Expand Down Expand Up @@ -355,21 +381,10 @@ router.get('/profile', ensureAuthenticated, (req, res) => {
router.post('/results', ensureAuthenticated, (req, res) => {
const { post_id } = req.body;
Post.findById(post_id, function(err, post) {
const reviews = post.reviews;
let reviews_array = [];
let rating = stats.mode(reviews_array);
reviews.forEach((element) => {
reviews_array.push(Number(element['rating']))
})
if (rating != Number) {
rating = stats.mean(reviews_array)
}
console.log(reviews_array)
console.log(rating)
res.render('results', {
name: req.user.username,
post: post,
rating: rating
rating: post.rating
})
})
})
Expand Down
2 changes: 1 addition & 1 deletion views/leaderboard.ejs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
<% for (let i = 0; i < users.length; i++) { %>
<tr>
<td><%- users[i].username %></td>
<td><%- users[i].reviews_done %></td>
<td><%- users[i].rating %></td>
</tr>
<% } %>
</table>

0 comments on commit ceb8e34

Please sign in to comment.