Add files via upload
This commit is contained in:
45
api/controllers/commendations.js
Normal file
45
api/controllers/commendations.js
Normal file
@@ -0,0 +1,45 @@
|
||||
const commendation = require("../models/commendation");
|
||||
const user = require("../models/user");
|
||||
|
||||
module.exports.saveCommendation = async (req, res) => {
|
||||
try{
|
||||
const {commenderId, commendedId, score} = req.body;
|
||||
|
||||
if(!commenderId) return res.type('json').status(400).send("Commender id was not provided.");
|
||||
if(!commendedId) return res.type('json').status(400).send("Commended id was not provided.");
|
||||
if(!score) return res.type('json').status(400).send("Score was not provided.");
|
||||
if(score <= 0 || score > 10) return res.type('json').status(400).send("Score must be >= 1 and <= 10");
|
||||
|
||||
// Make sure the person is not commending again
|
||||
let foundCommendation = await commendation.findOne({$and: [{commendedId:commendedId}, {commenderId:commenderId}]}).exec();
|
||||
if(foundCommendation) return res.type('json').status(400).send("You have already commended this user.");
|
||||
|
||||
// Compute average reputation of commended person
|
||||
let totalReputation = score, totalNumOfCommends = 1, newReputation = 0;
|
||||
const cursor = commendation.find({commendedId:commendedId}).cursor();
|
||||
for (let commendation = await cursor.next(); commendation != null; commendation = await cursor.next()) {
|
||||
totalReputation += commendation.score;
|
||||
totalNumOfCommends += 1;
|
||||
}
|
||||
newReputation = Math.round(totalReputation/totalNumOfCommends);
|
||||
|
||||
// Save New Commendation
|
||||
await new commendation({
|
||||
commendedId: commendedId,
|
||||
commenderId: commenderId,
|
||||
score: score
|
||||
}).save();
|
||||
|
||||
// Update users reputation
|
||||
const updatedUser = await user.findOneAndUpdate({_id: commendedId},
|
||||
{reputation:newReputation},
|
||||
{returnOriginal: false});
|
||||
|
||||
if(!updatedUser) return res.type('json').status(400).send("Commended user reputation could not be updated.");
|
||||
|
||||
return res.type('json').status(200).send();
|
||||
|
||||
}catch(err) {
|
||||
return res.type('json').status(500).send(err.toString());
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user