ddstats-server/api/players.js

85 lines
2.1 KiB
JavaScript

import { Router } from 'express'
import { sqlite } from '../libs/database/init.js'
const playerApi = Router()
playerApi.get(
'/get/:player',
async (req, res) => {
let player = req.params.player
/* Misc */
const firstFinish = sqlite.prepare(`SELECT server as server, map as map, time as time, Timestamp as date FROM race WHERE name = ? ORDER BY Timestamp ASC LIMIT 1`).get(player)
/* Points */
let points = {}
const pointsData = sqlite.prepare(`SELECT type, rank, points FROM points WHERE name = ?`)
for (const pointsType of pointsData.iterate(player)) {
points[pointsType.type] = pointsType
}
return res.json({
success: true,
response: {
firstFinish,
points,
}
})
}
)
/* Searching allows you to attach sql LIKE %
* Example to search for players beginning with Test
* You can do search for %Test
*/
playerApi.get(
'/search',
async (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!"
})
}
1
let name = req.query.q
/* Set defaults */
let limit = 20
let offset = 0
if (req.query.limit) {
limit = req.query.limit
}
const amount = sqlite.prepare(
`SELECT COUNT(*) as amount FROM points
WHERE name LIKE "${name}"
`).get()
let pages = Math.floor(amount.amount / limit)
if (req.query.page)
offset = (req.query.page * limit)
const players = sqlite.prepare(
`SELECT Rank, Name, Points FROM points
WHERE name LIKE "${name}" LIMIT ? OFFSET ?
`).all(limit, offset)
return res.json({
success: true,
response: {
amount: amount.amount,
pages: pages,
players: players,
}
})
}
)
export default playerApi