Implement a lot of completion report functionality and more complex database queries

pull/1/head
sigonasr2 5 years ago
parent a061932290
commit 3654aae637
  1. 48
      frontend/src/App.css
  2. 88
      frontend/src/App.js
  3. 28
      frontend/src/setupProxy.js
  4. 93
      server/app.js

@ -1,3 +1,9 @@
/*badge-primary {easy}
badge-info {normal}
badge-success {hard}
badge-warning {ex}
badge-danger {exex}*/
html {
height: 100%;
}
@ -19,6 +25,48 @@ body {
0 0 8px #999
}
table th {
position: -webkit-sticky; /* this is for all Safari (Desktop & iOS), not for Chrome*/
position: sticky;
top: 0;
z-index: 100000;
background: #fff;
}
#footer{
position: -webkit-sticky; /* this is for all Safari (Desktop & iOS), not for Chrome*/
position: sticky;
bottom: 0;
z-index: 100000;
}
.background-list-1{
background-color:#cee;
}
.background-list-1:hover{
background-color:#bdd;
}
.background-list-2{
background-color:#def;
}
.background-list-2:hover{
background-color:#cde;
}
.lighthover:hover{
background-color:rgba(160,160,255,0.5);
}
.tinytime{
font-size:10px;
position:absolute;
bottom:0px;
right:7px;
z-index:-10000;
color:#666;
font-style:italic;
/*background-color:rgba(240,240,255,0.8);*/
}
.numbers{
font-size:18px;
}

File diff suppressed because one or more lines are too long

@ -1,6 +1,34 @@
const { createProxyMiddleware } = require('http-proxy-middleware');
module.exports = function(app) {
app.use(
"/ratings/:songname",
createProxyMiddleware({
target: 'http://server:4501',
changeOrigin: true,
})
);
app.use(
"/completionreport/:username",
createProxyMiddleware({
target: 'http://server:4501',
changeOrigin: true,
})
);
app.use(
"/songmods/:username/:songname/:difficulty",
createProxyMiddleware({
target: 'http://server:4501',
changeOrigin: true,
})
);
app.use(
"/songpfccount/:username/:songname/:difficulty",
createProxyMiddleware({
target: 'http://server:4501',
changeOrigin: true,
})
);
app.use(
"/songs",
createProxyMiddleware({

@ -345,10 +345,69 @@ app.get('/recalculatescore/:playid',(req,res)=>{
.then((data)=>res.status(200).json(data)).catch((err)=>{console.log(err);res.status(500).json(err.message);})
});
app.get('/playdata',(req,res)=>{
/*app.get('/playdata',(req,res)=>{
db.query('select * from plays')
.then((data)=>{res.status(200).json(data.rows)})
.catch((err)=>res.status(500).json(err.message))
})*/
app.get('/completionreport/:username',(req,res)=>{
//Number of passes,plays,fcs,pfcs, and the best play.
var userId=-1,songs,promises=[];
db.query('select id from users where username=$1 limit 1',[req.params.username])
.then ((data)=>{
if (data.rows.length>0) {
userId=data.rows[0].id;
return db.query('select * from songs')
} else {
throw new Error("Cannot find user!")
}
})
.then((data)=>{
songs = data.rows;
songs.forEach((song)=>{
promises.push(db.query("select * from (select userid,count(*) filter(where difficulty='E') as ECount,count(*) filter(where difficulty='N') as NCount,count(*) filter(where difficulty='H') as HCount,count(*) filter(where difficulty='EX') as EXCount,count(*) filter(where difficulty='EXEX') as EXEXCount,Count(*) filter(where safe=0 and sad=0 and worst=0 and difficulty='E') as EFCCount,Count(*) filter(where safe=0 and sad=0 and worst=0 and difficulty='N') as NFCCount,Count(*) filter(where safe=0 and sad=0 and worst=0 and difficulty='H') as HFCCount,Count(*) filter(where safe=0 and sad=0 and worst=0 and difficulty='EX') as EXFCCount,Count(*) filter(where safe=0 and sad=0 and worst=0 and difficulty='EXEX') as EXEXFCCount,Count(*) filter(where fine=0 and safe=0 and sad=0 and worst=0 and difficulty='E') as EPFCCount,Count(*) filter(where fine=0 and safe=0 and sad=0 and worst=0 and difficulty='N') as NPFCCount,Count(*) filter(where fine=0 and safe=0 and sad=0 and worst=0 and difficulty='H') as HPFCCount,Count(*) filter(where fine=0 and safe=0 and sad=0 and worst=0 and difficulty='EX') as EXPFCCount,Count(*) filter(where fine=0 and safe=0 and sad=0 and worst=0 and difficulty='EXEX') as EXEXPFCCount from plays where userid=$1 and songid=$2 group by userid)t1 join (select rank,t.score,t.percent from (select row_number()over(order by score desc)rank,* from(select distinct on (userid) * from (select * from plays where songid=$2)t order by userid,score desc)t)t where userid=$1)t2 on t1.userid=t1.userid",[userId,song.id])
.then((data)=>{
if (data.rows.length>0) {
song.report=data.rows[0]
} else {
song.report={ecount:0,ncount:0,hcount:0,excount:0,exexcount:0,efccount:0,nfccount:0,hfccount:0,exfccount:0,exexfccount:0,epfccount:0,npfccount:0,hpfccount:0,expfccount:0,exexpfccount:0,rank:0}
}
})
)
})
return Promise.all(promises)
})
.then((data)=>{
return res.status(200).json(songs);
})
.catch((err)=>{res.status(500).json(err.message)})
})
app.get('/ratings/:songname/:username',(req,res)=>{
var songId=-1,userId=-1;
db.query('select id from users where username=$1 limit 1', [req.params.username])
.then((data)=>{
if (data.rows.length>0) {
userId=data.rows[0].id
return db.query('select id from songs where name=$1 or romanized_name=$1 or english_name=$1 limit 1', [req.params.songname])
} else {
throw new Error("Could not find user!")
}
})
.then((data)=>{
if (data.rows.length>0) {
songId=data.rows[0].id
return db.query("select * from (select row_number()over(order by score desc)rank,* from(select distinct on (userid) * from (select * from plays where songid=$1)t order by userid,score desc)t)t where userid=$2",[songId,userId])
} else {
throw new Error("Could not find song!")
}
})
.then((data)=>{
res.status(200).json(data.rows)
})
.catch((err)=>{res.status(500).json(err.message)})
})
app.get('/bestplays/:username',(req,res)=>{
@ -404,6 +463,38 @@ app.get('/songfccount/:username/:songname/:difficulty',(req,res)=>{
.catch((err)=>{res.status(500).json(err.message)})
})
app.get('/songpfccount/:username/:songname/:difficulty',(req,res)=>{
var songId=-1,userId=-1;
db.query('select id from users where username=$1 limit 1',[req.params.username])
.then((data)=>{if (data.rows.length>0){userId=data.rows[0].id;return db.query('select id from songs where name=$1 or romanized_name=$1 or english_name=$1 limit 1', [req.params.songname])}else{throw new Error("Cannot find user!")}})
.then((data)=>{if(req.params.songname &&data.rows.length>0){songId=data.rows[0].id;return db.query('select * from plays where userid=$1 and songid=$2 and difficulty=$3 and fine=0 and safe=0 and sad=0 and worst=0',[userId,songId,req.params.difficulty])}else{res.status(400).json("Could not find song!")}})
.then((data)=>{if(data && data.rows.length>0){res.status(200).json({fccount:data.rows.length})}else{res.status(200).json({fccount:0})}})
.catch((err)=>{res.status(500).json(err.message)})
})
app.get('/songmods/:username/:songname/:difficulty',(req,res)=>{
var songId=-1,userId=-1,hs=0,sd=0,hd=0;
db.query('select id from users where username=$1 limit 1',[req.params.username])
.then((data)=>{if (data.rows.length>0){userId=data.rows[0].id;return db.query('select id from songs where name=$1 or romanized_name=$1 or english_name=$1 limit 1', [req.params.songname])}else{throw new Error("Cannot find user!")}})
.then((data)=>{if(req.params.songname &&data.rows.length>0){songId=data.rows[0].id;return db.query('select COUNT(mod) from (select * from plays where userid=$1 and songid=$2 and difficulty=$3 and mod=$4)t',[userId,songId,req.params.difficulty,"HS"])}else{res.status(400).json("Could not find song!")}})
.then((data)=>{if(data && data.rows.length>0){
hs=data.rows[0].count;
}
return db.query('select COUNT(mod) from (select * from plays where userid=$1 and songid=$2 and difficulty=$3 and mod=$4)t',[userId,songId,req.params.difficulty,"SD"])
})
.then((data)=>{if(data && data.rows.length>0){
sd=data.rows[0].count;
}
return db.query('select COUNT(mod) from (select * from plays where userid=$1 and songid=$2 and difficulty=$3 and mod=$4)t',[userId,songId,req.params.difficulty,"HD"])
})
.then((data)=>{if(data && data.rows.length>0){
hd=data.rows[0].count;
}
res.status(200).json({hs:hs,sd:sd,hd:hd})
})
.catch((err)=>{res.status(500).json(err.message)})
})
app.get('/rating/:username',(req,res)=>{
if (req.params.username) {
db.query('select rating from users where username=$1 limit 1',[req.params.username])

Loading…
Cancel
Save