85 lines
2.2 KiB
JavaScript
85 lines
2.2 KiB
JavaScript
import { Router } from 'express'
|
|
import { sqlite } from '../libs/db/init.js'
|
|
|
|
const playerApi = Router()
|
|
|
|
|
|
playerApi.get(
|
|
'/get/:player',
|
|
async (req, res) => {
|
|
let player = req.params.player
|
|
|
|
/* Misc, may be worth to cache this? */
|
|
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
|