2021-10-30 20:26:37 +02:00
import { Router } from 'express'
2021-10-31 23:43:36 +01:00
import { sqlite } from '../libs/database/init.js'
2021-10-30 20:26:37 +02:00
const playerApi = Router ( )
playerApi . get (
'/get/:player' ,
async ( req , res ) => {
let player = req . params . player
2021-10-31 20:46:43 +01:00
/* Misc, may be worth to cache this? */
2021-10-30 20:26:37 +02:00
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 */
2021-10-31 20:46:43 +01:00
let points = { }
const pointsData = sqlite . prepare ( ` SELECT type, rank, points FROM points WHERE name = ? ` )
2021-10-30 20:26:37 +02:00
2021-10-31 20:46:43 +01:00
for ( const pointsType of pointsData . iterate ( player ) ) {
points [ pointsType . type ] = pointsType
}
2021-10-30 20:26:37 +02:00
return res . json ( {
success : true ,
response : {
firstFinish ,
points ,
}
} )
}
)
/ * S e a r c h i n g a l l o w s y o u t o a t t a c h s q l L I K E %
* Example to search for players beginning with Test
2021-10-31 20:46:43 +01:00
* You can do search for % Test
2021-10-30 20:26:37 +02:00
* /
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!"
} )
}
2021-10-31 20:46:43 +01:00
1
2021-10-30 20:26:37 +02:00
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 )
2021-10-31 20:46:43 +01:00
offset = ( req . query . page * limit )
2021-10-30 20:26:37 +02:00
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