Improved logic for song ratings and perform recalculation of player ratings on song submission along with score rechecks. Player ratings now stored in database for quick lookups.

This commit is contained in:
sigonasr2 2020-07-14 17:24:20 -05:00
parent 6cb6c687f3
commit b62f376837
2 changed files with 41 additions and 6 deletions

View File

@ -66,7 +66,7 @@ app.post('/submit', (req, res) => {
var fail = true; var fail = true;
if (req.body.fail!==undefined) { if (req.body.fail!==undefined) {
fail = (req.body.fail=='true'); fail = (req.body.fail=='true');
console.log("Fail is "+fail+" type:"+typeof(fail)) //console.log("Fail is "+fail+" type:"+typeof(fail))
} }
if (!(req.body.difficulty==="H"||req.body.difficulty==="N"||req.body.difficulty==="E"||req.body.difficulty==="EX"||req.body.difficulty==="EXEX")) if (!(req.body.difficulty==="H"||req.body.difficulty==="N"||req.body.difficulty==="E"||req.body.difficulty==="EX"||req.body.difficulty==="EXEX"))
@ -76,7 +76,11 @@ app.post('/submit', (req, res) => {
.then((data)=>{if(data.rows.length>0){if (data.rows[0].authentication_token===req.body.authentication_token){userId=data.rows[0].id;return db.query("select id from songs where name=$1 or romanized_name=$1 or english_name=$1",[req.body.song])}else{throw new Error("Could not authenticate!")}}else{throw new Error("Could not find user.")} .then((data)=>{if(data.rows.length>0){if (data.rows[0].authentication_token===req.body.authentication_token){userId=data.rows[0].id;return db.query("select id from songs where name=$1 or romanized_name=$1 or english_name=$1",[req.body.song])}else{throw new Error("Could not authenticate!")}}else{throw new Error("Could not find user.")}
}) })
.then((data)=>{if(data.rows.length>0){songId=data.rows[0].id;var score=CalculateSongScore({cool:req.body.cool,fine:req.body.fine,safe:req.body.safe,sad:req.body.sad,worst:req.body.worst,percent:req.body.percent,difficulty:req.body.difficulty,fail:fail});return db.query("insert into plays(songId,userId,difficulty,cool,fine,safe,sad,worst,percent,date,score,fail) values($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12) returning *",[songId,userId,req.body.difficulty,req.body.cool,req.body.fine,req.body.safe,req.body.sad,req.body.worst,req.body.percent,new Date(),score,fail])}else{throw new Error("Could not find song.")}}) .then((data)=>{if(data.rows.length>0){songId=data.rows[0].id;var score=CalculateSongScore({cool:req.body.cool,fine:req.body.fine,safe:req.body.safe,sad:req.body.sad,worst:req.body.worst,percent:req.body.percent,difficulty:req.body.difficulty,fail:fail});return db.query("insert into plays(songId,userId,difficulty,cool,fine,safe,sad,worst,percent,date,score,fail) values($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12) returning *",[songId,userId,req.body.difficulty,req.body.cool,req.body.fine,req.body.safe,req.body.sad,req.body.worst,req.body.percent,new Date(),score,fail])}else{throw new Error("Could not find song.")}})
.then((data)=>{if(data.rows.length>0){res.status(200).json(data.rows[0])}else{throw new Error("Could not submit song.")}}) .then((data)=>{if(data.rows.length>0){
var songsubmitdata = data.rows[0];
return CalculateRating(req.body.username).then((data)=>{db.query("update users set rating=$1 where username=$2",[data,req.body.username])})
.then(()=>{return songsubmitdata;})}else{throw new Error("Could not submit song.")}})
.then((data)=>{res.status(200).json(data);})
.catch((err)=>{ .catch((err)=>{
console.log(req.body); console.log(req.body);
res.status(500).json(err.message);}) res.status(500).json(err.message);})
@ -121,9 +125,16 @@ CalculateRating=(username)=>{
} }
app.get('/recalculatescore/:playid',(req,res)=>{ app.get('/recalculatescore/:playid',(req,res)=>{
var userId=-1;
var username=null;
db.query('select * from plays where id=$1',[req.params.playid]) db.query('select * from plays where id=$1',[req.params.playid])
.then((data)=>{if (data.rows.length>0){var song=data.rows[0];console.log(song);var score=CalculateSongScore({cool:song.cool,fine:song.fine,safe:song.safe,sad:song.sad,worst:song.worst,percent:song.percent,difficulty:song.difficulty,fail:song.fail});return db.query('update plays set score=$1 where id=$2 returning *',[score,req.params.playid]);}else{throw new Error("This play does not exist!")}}) .then((data)=>{if (data.rows.length>0){var song=data.rows[0];userId=song.userid;console.log(song);var score=CalculateSongScore({cool:song.cool,fine:song.fine,safe:song.safe,sad:song.sad,worst:song.worst,percent:song.percent,difficulty:song.difficulty,fail:song.fail});return db.query('update plays set score=$1 where id=$2 returning *',[score,req.params.playid]);}else{throw new Error("This play does not exist!")}})
.then((data)=>{if (data.rows.length>0){res.status(200).json(data.rows[0])}else{throw new Error("Failed to update score!")}}) .catch((err)=>{res.status(500).json(err.message);}) .then((data)=>{if (data.rows.length>0){
var scoreData=data.rows[0];
return db.query('select username from users where id=$1',[userId]).then((data)=>{username=data.rows[0].username; return CalculateRating(username)}).then((data)=>{db.query("update users set rating=$1 where username=$2",[data,username])})
.then(()=>{return scoreData;})
}else{throw new Error("Failed to update score!")}})
.then((data)=>res.status(200).json(data)).catch((err)=>{res.status(500).json(err.message);})
}); });
app.get('/bestplay/:username/:songname/:difficulty',(req,res)=>{ app.get('/bestplay/:username/:songname/:difficulty',(req,res)=>{
@ -164,8 +175,8 @@ app.get('/songfccount/:username/:songname/:difficulty',(req,res)=>{
app.get('/rating/:username',(req,res)=>{ app.get('/rating/:username',(req,res)=>{
if (req.params.username) { if (req.params.username) {
CalculateRating(req.params.username). db.query('select rating from users where username=$1',[req.params.username])
then((data)=>res.status(200).json({rating:data})) .then((data)=>{if(data.rows.length>0){res.status(200).json(data.rows[0])}else{res.status(200).json({rating:0})}})
} else { } else {
res.status(400).json("Invalid username!") res.status(400).json("Invalid username!")
} }

24
server/test.js Normal file
View File

@ -0,0 +1,24 @@
var characterFrequency = function (string) {
let tempArray=[...string]; // stores [ 'f', 'u', 'n' ]
let finalArray = []
console.log(JSON.stringify(tempArray)+"/"+JSON.stringify(finalArray))
for (var i=0; i<tempArray.length; i++){
//console.log("current letter",tempArray[i])
var found=false;
for (var x=0; x<finalArray.length; x++){
console.log(finalArray) //[ <1 empty item>, [ 'f', 1 ], [ 'u', 1 ], [ 'n', 1 ] ]
if (tempArray[i] === finalArray[x][0]){ //always fails
// if (tempArray[i] == finalArray[x][0]){ //breaks it but seems like the right answer
console.log(finalArray[x][1])
finalArray[x][1]+=1
found=true;
}
}
if (!found) {
finalArray.push([tempArray[i],1])
}
}
return finalArray
};
console.log(characterFrequency("Testing more letters!"));