Implement profile page structure. Fix many bugs related to promise errors and improved submission rating system. Added remove song capability.

pull/1/head
sigonasr2 5 years ago
parent b62f376837
commit 097bfd49be
  1. 96
      frontend/package-lock.json
  2. 1
      frontend/package.json
  3. 9
      frontend/src/App.css
  4. 162
      frontend/src/App.js
  5. 156
      server/app.js
  6. 7
      server/updateallscore.js
  7. 736
      songData.sql

@ -6290,6 +6290,19 @@
"resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz",
"integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ=="
},
"history": {
"version": "4.10.1",
"resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz",
"integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==",
"requires": {
"@babel/runtime": "^7.1.2",
"loose-envify": "^1.2.0",
"resolve-pathname": "^3.0.0",
"tiny-invariant": "^1.0.2",
"tiny-warning": "^1.0.0",
"value-equal": "^1.0.1"
}
},
"hmac-drbg": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
@ -6300,6 +6313,14 @@
"minimalistic-crypto-utils": "^1.0.1"
}
},
"hoist-non-react-statics": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
"integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
"requires": {
"react-is": "^16.7.0"
}
},
"hosted-git-info": {
"version": "2.8.8",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
@ -8198,6 +8219,15 @@
"resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
"integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg=="
},
"mini-create-react-context": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.0.tgz",
"integrity": "sha512-b0TytUgFSbgFJGzJqXPKCFCBWigAjpjo+Fl7Vf7ZbKRDptszpppKxXH6DRXEABZ/gcEQczeb0iZ7JvL8e8jjCA==",
"requires": {
"@babel/runtime": "^7.5.5",
"tiny-warning": "^1.0.3"
}
},
"mini-css-extract-plugin": {
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz",
@ -10597,6 +10627,52 @@
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
},
"react-router": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.0.tgz",
"integrity": "sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw==",
"requires": {
"@babel/runtime": "^7.1.2",
"history": "^4.9.0",
"hoist-non-react-statics": "^3.1.0",
"loose-envify": "^1.3.1",
"mini-create-react-context": "^0.4.0",
"path-to-regexp": "^1.7.0",
"prop-types": "^15.6.2",
"react-is": "^16.6.0",
"tiny-invariant": "^1.0.2",
"tiny-warning": "^1.0.0"
},
"dependencies": {
"isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
},
"path-to-regexp": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
"integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
"requires": {
"isarray": "0.0.1"
}
}
}
},
"react-router-dom": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.2.0.tgz",
"integrity": "sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA==",
"requires": {
"@babel/runtime": "^7.1.2",
"history": "^4.9.0",
"loose-envify": "^1.3.1",
"prop-types": "^15.6.2",
"react-router": "5.2.0",
"tiny-invariant": "^1.0.2",
"tiny-warning": "^1.0.0"
}
},
"react-scripts": {
"version": "3.4.1",
"resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-3.4.1.tgz",
@ -10959,6 +11035,11 @@
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
"integrity": "sha1-six699nWiBvItuZTM17rywoYh0g="
},
"resolve-pathname": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz",
"integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng=="
},
"resolve-url": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
@ -12393,6 +12474,16 @@
"resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz",
"integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q="
},
"tiny-invariant": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz",
"integrity": "sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw=="
},
"tiny-warning": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
"integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
},
"tmp": {
"version": "0.0.33",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
@ -12764,6 +12855,11 @@
"spdx-expression-parse": "^3.0.0"
}
},
"value-equal": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz",
"integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw=="
},
"vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",

@ -9,6 +9,7 @@
"axios": "^0.19.2",
"react": "^16.13.1",
"react-dom": "^16.13.1",
"react-router-dom": "^5.2.0",
"react-scripts": "3.4.1"
},
"scripts": {

@ -24,6 +24,15 @@ background: linear-gradient(180deg, rgba(251,251,251,1) 0%, rgba(240,255,255,1)
cursor:pointer;
}
.loading{
opacity:0.4;
}
.header{
font-weight:bold;
text-decoration:underline;
}
.topbar{
background: rgb(251,251,251);
background: radial-gradient(circle, rgba(251,251,251,1) 0%, rgba(240,240,255,1) 100%);

@ -1,6 +1,14 @@
import React, {useState,useEffect} from 'react';
import logo from './logo.svg';
import './App.css';
import {
BrowserRouter as Router,
Switch,
Route,
Link,
useRouteMatch,
useParams
} from "react-router-dom";
const REMOTE_ADDR = "http://45.33.13.215:4502";
@ -133,29 +141,177 @@ function Logo(){
</>);
}
function Sort(p){
let { sort,sortOrder } = useParams();
return (
<>
<Link to={"/rankings/"+p.order+"/"+((p.order===sort)?(sortOrder==="desc")?"asc":"desc":"desc")} onClick={()=>{p.setIsLoading(true);p.setUpdateUsers(!p.updateUsers)}}>{p.label}</Link>{(sort===p.order?<>{(sortOrder==="desc")?<>▼</>:<></>}</>:<></>)}
</>
)
}
function ProfileDataContainer(p){
return (
<div className="col-md-3">
<div className="row">
<div className="label col-md-12">
{p.label}
</div>
</div>
<div className="row">
<div className="data col-md-12 text-center">
{p.data}
</div>
</div>
</div>
);
}
function StatisticsPanel(p) {
return (
<>
<div className="row">
<ProfileDataContainer label="Play Count" data={p.playcount}/>
<ProfileDataContainer label="FC Count" data={p.fccount}/>
<ProfileDataContainer label="Cleared" data={p.cleared}/>
<ProfileDataContainer label="Accuracy" data={p.accuracy}/>
</div>
</>
)
}
function Panel() {
return (
<>
[Placeholder Panel]
</>
);
}
const CalculateAccuracy=(cool,fine,safe,sad,worst)=>{
var noteCount = cool+fine+safe+sad+worst;
var sum = cool+(fine*0.5)+(safe*0.1)+(sad*0.05);
return sum/noteCount;
}
function Profile(){
let { username } = useParams();
let match = useRouteMatch();
var [updateProfile,setProfile] = useState(false);
var [playcount,setPlayCount] = useState(0);
var [fccount,setFCCount] = useState(0);
var [cleared,setClear] = useState("");
var [accuracy,setAccuracy] = useState("-%");
var [rating,setRating] = useState(0);
var [lastPlayed,setLastPlayed] = useState(new Date());
var [update,setUpdate] = useState(false);
var [diffs,setDiffs] = useState({});
var [user,setUserData] = useState({});
function CalculateClear(easy,normal,hard,ex,exex) {
return "E:"+easy+"/"+diffs.E+" N:"+normal+"/"+diffs.N+" H:"+hard+"/"+diffs.H+" EX:"+ex+"/"+diffs.EX+" EXEX:"+exex+"/"+diffs.EXEX;
}
useEffect(()=>{
axios.get("http://projectdivar.com:4501/userdata/"+username)
.then((data)=>{setUserData(data.data);setPlayCount(data.data.playcount);setFCCount(data.data.fccount);setRating(data.data.rating);setLastPlayed(data.data.last_played);setAccuracy(CalculateAccuracy(data.data.cool,data.data.fine,data.data.safe,data.data.sad,data.data.worst));
return axios.get("http://projectdivar.com:4501/songdiffs")})
.then((data)=>{setDiffs(data.data)})
},[update])
useEffect(()=>{
setClear(CalculateClear(user.eclear,user.nclear,user.hclear,user.exclear,user.exexclear))
},[diffs,user])
return (
<>
<h2>{username+"'s Profile"}</h2>
<StatisticsPanel name="Statistics" username={username} playcount={playcount} fccount={fccount} cleared={cleared} accuracy={accuracy}/>
<Panel name="Best Plays" username={username}/>
<Panel name="Progress" username={username}/>
<Panel name="Activity" username={username}/>
</>
);
}
function Rankings(){
let { sort,sortOrder } = useParams();
let match = useRouteMatch();
var [users,setUsers] = useState([]);
var [updateUsers,setUpdateUsers] = useState(false);
var [isLoading,setIsLoading] = useState(true);
useEffect(()=>{
axios.get("http://projectdivar.com:4501/users/"+sort+"/"+sortOrder+"?limit=100&offset=0")
.then((data)=>{setUsers(data.data)
setIsLoading(false);})
//.then(()=>{console.log(users)})
},[updateUsers])
return (
<>
<table>
<thead>
<tr>
<th className="header"><Sort setIsLoading={setIsLoading} updateUsers={updateUsers} setUpdateUsers={setUpdateUsers} label="Username" order="username"/></th>
<th className="header"><Sort setIsLoading={setIsLoading} updateUsers={updateUsers} setUpdateUsers={setUpdateUsers} label="Last Played" order="last_played"/></th>
<th className="header"><Sort setIsLoading={setIsLoading} updateUsers={updateUsers} updateUsers={updateUsers} setUpdateUsers={setUpdateUsers} setUpdateUsers={setUpdateUsers} label="Rating" order="rating"/></th>
<th className="header"><Sort setIsLoading={setIsLoading} updateUsers={updateUsers} setUpdateUsers={setUpdateUsers} label="Play Count" order="playcount"/></th>
<th className="header"><Sort setIsLoading={setIsLoading} updateUsers={updateUsers} setUpdateUsers={setUpdateUsers} label="FC Count" order="fccount"/></th>
</tr>
</thead>
{users.map((user)=><>
<tbody>
<tr>
<td className={(isLoading)?"loading":""}><Link to={"/user/"+user.username}>{user.username}</Link></td>
<td className={(isLoading)?"loading":""} className={(isLoading)?"loading":""} className={(isLoading)?"loading":""}>{user.last_played}</td>
<td className={(isLoading)?"loading":""} className={(isLoading)?"loading":""}>{user.rating}</td>
<td className={(isLoading)?"loading":""}>{user.playcount}</td>
<td className={(isLoading)?"loading":""}>{user.fccount}</td>
</tr>
</tbody></>)}
</table>
</>
);
}
function App() {
return <div className="container content">
return (<Router>
<div className="container content">
<div className="row">
<div className="topbar col-md-12 pt-1 overflow-hidden border rounded text-center">
<div>
<Link to="/">
<Logo/>
</Link>
</div>
</div>
</div>
<div className="row">
<div className="col-md-2 pt-3 pb-3 overflow-hidden border rounded text-center">
<h3>Sidebar Contents</h3>
Item 1<br/>
<Link to="/rankings/rating/desc">Rankings</Link><br/>
Item 2<br/>
Item 3<br/>
Item 4<br/>
</div>
<div className="col-md-10 pt-3 pb-3 border rounded">
<Switch>
<Route path="/rankings/:sort/:sortOrder">
<Rankings/>
</Route>
<Route path="/user/:username">
<Profile/>
</Route>
<Route path="/">
<h1 className="title">Project DivaR</h1>
Under construction!
</Route>
</Switch>
</div>
</div>
</div>
</div>;
</Router>);
}
export default App;

@ -31,7 +31,7 @@ new Pool({
})
app.get('/song/:songname', (req, res) => {
db.query('select * from songs where name=$1 or romanized_name=$1 or english_name=$1', [req.params.songname] , (error, results) => {
db.query('select * from songs where name=$1 or romanized_name=$1 or english_name=$1 limit 1', [req.params.songname] , (error, results) => {
if (error) {
res.status(500).json(error.message)
} else {
@ -45,7 +45,7 @@ app.post('/register', (req, res) => {
if (req.body && req.body.username &&
req.body.username.length>2 && req.body.email) {
var duplicateFound=false;
db.query('select * from users where username=$1',[req.body.username])
db.query('select * from users where username=$1 limit 1',[req.body.username])
.then((data)=>{
if (data.rows.length>0) {
throw new Error("User "+data.rows[0].username+" already exists!");
@ -60,6 +60,22 @@ req.body.username.length>2 && req.body.email) {
}
})
app.delete('/remove',(req,res)=>{
if (req.body &&
req.body.username!==undefined && req.body.authentication_token!==undefined && req.body.playid!==undefined) {
var userObj={},songObj={},rating=0,isFirstClear=false;
db.query("select id,authentication_token,playcount,fccount,cool,fine,safe,sad,worst,eclear,nclear,hclear,exclear,exexclear from users where username=$1 limit 1",[req.body.username])
.then((data)=>{if(data && data.rows.length>0){userObj=data.rows[0];if (req.body.authentication_token===userObj.authentication_token){return db.query("delete from plays where id=$1 and userid=$2 returning *",[req.body.playid,userObj.id])}else{throw new Error("Could not authenticate user!")}}else{throw new Error("Cannot find user!")}})
.then((data)=>{if(data && data.rows.length>0){songObj=data.rows[0];return CalculateRating(req.body.username)}else{throw new Error("Could not find play!")}})
.then((data)=>{rating=data;return db.query("select * from plays where songid=$1 and userid=$2 and difficulty=$3 limit 1",[songObj.songid,userObj.id,songObj.difficulty])})
.then((data)=>{if(data && data.rows.length===0){isFirstClear=true;}/*console.log([data,userObj.playcount-1,(songObj.safe==0&&songObj.sad==0&&songObj.worst==0)?userObj.fccount-1:userObj.fccount,userObj.cool-songObj.cool,userObj.fine-songObj.fine,userObj.safe-songObj.safe,userObj.sad-songObj.sad,userObj.worst-songObj.worst,(songObj.difficulty=="E")?userObj.ecount-1:userObj.ecount,(songObj.difficulty=="N")?userObj.ncount-1:userObj.ncount,(songObj.difficulty=="H")?userObj.hcount-1:userObj.hcount,(songObj.difficulty=="EX")?userObj.excount-1:userObj.excount,(songObj.difficulty=="EXEX")?userObj.exexcount-1:userObj.exexcount]);*/return db.query("update users set rating=$1,playcount=$2,fccount=$3,cool=$4,fine=$5,safe=$6,sad=$7,worst=$8,eclear=$9,nclear=$10,hclear=$11,exclear=$12,exexclear=$13 where id=$14 returning rating,playcount,fccount,cool,fine,safe,sad,worst,eclear,nclear,hclear,exclear,exexclear",[rating,userObj.playcount-1,(songObj.safe==0&&songObj.sad==0&&songObj.worst==0)?userObj.fccount-1:userObj.fccount,userObj.cool-songObj.cool,userObj.fine-songObj.fine,userObj.safe-songObj.safe,userObj.sad-songObj.sad,userObj.worst-songObj.worst,(songObj.difficulty=="E" && isFirstClear)?userObj.eclear-1:userObj.eclear,(songObj.difficulty=="N" && isFirstClear)?userObj.nclear-1:userObj.nclear,(songObj.difficulty=="H" && isFirstClear)?userObj.hclear-1:userObj.hclear,(songObj.difficulty=="EX" && isFirstClear)?userObj.exclear-1:userObj.exclear,(songObj.difficulty=="EXEX" && isFirstClear)?userObj.exexclear-1:userObj.exexclear,userObj.id])})
.then((data)=>{if(data && data.rows.length>0){res.status(200).json({user:data.rows[0],song:songObj})}else{throw new Error("Could not update user information, but song is deleted!")}})
.catch((err)=>{res.status(500).json(err.message)})
} else {
res.status(400).json("Missing required parameters!");
}
})
app.post('/submit', (req, res) => {
if (req.body &&
req.body.username!==undefined && req.body.authentication_token!==undefined && req.body.song!==undefined && req.body.difficulty!==undefined && req.body.cool!==undefined && req.body.fine!==undefined && req.body.safe!==undefined && req.body.sad!==undefined && req.body.worst!==undefined && req.body.percent!==undefined) {
@ -71,18 +87,29 @@ app.post('/submit', (req, res) => {
if (!(req.body.difficulty==="H"||req.body.difficulty==="N"||req.body.difficulty==="E"||req.body.difficulty==="EX"||req.body.difficulty==="EXEX"))
{throw new Error("Invalid difficulty!")}
var userId = -1,songId=-1;
db.query("select id,authentication_token from users where username=$1",[req.body.username])
.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.")}
var songsubmitdata={},isFC=false,songRating=-1,userId = -1,songId=-1,playcount=-1,fccount=-1,cool=-1,fine=-1,safe=-1,sad=-1,worst=-1,alreadyPassed=false,eclear=-1,nclear=-1,hclear=-1,exclear=-1,exexclear=-1;
db.query("select id,authentication_token,playcount,fccount,cool,fine,safe,sad,worst,eclear,nclear,hclear,exclear,exexclear from users where username=$1 limit 1",[req.body.username])
.then((data)=>{if(data && data.rows.length>0){if (data.rows[0].authentication_token===req.body.authentication_token){
var obj = data.rows[0];
eclear=obj.eclear;nclear=obj.nclear;hclear=obj.hclear;exclear=obj.exclear;exexclear=obj.exexclear;
cool=data.rows[0].cool;fine=data.rows[0].fine;safe=data.rows[0].safe;sad=data.rows[0].sad;worst=data.rows[0].worst;
fccount=data.rows[0].fccount;playcount=data.rows[0].playcount;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.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){
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)=>{if(data && data.rows.length>0){songId=data.rows[0].id; return db.query('select rating from songdata where songid=$1 and difficulty=$2 limit 1',[songId,req.body.difficulty])}else{throw new Error("Could not find song.")}})
.then((data)=>{songRating=data.rows[0].rating;return db.query("select id from plays where userid=$1 and score>0 and difficulty=$2 and songid=$3 limit 1",[userId,req.body.difficulty,songId])})
.then((data)=>{if(data && data.rows.length>0){alreadyPassed=true;/*console.log(data);*/};var score=CalculateSongScore({rating:songRating,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])})
.then((data)=>{if(data && data.rows.length>0){
songsubmitdata = data.rows[0];
//console.log(alreadyPassed+" / "+typeof(alreadyPassed))
if(alreadyPassed===false){switch(req.body.difficulty){case"E":{eclear++}break;case"N":{nclear++}break;case"H":{hclear++}break;case"EX":{exclear++}break;case"EXEX":{exexclear++}break;}}
isFC = songsubmitdata.safe===0 && songsubmitdata.sad===0 && songsubmitdata.worst===0;
return CalculateRating(req.body.username)}else{throw new Error("Could not submit song.")}})
.then((data)=>{return db.query("update users set rating=$1,last_played=$3,playcount=$4,fccount=$5,cool=$6,fine=$7,safe=$8,sad=$9,worst=$10,eclear=$11,nclear=$12,hclear=$13,exclear=$14,exexclear=$15 where username=$2",[data,req.body.username,new Date(),++playcount,fccount+((isFC)?1:0),cool+Number(req.body.cool),fine+Number(req.body.fine),safe+Number(req.body.safe),sad+Number(req.body.sad),worst+Number(req.body.worst),eclear,nclear,hclear,exclear,exexclear])})
.then((data)=>{return songsubmitdata;})
.then((data)=>{res.status(200).json(data);})
.catch((err)=>{
console.log(req.body);
//console.log(req.body);
//console.log(err);
res.status(500).json(err.message);})
} else {
console.log(req.body);
@ -95,18 +122,28 @@ CalculateSongScore=(song)=>{
var noteCount=song.cool+song.fine+song.safe+song.sad+song.worst;
var comboBreaks=song.safe+song.sad+song.worst;
var scoreMult=1;
if(comboBreaks===0){scoreMult=2}else if(song.percent>=95){scoreMult=1.2}else{scoreMult=1}
switch (song.difficulty){
case "H":{if(song.percent<60){scoreMult=0}else{if(comboBreaks===0){scoreMult=5}else if(song.percent>=90){scoreMult=3}else{scoreMult=1.5}}}break;
case "E":{if(song.percent<30){scoreMult=0}}break;
case "N":{if(song.percent<50){scoreMult=0}}break;
case "H":{if(song.percent<60){scoreMult=0}}break;
case "EX":
case "EXEX":{if(song.percent<70){scoreMult=0}else{if(comboBreaks===0){scoreMult=10}else if(song.percent>=95){scoreMult=6}else{scoreMult=5}}}break;
case "EXEX":{if(song.percent<70){scoreMult=0}}break;
default:{
if(song.percent<60){scoreMult=0}else{if(comboBreaks===0){scoreMult=3}else if(song.percent>=90){scoreMult=2}else{scoreMult=1}}
if(song.percent<60){scoreMult=0}
}
}
var score = ((song.cool*100+song.fine*50+song.safe*10+song.sad*5)/((noteCount)/(noteCount/1000)))*scoreMult
score += Math.pow(song.rating,3)/5
return Number(score);
}
CalculateAccuracy=(cool,fine,safe,sad,worst)=>{
var noteCount = cool+fine+safe+sad+worst;
var sum = cool+(fine*0.5)+(safe*0.1)+(sad*0.05);
return sum/noteCount;
}
CalculateRating=(username)=>{
var songs = [];
var debugScoreList = "";
@ -117,67 +154,120 @@ CalculateRating=(username)=>{
.then((data)=>{if(data.rows.length>0){return data.rows.reduce((sum,song,i)=>{
return sum+Number(CalculateSongScore(song)*(Math.pow(0.8,i)))},0)}else{return 0}})
.catch((err)=>{throw new Error(err.message)})*/
return db.query('select id from users where username=$1',[username])
.then((data)=>{if(data.rows.length>0){userId=data.rows[0].id;return db.query('select * from songs order by id asc;')}else{return 0}})
return db.query('select id from users where username=$1 limit 1',[username])
.then((data)=>{if(data.rows.length>0){userId=data.rows[0].id;return db.query('select * from songs order by id asc')}else{return 0}})
.then((data)=>{if(data.rows.length>0){songs=data.rows;return Promise.all(data.rows.map((song)=>{return db.query('select * from plays where userId=$1 and songId=$2 order by score desc limit 100',[userId,song.id]).then((data)=>{if (data.rows.length>0){debugScoreList+=song.name+"\n"; songs[song.id-1].score=data.rows.reduce((sum,play,i)=>{debugScoreList+=" "+(play.score)+" -> "+(play.score*Math.pow(0.8,i))+"\n";/*console.log("Play score:"+play.score+". Sum:"+sum);*/return sum+play.score*Math.pow(0.8,i);},0);debugScoreList+=" "+songs[song.id-1].score+"\n";}})}))}})
.then(()=>{return songs.sort((a,b)=>{var scorea=(a.score)?a.score:0;var scoreb=(b.score)?b.score:0;return (scorea>scoreb)?-1:1;}).reduce((sum,song,i)=>{if(song.score){debugScoreList+=song.name+": "+song.score+" -> "+(song.score*Math.pow(0.8,i))+"\n";return sum+song.score*Math.pow(0.8,i)}else{return sum}},0);})
.then((data)=>{/*console.log(debugScoreList);*/return data})
}
app.get('/songdiffs',(req,res)=>{
var diffObj={}
db.query("select COUNT(*) from songdata where difficulty='E'")
.then((data)=>{diffObj.E=data.rows[0].count;return db.query("select COUNT(*) from songdata where difficulty='N'")})
.then((data)=>{diffObj.N=data.rows[0].count;return db.query("select COUNT(*) from songdata where difficulty='H'")})
.then((data)=>{diffObj.H=data.rows[0].count;return db.query("select COUNT(*) from songdata where difficulty='EX'")})
.then((data)=>{diffObj.EX=data.rows[0].count;return db.query("select COUNT(*) from songdata where difficulty='EXEX'")})
.then((data)=>{diffObj.EXEX=data.rows[0].count;res.status(200).json(diffObj)})
.catch((err)=>{res.status(500).json(err.message)})
})
app.get('/accuracy/:username',(req,res)=>{
db.query('select cool,fine,safe,sad,worst from users where username=$1',[req.params.username])
.then((data)=>{if (data.rows.length>0){return CalculateAccuracy(data.rows[0].cool,data.rows[0].fine,data.rows[0].safe,data.rows[0].sad,data.rows[0].worst)}else{throw new Error("User does not exist!")}})
.then((data)=>{res.status(200).json({accuracy:data})})
.catch((err)=>{res.status(500).json(err.message)})
})
app.get('/recalculatescore/:playid',(req,res)=>{
var userId=-1;
var username=null;
db.query('select * from plays where id=$1',[req.params.playid])
.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){
var songRating=-1;
var song;
db.query('select * from plays where id=$1 limit 1',[req.params.playid])
.then((data)=>{if (data.rows.length>0){song=data.rows[0];userId=song.userid;/*console.log(song);*/
return db.query('select rating from songdata where songid=$1 and difficulty=$2 limit 1',[song.songid,song.difficulty])
}else{throw new Error("This play does not exist!")}})
.then((data)=>{if (data.rows.length>0){songRating=data.rows[0].rating;var score=CalculateSongScore({rating:songRating,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("Failed to retrieve song data!")}})
.then((data)=>{console.log(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);})
.then((data)=>res.status(200).json(data)).catch((err)=>{console.log(err);res.status(500).json(err.message);})
});
/*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('/bestplay/:username/:songname/:difficulty',(req,res)=>{
var songId=-1,userId=-1;
db.query('select id from users where username=$1',[req.params.username])
.then((data)=>{if (data.rows.length>0){userId=data.rows[0].id;if(req.params.songname){return db.query('select id from songs where name=$1 or romanized_name=$1 or english_name=$1', [req.params.songname])}else{return db.query('select * from plays where userid=$1 order by score desc',[userId])}}else{throw new Error("Cannot find user!")}})
.then((data)=>{if(req.params.songname &&data.rows.length>0){songId=data.rows[0].id;if(req.params.difficulty){return db.query('select * from plays where userid=$1 and songid=$2 and difficulty=$3 order by score desc,percent desc limit 1',[userId,songId,req.params.difficulty])}else{return db.query('select * from plays where userid=$1 and songid=$2 order by score desc,percent desc limit 1',[userId,songId])}}else{res.status(400).json("Could not find song!")}})
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;if(req.params.songname){return db.query('select id from songs where name=$1 or romanized_name=$1 or english_name=$1 limit 1', [req.params.songname])}else{return db.query('select * from plays where userid=$1 order by score desc',[userId])}}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 order by score desc,percent desc limit 1',[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(data.rows[0])}else{res.status(400).json("No data found!")}})
.catch((err)=>{res.status(500).json(err.message+JSON.stringify(req.body))})
})
app.get('/userdata/:username',(req,res)=>{
var songId=-1,userId=-1;
db.query('select playcount,fccount,rating,last_played,cool,fine,safe,sad,worst,eclear,nclear,hclear,exclear,exexclear from users where username=$1 limit 1',[req.params.username])
.then((data)=>{if(data && data.rows.length>0){res.status(200).json(data.rows[0])}})
.catch((err)=>{res.status(500).json(err.message)})
})
app.get('/playcount/:username/:songname/:difficulty',(req,res)=>{
var songId=-1,userId=-1;
db.query('select id from users where username=$1',[req.params.username])
.then((data)=>{if (data.rows.length>0){userId=data.rows[0].id;if(req.params.songname){return db.query('select id from songs where name=$1 or romanized_name=$1 or english_name=$1', [req.params.songname])}else{return db.query('select * from plays where userid=$1',[userId])}}else{throw new Error("Cannot find user!")}})
.then((data)=>{if(req.params.songname &&data.rows.length>0){songId=data.rows[0].id;if(req.params.difficulty){return db.query('select * from plays where userid=$1 and songid=$2 and difficulty=$3 order by score desc',[userId,songId,req.params.difficulty])}else{return db.query('select * from plays where userid=$1 and songid=$2',[userId,songId])}}else{res.status(400).json("Could not find song!")}})
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 order by score desc',[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({playcount:data.rows.length})}else{res.status(200).json({playcount:0})}})
.catch((err)=>{res.status(500).json(err.message)})
})
app.get('/songpasscount/:username/:songname/:difficulty',(req,res)=>{
var songId=-1,userId=-1;
db.query('select id from users where username=$1',[req.params.username])
.then((data)=>{if (data.rows.length>0){userId=data.rows[0].id;if(req.params.songname){return db.query('select id from songs where name=$1 or romanized_name=$1 or english_name=$1', [req.params.songname])}else{return db.query('select * from plays where userid=$1 and score>0',[userId])}}else{throw new Error("Cannot find user!")}})
.then((data)=>{if(req.params.songname &&data.rows.length>0){songId=data.rows[0].id;if(req.params.difficulty){return db.query('select * from plays where userid=$1 and songid=$2 and difficulty=$3 and score>0',[userId,songId,req.params.difficulty])}else{return db.query('select * from plays where userid=$1 and songid=$2 and score>0',[userId,songId])}}else{res.status(400).json("Could not find song!")}})
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 score>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({passcount:data.rows.length})}else{res.status(200).json({passcount:0})}})
.catch((err)=>{res.status(500).json(err.message)})
})
app.get('/songfccount/:username/:songname/:difficulty',(req,res)=>{
var songId=-1,userId=-1;
db.query('select id from users where username=$1',[req.params.username])
.then((data)=>{if (data.rows.length>0){userId=data.rows[0].id;if(req.params.songname){return db.query('select id from songs where name=$1 or romanized_name=$1 or english_name=$1', [req.params.songname])}else{return db.query('select * from plays where userid=$1 and safe=0 and sad=0 and worst=0',[userId])}}else{throw new Error("Cannot find user!")}})
.then((data)=>{if(req.params.songname &&data.rows.length>0){songId=data.rows[0].id;if(req.params.difficulty){return db.query('select * from plays where userid=$1 and songid=$2 and difficulty=$3 and safe=0 and sad=0 and worst=0',[userId,songId,req.params.difficulty])}else{return db.query('select * from plays where userid=$1 and songid=$2 and safe=0 and sad=0 and worst=0',[userId,songId])}}else{res.status(400).json("Could not find song!")}})
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 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('/rating/:username',(req,res)=>{
if (req.params.username) {
db.query('select rating from users where username=$1',[req.params.username])
db.query('select rating from users where username=$1 limit 1',[req.params.username])
.then((data)=>{if(data.rows.length>0){res.status(200).json(data.rows[0])}else{res.status(200).json({rating:0})}})
} else {
res.status(400).json("Invalid username!")
}
})
app.get('/users/:orderby/:sortorder',(req,res)=>{
if (req.params.orderby && req.params.sortorder && req.query.limit && req.query.offset) {
var valid = ["rating","last_played","playcount","username","fccount"];
var validsort = ["desc","asc"];
if (valid.includes(req.params.orderby) && validsort.includes(req.params.sortorder)) {
db.query('select username,rating,last_played,playcount,fccount from users order by '+req.params.orderby+' '+req.params.sortorder+",rating desc limit $1 offset $2",[req.query.limit,req.query.offset])
.then((data)=>{return res.status(200).json(data.rows)})
.catch((err)=>{res.status(500).json(err.message)})
} else {
res.status(400).json("Not a valid sort option!");
}
} else {
res.status(400).json("Invalid query!")
}
})

@ -0,0 +1,7 @@
const axios = require('axios')
axios.get("http://projectdivar.com:4501/playdata")
.then((data)=>{data.data.forEach((song)=>{return axios.get("http://projectdivar.com:4501/recalculatescore/"+song.id)
.then((data)=>{console.log(data.data)})
.catch((err)=>{console.log(err.message)})})})
.catch((err)=>{console.log(err.message)})

@ -0,0 +1,736 @@
insert into songdata(songid,difficulty,rating) values(1,'E',1.5);
insert into songdata(songid,difficulty,rating) values(1,'N',3);
insert into songdata(songid,difficulty,rating) values(1,'H',5.5);
insert into songdata(songid,difficulty,rating) values(1,'EX',8);
insert into songdata(songid,difficulty,rating) values(2,'E',1.5);
insert into songdata(songid,difficulty,rating) values(2,'N',4);
insert into songdata(songid,difficulty,rating) values(2,'H',7);
insert into songdata(songid,difficulty,rating) values(2,'EX',8.5);
insert into songdata(songid,difficulty,rating) values(3,'E',1.5);
insert into songdata(songid,difficulty,rating) values(3,'N',4);
insert into songdata(songid,difficulty,rating) values(3,'H',6);
insert into songdata(songid,difficulty,rating) values(3,'EX',8.5);
insert into songdata(songid,difficulty,rating) values(4,'E',3.5);
insert into songdata(songid,difficulty,rating) values(4,'N',5);
insert into songdata(songid,difficulty,rating) values(4,'H',6.5);
insert into songdata(songid,difficulty,rating) values(4,'EX',8);
insert into songdata(songid,difficulty,rating) values(5,'E',2);
insert into songdata(songid,difficulty,rating) values(5,'N',5);
insert into songdata(songid,difficulty,rating) values(5,'H',7.5);
insert into songdata(songid,difficulty,rating) values(5,'EX',8.5);
insert into songdata(songid,difficulty,rating) values(6,'E',1.5);
insert into songdata(songid,difficulty,rating) values(6,'N',4);
insert into songdata(songid,difficulty,rating) values(6,'H',7.5);
insert into songdata(songid,difficulty,rating) values(6,'EX',9);
insert into songdata(songid,difficulty,rating) values(7,'E',2);
insert into songdata(songid,difficulty,rating) values(7,'N',5);
insert into songdata(songid,difficulty,rating) values(7,'H',7.5);
insert into songdata(songid,difficulty,rating) values(7,'EX',9);
insert into songdata(songid,difficulty,rating) values(8,'E',1.5);
insert into songdata(songid,difficulty,rating) values(8,'N',4);
insert into songdata(songid,difficulty,rating) values(8,'H',8);
insert into songdata(songid,difficulty,rating) values(8,'EX',9);
insert into songdata(songid,difficulty,rating) values(9,'E',2);
insert into songdata(songid,difficulty,rating) values(9,'N',4.5);
insert into songdata(songid,difficulty,rating) values(9,'H',7.5);
insert into songdata(songid,difficulty,rating) values(9,'EX',9.5);
insert into songdata(songid,difficulty,rating) values(10,'E',2);
insert into songdata(songid,difficulty,rating) values(10,'N',4.5);
insert into songdata(songid,difficulty,rating) values(10,'H',7);
insert into songdata(songid,difficulty,rating) values(10,'EX',9);
insert into songdata(songid,difficulty,rating) values(11,'E',4);
insert into songdata(songid,difficulty,rating) values(11,'N',5.5);
insert into songdata(songid,difficulty,rating) values(11,'H',6);
insert into songdata(songid,difficulty,rating) values(11,'EX',7.5);
insert into songdata(songid,difficulty,rating) values(11,'EXEX',8);
insert into songdata(songid,difficulty,rating) values(12,'E',3);
insert into songdata(songid,difficulty,rating) values(12,'N',5);
insert into songdata(songid,difficulty,rating) values(12,'H',6);
insert into songdata(songid,difficulty,rating) values(12,'EX',7);
insert into songdata(songid,difficulty,rating) values(12,'EXEX',8);
insert into songdata(songid,difficulty,rating) values(13,'N',4.5);
insert into songdata(songid,difficulty,rating) values(13,'H',6.5);
insert into songdata(songid,difficulty,rating) values(13,'EX',8.5);
insert into songdata(songid,difficulty,rating) values(13,'EXEX',8.5);
insert into songdata(songid,difficulty,rating) values(14,'E',2);
insert into songdata(songid,difficulty,rating) values(14,'N',3.5);
insert into songdata(songid,difficulty,rating) values(14,'H',5);
insert into songdata(songid,difficulty,rating) values(14,'EX',7);
insert into songdata(songid,difficulty,rating) values(15,'E',1.5);
insert into songdata(songid,difficulty,rating) values(15,'N',3.5);
insert into songdata(songid,difficulty,rating) values(15,'H',5.5);
insert into songdata(songid,difficulty,rating) values(15,'EX',7);
insert into songdata(songid,difficulty,rating) values(15,'EXEX',8.5);
insert into songdata(songid,difficulty,rating) values(16,'N',6.5);
insert into songdata(songid,difficulty,rating) values(16,'H',7);
insert into songdata(songid,difficulty,rating) values(16,'EX',9);
insert into songdata(songid,difficulty,rating) values(16,'EXEX',10);
insert into songdata(songid,difficulty,rating) values(17,'E',3);
insert into songdata(songid,difficulty,rating) values(17,'N',5);
insert into songdata(songid,difficulty,rating) values(17,'H',6);
insert into songdata(songid,difficulty,rating) values(17,'EX',7);
insert into songdata(songid,difficulty,rating) values(17,'EXEX',8);
insert into songdata(songid,difficulty,rating) values(18,'E',4);
insert into songdata(songid,difficulty,rating) values(18,'N',5);
insert into songdata(songid,difficulty,rating) values(18,'H',6);
insert into songdata(songid,difficulty,rating) values(18,'EX',9);
insert into songdata(songid,difficulty,rating) values(18,'EXEX',8.5);
insert into songdata(songid,difficulty,rating) values(19,'E',4.5);
insert into songdata(songid,difficulty,rating) values(19,'N',5.5);
insert into songdata(songid,difficulty,rating) values(19,'H',6.5);
insert into songdata(songid,difficulty,rating) values(19,'EX',8);
insert into songdata(songid,difficulty,rating) values(19,'EXEX',8.5);
insert into songdata(songid,difficulty,rating) values(20,'E',1);
insert into songdata(songid,difficulty,rating) values(20,'N',3);
insert into songdata(songid,difficulty,rating) values(20,'H',5);
insert into songdata(songid,difficulty,rating) values(20,'EX',7);
insert into songdata(songid,difficulty,rating) values(20,'EXEX',8.5);
insert into songdata(songid,difficulty,rating) values(21,'E',2);
insert into songdata(songid,difficulty,rating) values(21,'N',5);
insert into songdata(songid,difficulty,rating) values(21,'H',6);
insert into songdata(songid,difficulty,rating) values(21,'EX',8);
insert into songdata(songid,difficulty,rating) values(21,'EXEX',8);
insert into songdata(songid,difficulty,rating) values(22,'E',3);
insert into songdata(songid,difficulty,rating) values(22,'N',4);
insert into songdata(songid,difficulty,rating) values(22,'H',5.5);
insert into songdata(songid,difficulty,rating) values(22,'EX',7);
insert into songdata(songid,difficulty,rating) values(22,'EXEX',7.5);
insert into songdata(songid,difficulty,rating) values(23,'E',2);
insert into songdata(songid,difficulty,rating) values(23,'N',5.5);
insert into songdata(songid,difficulty,rating) values(23,'H',7.5);
insert into songdata(songid,difficulty,rating) values(23,'EX',9.5);
insert into songdata(songid,difficulty,rating) values(23,'EXEX',10);
insert into songdata(songid,difficulty,rating) values(24,'E',3);
insert into songdata(songid,difficulty,rating) values(24,'N',4);
insert into songdata(songid,difficulty,rating) values(24,'H',5.5);
insert into songdata(songid,difficulty,rating) values(24,'EX',7);
insert into songdata(songid,difficulty,rating) values(24,'EXEX',8.5);
insert into songdata(songid,difficulty,rating) values(25,'E',3);
insert into songdata(songid,difficulty,rating) values(25,'N',4.5);
insert into songdata(songid,difficulty,rating) values(25,'H',5.5);
insert into songdata(songid,difficulty,rating) values(25,'EX',7.5);
insert into songdata(songid,difficulty,rating) values(26,'E',3);
insert into songdata(songid,difficulty,rating) values(26,'N',4);
insert into songdata(songid,difficulty,rating) values(26,'H',5);
insert into songdata(songid,difficulty,rating) values(26,'EX',7);
insert into songdata(songid,difficulty,rating) values(26,'EXEX',7.5);
insert into songdata(songid,difficulty,rating) values(27,'E',2);
insert into songdata(songid,difficulty,rating) values(27,'N',4);
insert into songdata(songid,difficulty,rating) values(27,'H',6);
insert into songdata(songid,difficulty,rating) values(27,'EX',9.5);
insert into songdata(songid,difficulty,rating) values(27,'EXEX',9);
insert into songdata(songid,difficulty,rating) values(28,'E',3.5);
insert into songdata(songid,difficulty,rating) values(28,'N',5);
insert into songdata(songid,difficulty,rating) values(28,'H',6);
insert into songdata(songid,difficulty,rating) values(28,'EX',8);
insert into songdata(songid,difficulty,rating) values(28,'EXEX',8);
insert into songdata(songid,difficulty,rating) values(29,'E',3);
insert into songdata(songid,difficulty,rating) values(29,'N',6);
insert into songdata(songid,difficulty,rating) values(29,'H',8);
insert into songdata(songid,difficulty,rating) values(29,'EX',10);
insert into songdata(songid,difficulty,rating) values(29,'EXEX',10);
insert into songdata(songid,difficulty,rating) values(30,'N',5);
insert into songdata(songid,difficulty,rating) values(30,'H',6);
insert into songdata(songid,difficulty,rating) values(30,'EX',7);
insert into songdata(songid,difficulty,rating) values(30,'EXEX',8);
insert into songdata(songid,difficulty,rating) values(31,'E',3.5);
insert into songdata(songid,difficulty,rating) values(31,'N',5);
insert into songdata(songid,difficulty,rating) values(31,'H',6.5);
insert into songdata(songid,difficulty,rating) values(31,'EX',8);
insert into songdata(songid,difficulty,rating) values(32,'E',2);
insert into songdata(songid,difficulty,rating) values(32,'N',4);
insert into songdata(songid,difficulty,rating) values(32,'H',5);
insert into songdata(songid,difficulty,rating) values(32,'EX',8);
insert into songdata(songid,difficulty,rating) values(32,'EXEX',9);
insert into songdata(songid,difficulty,rating) values(33,'E',3.5);
insert into songdata(songid,difficulty,rating) values(33,'N',4.5);
insert into songdata(songid,difficulty,rating) values(33,'H',6.5);
insert into songdata(songid,difficulty,rating) values(33,'EX',8);
insert into songdata(songid,difficulty,rating) values(33,'EXEX',9);
insert into songdata(songid,difficulty,rating) values(34,'E',3);
insert into songdata(songid,difficulty,rating) values(34,'N',4);
insert into songdata(songid,difficulty,rating) values(34,'H',6.5);
insert into songdata(songid,difficulty,rating) values(34,'EX',8);
insert into songdata(songid,difficulty,rating) values(35,'N',4);
insert into songdata(songid,difficulty,rating) values(35,'H',7);
insert into songdata(songid,difficulty,rating) values(35,'EX',10);
insert into songdata(songid,difficulty,rating) values(35,'EXEX',10);
insert into songdata(songid,difficulty,rating) values(36,'N',5);
insert into songdata(songid,difficulty,rating) values(36,'H',6);
insert into songdata(songid,difficulty,rating) values(36,'EX',9);
insert into songdata(songid,difficulty,rating) values(36,'EXEX',9.5);
insert into songdata(songid,difficulty,rating) values(37,'N',4.5);
insert into songdata(songid,difficulty,rating) values(37,'H',6);
insert into songdata(songid,difficulty,rating) values(37,'EX',7.5);
insert into songdata(songid,difficulty,rating) values(38,'N',5);
insert into songdata(songid,difficulty,rating) values(38,'H',6);
insert into songdata(songid,difficulty,rating) values(38,'EX',8);
insert into songdata(songid,difficulty,rating) values(38,'EXEX',8);
insert into songdata(songid,difficulty,rating) values(39,'E',2);
insert into songdata(songid,difficulty,rating) values(39,'N',4);
insert into songdata(songid,difficulty,rating) values(39,'H',5);
insert into songdata(songid,difficulty,rating) values(39,'EX',7.5);
insert into songdata(songid,difficulty,rating) values(40,'E',2);
insert into songdata(songid,difficulty,rating) values(40,'N',4);
insert into songdata(songid,difficulty,rating) values(40,'H',5);
insert into songdata(songid,difficulty,rating) values(40,'EX',7);
insert into songdata(songid,difficulty,rating) values(40,'EXEX',8);
insert into songdata(songid,difficulty,rating) values(41,'E',3);
insert into songdata(songid,difficulty,rating) values(41,'N',4.5);
insert into songdata(songid,difficulty,rating) values(41,'H',6.4);
insert into songdata(songid,difficulty,rating) values(41,'EX',8.5);
insert into songdata(songid,difficulty,rating) values(42,'E',2.5);
insert into songdata(songid,difficulty,rating) values(42,'N',4.5);
insert into songdata(songid,difficulty,rating) values(42,'H',6);
insert into songdata(songid,difficulty,rating) values(42,'EX',8);
insert into songdata(songid,difficulty,rating) values(42,'EXEX',8.5);
insert into songdata(songid,difficulty,rating) values(43,'N',5.5);
insert into songdata(songid,difficulty,rating) values(43,'H',6.5);
insert into songdata(songid,difficulty,rating) values(43,'EX',9);
insert into songdata(songid,difficulty,rating) values(44,'E',3);
insert into songdata(songid,difficulty,rating) values(44,'N',4);
insert into songdata(songid,difficulty,rating) values(44,'H',5.5);
insert into songdata(songid,difficulty,rating) values(44,'EX',8);
insert into songdata(songid,difficulty,rating) values(44,'EXEX',8.5);
insert into songdata(songid,difficulty,rating) values(45,'E',2);
insert into songdata(songid,difficulty,rating) values(45,'N',3.5);
insert into songdata(songid,difficulty,rating) values(45,'H',5);
insert into songdata(songid,difficulty,rating) values(45,'EX',7);
insert into songdata(songid,difficulty,rating) values(46,'E',1);
insert into songdata(songid,difficulty,rating) values(46,'N',3);
insert into songdata(songid,difficulty,rating) values(46,'H',5);
insert into songdata(songid,difficulty,rating) values(46,'EX',7.5);
insert into songdata(songid,difficulty,rating) values(47,'N',4);
insert into songdata(songid,difficulty,rating) values(47,'H',6);
insert into songdata(songid,difficulty,rating) values(47,'EX',8.5);
insert into songdata(songid,difficulty,rating) values(48,'E',3);
insert into songdata(songid,difficulty,rating) values(48,'N',4.5);
insert into songdata(songid,difficulty,rating) values(48,'H',6);
insert into songdata(songid,difficulty,rating) values(48,'EX',7.5);
insert into songdata(songid,difficulty,rating) values(48,'EXEX',8.5);
insert into songdata(songid,difficulty,rating) values(49,'E',3.5);
insert into songdata(songid,difficulty,rating) values(49,'N',4.5);
insert into songdata(songid,difficulty,rating) values(49,'H',6);
insert into songdata(songid,difficulty,rating) values(49,'EX',7.5);
insert into songdata(songid,difficulty,rating) values(50,'E',2);
insert into songdata(songid,difficulty,rating) values(50,'N',4.5);
insert into songdata(songid,difficulty,rating) values(50,'H',6);
insert into songdata(songid,difficulty,rating) values(50,'EX',8);
insert into songdata(songid,difficulty,rating) values(51,'E',3.5);
insert into songdata(songid,difficulty,rating) values(51,'N',5);
insert into songdata(songid,difficulty,rating) values(51,'H',6);
insert into songdata(songid,difficulty,rating) values(51,'EX',8);
insert into songdata(songid,difficulty,rating) values(52,'E',3);
insert into songdata(songid,difficulty,rating) values(52,'N',5);
insert into songdata(songid,difficulty,rating) values(52,'H',6);
insert into songdata(songid,difficulty,rating) values(52,'EX',7);
insert into songdata(songid,difficulty,rating) values(53,'E',3);
insert into songdata(songid,difficulty,rating) values(53,'N',4);
insert into songdata(songid,difficulty,rating) values(53,'H',5);
insert into songdata(songid,difficulty,rating) values(53,'EX',7);
insert into songdata(songid,difficulty,rating) values(54,'E',3);
insert into songdata(songid,difficulty,rating) values(54,'N',5);
insert into songdata(songid,difficulty,rating) values(54,'H',7);
insert into songdata(songid,difficulty,rating) values(54,'EX',10);
insert into songdata(songid,difficulty,rating) values(54,'EXEX',10);
insert into songdata(songid,difficulty,rating) values(55,'N',5);
insert into songdata(songid,difficulty,rating) values(55,'H',6);
insert into songdata(songid,difficulty,rating) values(55,'EX',8);
insert into songdata(songid,difficulty,rating) values(55,'EXEX',8.5);
insert into songdata(songid,difficulty,rating) values(56,'N',4.5);
insert into songdata(songid,difficulty,rating) values(56,'H',6);
insert into songdata(songid,difficulty,rating) values(56,'EX',7.5);
insert into songdata(songid,difficulty,rating) values(57,'E',3);
insert into songdata(songid,difficulty,rating) values(57,'N',5.5);
insert into songdata(songid,difficulty,rating) values(57,'H',7);
insert into songdata(songid,difficulty,rating) values(57,'EX',9);
insert into songdata(songid,difficulty,rating) values(57,'EXEX',9.5);
insert into songdata(songid,difficulty,rating) values(58,'N',5.5);
insert into songdata(songid,difficulty,rating) values(58,'H',6.5);
insert into songdata(songid,difficulty,rating) values(58,'EX',8.5);
insert into songdata(songid,difficulty,rating) values(58,'EXEX',9);
insert into songdata(songid,difficulty,rating) values(59,'N',4);
insert into songdata(songid,difficulty,rating) values(59,'H',6);
insert into songdata(songid,difficulty,rating) values(59,'EX',8);
insert into songdata(songid,difficulty,rating) values(60,'E',2);
insert into songdata(songid,difficulty,rating) values(60,'N',4);
insert into songdata(songid,difficulty,rating) values(60,'H',6);
insert into songdata(songid,difficulty,rating) values(60,'EX',7.5);
insert into songdata(songid,difficulty,rating) values(61,'E',3);
insert into songdata(songid,difficulty,rating) values(61,'N',4.5);
insert into songdata(songid,difficulty,rating) values(61,'H',7.5);
insert into songdata(songid,difficulty,rating) values(61,'EX',10);
insert into songdata(songid,difficulty,rating) values(62,'E',1);
insert into songdata(songid,difficulty,rating) values(62,'N',3);
insert into songdata(songid,difficulty,rating) values(62,'H',5);
insert into songdata(songid,difficulty,rating) values(62,'EX',6.5);
insert into songdata(songid,difficulty,rating) values(62,'EXEX',8);
insert into songdata(songid,difficulty,rating) values(63,'E',0);
insert into songdata(songid,difficulty,rating) values(63,'N',0);
insert into songdata(songid,difficulty,rating) values(63,'H',0);
insert into songdata(songid,difficulty,rating) values(63,'EX',0);
insert into songdata(songid,difficulty,rating) values(63,'EXEX',0);
insert into songdata(songid,difficulty,rating) values(64,'N',5);
insert into songdata(songid,difficulty,rating) values(64,'H',6.5);
insert into songdata(songid,difficulty,rating) values(64,'EX',8);
insert into songdata(songid,difficulty,rating) values(64,'EXEX',8.5);
insert into songdata(songid,difficulty,rating) values(65,'E',2.5);
insert into songdata(songid,difficulty,rating) values(65,'N',4.5);
insert into songdata(songid,difficulty,rating) values(65,'H',7.5);
insert into songdata(songid,difficulty,rating) values(65,'EX',9.5);
insert into songdata(songid,difficulty,rating) values(66,'E',1);
insert into songdata(songid,difficulty,rating) values(66,'N',3.5);
insert into songdata(songid,difficulty,rating) values(66,'H',6);
insert into songdata(songid,difficulty,rating) values(66,'EX',8);
insert into songdata(songid,difficulty,rating) values(67,'N',4.5);
insert into songdata(songid,difficulty,rating) values(67,'H',6);
insert into songdata(songid,difficulty,rating) values(67,'EX',8);
insert into songdata(songid,difficulty,rating) values(68,'E',2.5);
insert into songdata(songid,difficulty,rating) values(68,'N',3.5);
insert into songdata(songid,difficulty,rating) values(68,'H',5.5);
insert into songdata(songid,difficulty,rating) values(68,'EX',8);
insert into songdata(songid,difficulty,rating) values(69,'E',2);
insert into songdata(songid,difficulty,rating) values(69,'N',4.5);
insert into songdata(songid,difficulty,rating) values(69,'H',6.5);
insert into songdata(songid,difficulty,rating) values(69,'EX',8.5);
insert into songdata(songid,difficulty,rating) values(70,'E',2);
insert into songdata(songid,difficulty,rating) values(70,'N',4);
insert into songdata(songid,difficulty,rating) values(70,'H',5);
insert into songdata(songid,difficulty,rating) values(70,'EX',7);
insert into songdata(songid,difficulty,rating) values(71,'E',2);
insert into songdata(songid,difficulty,rating) values(71,'N',4.5);
insert into songdata(songid,difficulty,rating) values(71,'H',6.5);
insert into songdata(songid,difficulty,rating) values(71,'EX',8.5);
insert into songdata(songid,difficulty,rating) values(72,'E',1.5);
insert into songdata(songid,difficulty,rating) values(72,'N',4);
insert into songdata(songid,difficulty,rating) values(72,'H',5.5);
insert into songdata(songid,difficulty,rating) values(72,'EX',8.5);
insert into songdata(songid,difficulty,rating) values(73,'E',1.5);
insert into songdata(songid,difficulty,rating) values(73,'N',4);
insert into songdata(songid,difficulty,rating) values(73,'H',6.5);
insert into songdata(songid,difficulty,rating) values(73,'EX',8.5);
insert into songdata(songid,difficulty,rating) values(74,'E',3.5);
insert into songdata(songid,difficulty,rating) values(74,'N',6);
insert into songdata(songid,difficulty,rating) values(74,'H',8);
insert into songdata(songid,difficulty,rating) values(74,'EX',9.5);
insert into songdata(songid,difficulty,rating) values(75,'E',1.5);
insert into songdata(songid,difficulty,rating) values(75,'N',3.5);
insert into songdata(songid,difficulty,rating) values(75,'H',6.5);
insert into songdata(songid,difficulty,rating) values(75,'EX',9);
insert into songdata(songid,difficulty,rating) values(76,'E',2);
insert into songdata(songid,difficulty,rating) values(76,'N',4.5);
insert into songdata(songid,difficulty,rating) values(76,'H',6);
insert into songdata(songid,difficulty,rating) values(76,'EX',7.5);
insert into songdata(songid,difficulty,rating) values(77,'E',4);
insert into songdata(songid,difficulty,rating) values(77,'N',5.5);
insert into songdata(songid,difficulty,rating) values(77,'H',6.5);
insert into songdata(songid,difficulty,rating) values(77,'EX',9.5);
insert into songdata(songid,difficulty,rating) values(78,'E',2.5);
insert into songdata(songid,difficulty,rating) values(78,'N',4.5);
insert into songdata(songid,difficulty,rating) values(78,'H',6);
insert into songdata(songid,difficulty,rating) values(78,'EX',8);
insert into songdata(songid,difficulty,rating) values(79,'E',3);
insert into songdata(songid,difficulty,rating) values(79,'N',5.5);
insert into songdata(songid,difficulty,rating) values(79,'H',6.5);
insert into songdata(songid,difficulty,rating) values(79,'EX',8.5);
insert into songdata(songid,difficulty,rating) values(80,'E',2.5);
insert into songdata(songid,difficulty,rating) values(80,'N',4);
insert into songdata(songid,difficulty,rating) values(80,'H',6);
insert into songdata(songid,difficulty,rating) values(80,'EX',7.5);
insert into songdata(songid,difficulty,rating) values(81,'E',2);
insert into songdata(songid,difficulty,rating) values(81,'N',4);
insert into songdata(songid,difficulty,rating) values(81,'H',5.5);
insert into songdata(songid,difficulty,rating) values(81,'EX',7.5);
insert into songdata(songid,difficulty,rating) values(82,'E',1.5);
insert into songdata(songid,difficulty,rating) values(82,'N',4);
insert into songdata(songid,difficulty,rating) values(82,'H',6);
insert into songdata(songid,difficulty,rating) values(82,'EX',8.5);
insert into songdata(songid,difficulty,rating) values(83,'N',4.5);
insert into songdata(songid,difficulty,rating) values(83,'H',7.5);
insert into songdata(songid,difficulty,rating) values(83,'EX',9.5);
insert into songdata(songid,difficulty,rating) values(84,'E',2.5);
insert into songdata(songid,difficulty,rating) values(84,'N',4.5);
insert into songdata(songid,difficulty,rating) values(84,'H',6.5);
insert into songdata(songid,difficulty,rating) values(84,'EX',8);
insert into songdata(songid,difficulty,rating) values(85,'E',4);
insert into songdata(songid,difficulty,rating) values(85,'N',5.5);
insert into songdata(songid,difficulty,rating) values(85,'H',7);
insert into songdata(songid,difficulty,rating) values(85,'EX',8.5);
insert into songdata(songid,difficulty,rating) values(86,'E',3.5);
insert into songdata(songid,difficulty,rating) values(86,'N',5);
insert into songdata(songid,difficulty,rating) values(86,'H',7);
insert into songdata(songid,difficulty,rating) values(86,'EX',9);
insert into songdata(songid,difficulty,rating) values(87,'E',3.5);
insert into songdata(songid,difficulty,rating) values(87,'N',4);
insert into songdata(songid,difficulty,rating) values(87,'H',6);
insert into songdata(songid,difficulty,rating) values(87,'EX',8);
insert into songdata(songid,difficulty,rating) values(87,'EXEX',8.5);
insert into songdata(songid,difficulty,rating) values(88,'E',1);
insert into songdata(songid,difficulty,rating) values(88,'N',3);
insert into songdata(songid,difficulty,rating) values(88,'H',5.5);
insert into songdata(songid,difficulty,rating) values(88,'EX',7.5);
insert into songdata(songid,difficulty,rating) values(89,'E',2.5);
insert into songdata(songid,difficulty,rating) values(89,'N',5);
insert into songdata(songid,difficulty,rating) values(89,'H',6);
insert into songdata(songid,difficulty,rating) values(89,'EX',7.5);
insert into songdata(songid,difficulty,rating) values(90,'E',2);
insert into songdata(songid,difficulty,rating) values(90,'N',4);
insert into songdata(songid,difficulty,rating) values(90,'H',6);
insert into songdata(songid,difficulty,rating) values(90,'EX',8);
insert into songdata(songid,difficulty,rating) values(91,'E',4);
insert into songdata(songid,difficulty,rating) values(91,'N',6);
insert into songdata(songid,difficulty,rating) values(91,'H',7.5);
insert into songdata(songid,difficulty,rating) values(91,'EX',9.5);
insert into songdata(songid,difficulty,rating) values(92,'E',3.5);
insert into songdata(songid,difficulty,rating) values(92,'N',4);
insert into songdata(songid,difficulty,rating) values(92,'H',5.5);
insert into songdata(songid,difficulty,rating) values(92,'EX',7.5);
insert into songdata(songid,difficulty,rating) values(93,'E',4);
insert into songdata(songid,difficulty,rating) values(93,'N',6);
insert into songdata(songid,difficulty,rating) values(93,'H',7.5);
insert into songdata(songid,difficulty,rating) values(93,'EX',10);
insert into songdata(songid,difficulty,rating) values(94,'E',3);
insert into songdata(songid,difficulty,rating) values(94,'N',4.5);
insert into songdata(songid,difficulty,rating) values(94,'H',6.5);
insert into songdata(songid,difficulty,rating) values(94,'EX',8.5);
insert into songdata(songid,difficulty,rating) values(95,'E',1);
insert into songdata(songid,difficulty,rating) values(95,'N',3);
insert into songdata(songid,difficulty,rating) values(95,'H',5);
insert into songdata(songid,difficulty,rating) values(95,'EX',7.5);
insert into songdata(songid,difficulty,rating) values(96,'N',5.5);
insert into songdata(songid,difficulty,rating) values(96,'H',6.5);
insert into songdata(songid,difficulty,rating) values(96,'EX',7.5);
insert into songdata(songid,difficulty,rating) values(96,'EXEX',8);
insert into songdata(songid,difficulty,rating) values(97,'E',4);
insert into songdata(songid,difficulty,rating) values(97,'N',5);
insert into songdata(songid,difficulty,rating) values(97,'H',6);
insert into songdata(songid,difficulty,rating) values(97,'EX',7);
insert into songdata(songid,difficulty,rating) values(97,'EXEX',8);
insert into songdata(songid,difficulty,rating) values(98,'N',5.5);
insert into songdata(songid,difficulty,rating) values(98,'H',7.5);
insert into songdata(songid,difficulty,rating) values(98,'EX',8.5);
insert into songdata(songid,difficulty,rating) values(98,'EXEX',9.5);
insert into songdata(songid,difficulty,rating) values(99,'E',2);
insert into songdata(songid,difficulty,rating) values(99,'N',4);
insert into songdata(songid,difficulty,rating) values(99,'H',6);
insert into songdata(songid,difficulty,rating) values(99,'EX',8.5);
insert into songdata(songid,difficulty,rating) values(100,'E',3.5);
insert into songdata(songid,difficulty,rating) values(100,'N',5.5);
insert into songdata(songid,difficulty,rating) values(100,'H',7.5);
insert into songdata(songid,difficulty,rating) values(100,'EX',9);
insert into songdata(songid,difficulty,rating) values(101,'E',3);
insert into songdata(songid,difficulty,rating) values(101,'N',5.5);
insert into songdata(songid,difficulty,rating) values(101,'H',7);
insert into songdata(songid,difficulty,rating) values(101,'EX',9);
insert into songdata(songid,difficulty,rating) values(102,'E',2);
insert into songdata(songid,difficulty,rating) values(102,'N',4);
insert into songdata(songid,difficulty,rating) values(102,'H',5);
insert into songdata(songid,difficulty,rating) values(102,'EX',6);
insert into songdata(songid,difficulty,rating) values(103,'E',4);
insert into songdata(songid,difficulty,rating) values(103,'N',5.5);
insert into songdata(songid,difficulty,rating) values(103,'H',6);
insert into songdata(songid,difficulty,rating) values(103,'EX',8.5);
insert into songdata(songid,difficulty,rating) values(103,'EXEX',8.5);
insert into songdata(songid,difficulty,rating) values(104,'E',3);
insert into songdata(songid,difficulty,rating) values(104,'N',4);
insert into songdata(songid,difficulty,rating) values(104,'H',5);
insert into songdata(songid,difficulty,rating) values(104,'EX',7);
insert into songdata(songid,difficulty,rating) values(104,'EXEX',8);
insert into songdata(songid,difficulty,rating) values(105,'E',3);
insert into songdata(songid,difficulty,rating) values(105,'N',5);
insert into songdata(songid,difficulty,rating) values(105,'H',6);
insert into songdata(songid,difficulty,rating) values(105,'EX',7);
insert into songdata(songid,difficulty,rating) values(105,'EXEX',8.5);
insert into songdata(songid,difficulty,rating) values(106,'N',4);
insert into songdata(songid,difficulty,rating) values(106,'H',6.5);
insert into songdata(songid,difficulty,rating) values(106,'EX',8);
insert into songdata(songid,difficulty,rating) values(106,'EXEX',9);
insert into songdata(songid,difficulty,rating) values(107,'E',3);
insert into songdata(songid,difficulty,rating) values(107,'N',4);
insert into songdata(songid,difficulty,rating) values(107,'H',6.5);
insert into songdata(songid,difficulty,rating) values(107,'EX',8);
insert into songdata(songid,difficulty,rating) values(108,'E',3);
insert into songdata(songid,difficulty,rating) values(108,'N',4);
insert into songdata(songid,difficulty,rating) values(108,'H',5);
insert into songdata(songid,difficulty,rating) values(108,'EX',8);
insert into songdata(songid,difficulty,rating) values(108,'EXEX',7.5);
insert into songdata(songid,difficulty,rating) values(109,'E',3);
insert into songdata(songid,difficulty,rating) values(109,'N',4.5);
insert into songdata(songid,difficulty,rating) values(109,'H',6);
insert into songdata(songid,difficulty,rating) values(109,'EX',7);
insert into songdata(songid,difficulty,rating) values(109,'EXEX',8);
insert into songdata(songid,difficulty,rating) values(110,'E',1);
insert into songdata(songid,difficulty,rating) values(110,'N',3);
insert into songdata(songid,difficulty,rating) values(110,'H',5);
insert into songdata(songid,difficulty,rating) values(110,'EX',8);
insert into songdata(songid,difficulty,rating) values(110,'EXEX',9);
insert into songdata(songid,difficulty,rating) values(111,'E',2.5);
insert into songdata(songid,difficulty,rating) values(111,'N',4);
insert into songdata(songid,difficulty,rating) values(111,'H',6.5);
insert into songdata(songid,difficulty,rating) values(111,'EX',8.5);
insert into songdata(songid,difficulty,rating) values(112,'E',4);
insert into songdata(songid,difficulty,rating) values(112,'N',5);
insert into songdata(songid,difficulty,rating) values(112,'H',6);
insert into songdata(songid,difficulty,rating) values(112,'EX',7);
insert into songdata(songid,difficulty,rating) values(112,'EXEX',7.5);
insert into songdata(songid,difficulty,rating) values(113,'N',4);
insert into songdata(songid,difficulty,rating) values(113,'H',6);
insert into songdata(songid,difficulty,rating) values(113,'EX',9);
insert into songdata(songid,difficulty,rating) values(113,'EXEX',9.5);
insert into songdata(songid,difficulty,rating) values(114,'N',5.5);
insert into songdata(songid,difficulty,rating) values(114,'H',8);
insert into songdata(songid,difficulty,rating) values(114,'EX',10);
insert into songdata(songid,difficulty,rating) values(114,'EXEX',10);
insert into songdata(songid,difficulty,rating) values(115,'N',5);
insert into songdata(songid,difficulty,rating) values(115,'H',6);
insert into songdata(songid,difficulty,rating) values(115,'EX',9);
insert into songdata(songid,difficulty,rating) values(115,'EXEX',9.5);
insert into songdata(songid,difficulty,rating) values(116,'E',2.5);
insert into songdata(songid,difficulty,rating) values(116,'N',4.5);
insert into songdata(songid,difficulty,rating) values(116,'H',6.5);
insert into songdata(songid,difficulty,rating) values(116,'EX',8);
insert into songdata(songid,difficulty,rating) values(117,'N',4.5);
insert into songdata(songid,difficulty,rating) values(117,'H',6.5);
insert into songdata(songid,difficulty,rating) values(117,'EX',8);
insert into songdata(songid,difficulty,rating) values(118,'E',3.5);
insert into songdata(songid,difficulty,rating) values(118,'N',5);
insert into songdata(songid,difficulty,rating) values(118,'H',7);
insert into songdata(songid,difficulty,rating) values(118,'EX',8.5);
insert into songdata(songid,difficulty,rating) values(118,'EXEX',8.5);
insert into songdata(songid,difficulty,rating) values(119,'E',2);
insert into songdata(songid,difficulty,rating) values(119,'H',4.5);
insert into songdata(songid,difficulty,rating) values(119,'EX',7);
insert into songdata(songid,difficulty,rating) values(119,'EXEX',7.5);
insert into songdata(songid,difficulty,rating) values(120,'E',3);
insert into songdata(songid,difficulty,rating) values(120,'N',4);
insert into songdata(songid,difficulty,rating) values(120,'H',5);
insert into songdata(songid,difficulty,rating) values(120,'EX',7);
insert into songdata(songid,difficulty,rating) values(120,'EXEX',7.5);
insert into songdata(songid,difficulty,rating) values(121,'E',2.5);
insert into songdata(songid,difficulty,rating) values(121,'N',3.5);
insert into songdata(songid,difficulty,rating) values(121,'H',6);
insert into songdata(songid,difficulty,rating) values(121,'EX',8);
insert into songdata(songid,difficulty,rating) values(122,'E',2);
insert into songdata(songid,difficulty,rating) values(122,'N',4);
insert into songdata(songid,difficulty,rating) values(122,'H',5);
insert into songdata(songid,difficulty,rating) values(122,'EX',7);
insert into songdata(songid,difficulty,rating) values(122,'EXEX',8);
insert into songdata(songid,difficulty,rating) values(123,'N',4);
insert into songdata(songid,difficulty,rating) values(123,'H',6);
insert into songdata(songid,difficulty,rating) values(123,'EX',8);
insert into songdata(songid,difficulty,rating) values(123,'EXEX',8);
insert into songdata(songid,difficulty,rating) values(124,'E',2);
insert into songdata(songid,difficulty,rating) values(124,'N',4);
insert into songdata(songid,difficulty,rating) values(124,'H',6);
insert into songdata(songid,difficulty,rating) values(124,'EX',8);
insert into songdata(songid,difficulty,rating) values(125,'E',2.5);
insert into songdata(songid,difficulty,rating) values(125,'H',5);
insert into songdata(songid,difficulty,rating) values(125,'EX',7);
insert into songdata(songid,difficulty,rating) values(125,'EXEX',8.5);
insert into songdata(songid,difficulty,rating) values(126,'E',2.5);
insert into songdata(songid,difficulty,rating) values(126,'N',4);
insert into songdata(songid,difficulty,rating) values(126,'H',5);
insert into songdata(songid,difficulty,rating) values(126,'EX',7);
insert into songdata(songid,difficulty,rating) values(127,'E',2);
insert into songdata(songid,difficulty,rating) values(127,'N',4);
insert into songdata(songid,difficulty,rating) values(127,'H',5);
insert into songdata(songid,difficulty,rating) values(127,'EX',6);
insert into songdata(songid,difficulty,rating) values(127,'EXEX',7.5);
insert into songdata(songid,difficulty,rating) values(128,'N',6);
insert into songdata(songid,difficulty,rating) values(128,'H',8);
insert into songdata(songid,difficulty,rating) values(128,'EX',10);
insert into songdata(songid,difficulty,rating) values(129,'N',4);
insert into songdata(songid,difficulty,rating) values(129,'H',6.5);
insert into songdata(songid,difficulty,rating) values(129,'EX',8.5);
insert into songdata(songid,difficulty,rating) values(130,'E',3);
insert into songdata(songid,difficulty,rating) values(130,'N',4);
insert into songdata(songid,difficulty,rating) values(130,'H',5);
insert into songdata(songid,difficulty,rating) values(130,'EX',7);
insert into songdata(songid,difficulty,rating) values(130,'EXEX',7.5);
insert into songdata(songid,difficulty,rating) values(131,'E',3.5);
insert into songdata(songid,difficulty,rating) values(131,'N',4.5);
insert into songdata(songid,difficulty,rating) values(131,'H',5.5);
insert into songdata(songid,difficulty,rating) values(131,'EX',7.5);
insert into songdata(songid,difficulty,rating) values(131,'EXEX',7.5);
insert into songdata(songid,difficulty,rating) values(132,'E',3);
insert into songdata(songid,difficulty,rating) values(132,'N',4);
insert into songdata(songid,difficulty,rating) values(132,'H',6.5);
insert into songdata(songid,difficulty,rating) values(132,'EX',8);
insert into songdata(songid,difficulty,rating) values(133,'E',2);
insert into songdata(songid,difficulty,rating) values(133,'N',4);
insert into songdata(songid,difficulty,rating) values(133,'H',5);
insert into songdata(songid,difficulty,rating) values(133,'EX',7);
insert into songdata(songid,difficulty,rating) values(133,'EXEX',7.5);
insert into songdata(songid,difficulty,rating) values(134,'E',2);
insert into songdata(songid,difficulty,rating) values(134,'N',4.5);
insert into songdata(songid,difficulty,rating) values(134,'H',6.5);
insert into songdata(songid,difficulty,rating) values(134,'EX',9);
insert into songdata(songid,difficulty,rating) values(135,'E',3);
insert into songdata(songid,difficulty,rating) values(135,'N',4);
insert into songdata(songid,difficulty,rating) values(135,'H',5);
insert into songdata(songid,difficulty,rating) values(135,'EX',7);
insert into songdata(songid,difficulty,rating) values(135,'EXEX',8.5);
insert into songdata(songid,difficulty,rating) values(136,'E',3);
insert into songdata(songid,difficulty,rating) values(136,'N',4.5);
insert into songdata(songid,difficulty,rating) values(136,'H',6.5);
insert into songdata(songid,difficulty,rating) values(136,'EX',8);
insert into songdata(songid,difficulty,rating) values(137,'E',3);
insert into songdata(songid,difficulty,rating) values(137,'N',4.5);
insert into songdata(songid,difficulty,rating) values(137,'H',6.5);
insert into songdata(songid,difficulty,rating) values(137,'EX',8.5);
insert into songdata(songid,difficulty,rating) values(138,'N',4.5);
insert into songdata(songid,difficulty,rating) values(138,'H',6.5);
insert into songdata(songid,difficulty,rating) values(138,'EX',8.5);
insert into songdata(songid,difficulty,rating) values(139,'E',2);
insert into songdata(songid,difficulty,rating) values(139,'N',3);
insert into songdata(songid,difficulty,rating) values(139,'H',4);
insert into songdata(songid,difficulty,rating) values(139,'EX',7);
insert into songdata(songid,difficulty,rating) values(139,'EXEX',8);
insert into songdata(songid,difficulty,rating) values(140,'E',2);
insert into songdata(songid,difficulty,rating) values(140,'N',4);
insert into songdata(songid,difficulty,rating) values(140,'H',6.5);
insert into songdata(songid,difficulty,rating) values(140,'EX',8);
insert into songdata(songid,difficulty,rating) values(141,'E',1.5);
insert into songdata(songid,difficulty,rating) values(141,'N',4.5);
insert into songdata(songid,difficulty,rating) values(141,'H',7);
insert into songdata(songid,difficulty,rating) values(141,'EX',8.5);
Loading…
Cancel
Save