92 lines
2.6 KiB
JavaScript
92 lines
2.6 KiB
JavaScript
import { Router } from 'express'
|
|
import { sqlite } from '../db/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)
|
|
|
|
/* TODO, make points a single table. Would be alot more efficent but longer cache creation time */
|
|
/* Points */
|
|
const points = sqlite.prepare(`SELECT rank, points FROM points WHERE name = ?`).get(player)
|
|
const pointsRank = sqlite.prepare(`SELECT rank, points FROM pointsRank WHERE name = ?`).get(player)
|
|
const pointsTeam = sqlite.prepare(`SELECT rank, points FROM pointsTeam WHERE name = ?`).get(player)
|
|
|
|
const pointsThisWeek = sqlite.prepare(`SELECT rank, points FROM pointsThisWeek WHERE name = ?`).get(player)
|
|
const pointsThisMonth = sqlite.prepare(`SELECT rank, points FROM pointsThisMonth WHERE name = ?`).get(player)
|
|
|
|
return res.json({
|
|
success: true,
|
|
response: {
|
|
firstFinish,
|
|
|
|
points,
|
|
pointsRank,
|
|
pointsTeam,
|
|
|
|
pointsThisWeek,
|
|
pointsThisMonth,
|
|
}
|
|
})
|
|
}
|
|
)
|
|
|
|
/* 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
|