ddstats-server/api/graph.js
2021-10-31 23:43:36 +01:00

79 lines
2.1 KiB
JavaScript

import { Router } from 'express'
import { sqlite } from '../libs/database/init.js'
const graphApi = Router()
graphApi.get(
'/points',
(req, res) => {
/* Check if a query was provided */
if (!req.query.q) {
return res.json({
success: false,
response: "No query ('host/path?q=query') provided!"
})
}
let player = req.query.q
const finishes = sqlite.prepare(
`
SELECT DISTINCT(a.map), a.timestamp, b.points
FROM race AS a
INNER JOIN maps AS b
ON a.map = b.map
WHERE a.NAME = ?
AND a.map LIKE '%'
GROUP BY a.map
ORDER BY a.timestamp;
`)
let currentPoints = 0
let array = []
for (const finish of finishes.iterate(player)) {
console.log(finish)
currentPoints += finish.Points
array.push({ t: new Date(finish.Timestamp), y: currentPoints })
}
return res.json({
success: true,
response: array,
})
}
)
graphApi.get(
'/map',
(req, res) => {
/* Check if a query was provided */
if (!req.query.q) {
return res.json({
success: false,
response: "No query ('host/path?q=query') provided!"
})
}
let map = req.query.q
const finishes = sqlite.prepare(
`
SELECT * FROM race WHERE map = ? ORDER BY Timestamp;
`)
let currentFinish
let currentBest = 0;
let array = []
for (const record of finishes.iterate(map)) {
currentFinish = record.Time
if(currentFinish <= currentBest || currentBest == 0) {
currentBest = currentFinish
array.push({ player: record.Name, Time: record.Time, Date: new Date(record.Timestamp) })
}
}
return res.json({
success: true,
response: array,
})
}
)
export default graphApi