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