Fetch top ranking

This commit is contained in:
KGrzeg 2021-10-17 23:55:58 +02:00
parent a575d447f9
commit 0c60b4ef26
4 changed files with 48 additions and 2 deletions

View file

@ -2,7 +2,7 @@
const baseApiPath = "http://localhost:3000"
export default {
async post(path: string, data: any) {
async post(path: string, data?: any) {
const headers = {
'Content-Type': 'application/json'
}
@ -27,6 +27,31 @@ export default {
return response.json()
},
async get(path: string, data?: any) {
const headers = {
'Content-Type': 'application/json'
}
if (window.myStuff.token) {
headers['Authorization'] = `Bearer ${window.myStuff.token}`
}
let response;
try {
response = await fetch(`${baseApiPath}/${path}`, {
method: "GET",
headers,
body: JSON.stringify(data)
})
} catch (err) {
console.log("oops");
console.error(err)
}
return response.json()
},
async signup(name: string) {
return this.post("signup", { name })
},
@ -42,4 +67,8 @@ export default {
time
})
},
async top() {
return this.get("top")
}
}

View file

@ -145,13 +145,15 @@ declare global {
elements.key!.innerText = ''
}
function setup() {
async function setup() {
window.myStuff = {}
elements.buttons.login!.addEventListener("click", login)
elements.buttons.logout!.addEventListener("click", logout)
elements.buttons.signup!.addEventListener("click", signup)
console.log(await API.top())
checkIfLogged()
}

View file

@ -40,6 +40,14 @@ class Database {
await this.db.write()
}
}
getTop(amount = 15) {
return this.db.data.users
.filter(user => user.record)
.map(user => { return { name: user.name, record: user.record } })
.sort((a, b) => a.record > b.record ? -1 : 1)
.slice(0, amount)
}
}
export default new Database

View file

@ -84,6 +84,13 @@ app.post("/record", protect, neededArguments(['points', 'shoots', 'time']), jg,
})
})
app.get("/top", (req, res) => {
res.json({
status: "ok",
records: db.getTop()
})
})
app.use(function (err, req, res, next) {
if (err.name === 'UnauthorizedError') {
res.status(401).send('invalid token...');