big refactor for lots of filtering

This commit is contained in:
2023-03-15 17:29:48 +01:00
parent c57e7fa556
commit afdd4f3fc6
7 changed files with 488 additions and 130 deletions
+69 -67
View File
@@ -1,91 +1,93 @@
import { Router } from 'express'
import { param } from 'express-validator'
import { param, query } from 'express-validator'
import { validateErrors } from '../common'
import serverPlayers from './routes/serverPlayers'
import serverList from './routes/serverList'
import player from './routes/player'
import { getWeaponList, getWeaponReport } from '../cache/cacheUtils'
import {
getWeaponList,
getWeaponReport,
getPlayerReport,
getPlayerList
} from '../cache/cacheUtils'
const router = Router()
//timeout middleware ?
router.get('/*', (req, res, next) => {
next()
})
router.get('/weapons/', async (req, res) => {
const data = JSON.parse((await getWeaponList()) || '{}')
res.status(200).send(data)
})
router.get(
'/weapons/:weaponId',
param(['weaponId']).exists().isString(),
query(['player', 'server']).optional().toInt().isInt(),
validateErrors,
async (req, res) => {
const weapon = req.params.weaponId
const data = await getWeaponReport(weapon)
const data = await getWeaponReport(
req.params.weaponId,
Number(req.query.server) || undefined,
req.query.player?.toString()
)
res.status(200).send(data)
}
)
router.get(
'/weapons/',
query(['player', 'server']).optional().toInt().isInt(),
validateErrors,
async (req, res) => {
const data = await getWeaponList(
req.query.server?.toString(),
req.query.player?.toString()
)
res.status(200).send(data)
}
)
router.get(
'/players/:playerId',
param(['playerId']).exists().toInt().isInt(),
query(['server']).optional().toInt().isInt(),
query('weapon').optional().isString(),
validateErrors,
async (req, res) => {
const data = await getPlayerReport(
req.params.playerId,
Number(req.query.server) || undefined,
req.query.weapon?.toString()
)
if (!req.query.weapon) {
const weapons = await getWeaponList(
req.query.server?.toString(),
req.params.playerId
)
data.weapons = weapons
} else {
data.weapons = (await getWeaponReport(
req.query.weapon.toString(),
Number(req.query.server) || undefined,
req.params.playerId
)) as any
}
res.status(200).send(data)
}
)
router.get(
'/players/',
query(['server']).optional().toInt().isInt(),
query('weapon').optional().isString(),
validateErrors,
async (req, res) => {
const data = await getPlayerList(
Number(req.query.server) || undefined,
req.query.weapon?.toString()
)
res.status(200).send(data)
}
)
//router.get('/maps/', (req, res, next) => {})
//router.get('/players', (req, res, next) => {})
//router.get('/players/:playerId', (req, res, next) => {})
router.get('/players/:playerId/weapons')
router.get('/servers/', serverList)
//router.get('/servers/:serverId/', (req, res, next) => {})
router.get('/servers/:serverId/players', serverPlayers)
//router.get('/servers/:serverId/players/:playerId', player)
router.get(
'/servers/:serverId/players/:playerId/weapons',
param(['serverId', 'playerId']).exists().toInt().isInt(),
validateErrors,
async (req, res) => {
const data = JSON.parse(
(await getWeaponList(req.params.serverId, req.params.playerId)) || '{}'
)
res.status(200).send(data)
}
)
router.get(
'/servers/:serverId/players/:playerId/weapons:weaponId',
param(['serverId', 'playerId, weaponId']).exists().toInt().isInt(),
validateErrors,
async (req, res) => {
const data = getWeaponReport(
req.params.weaponId,
Number(req.params.serverId),
Number(req.params.playerId)
)
res.status(200).send(data)
}
)
router.use(
'/servers/:serverId/weapons',
param(['serverId']).exists().toInt().isInt(),
validateErrors,
async (req, res) => {
const data = JSON.parse((await getWeaponList(req.params.serverId)) || '{}')
res.status(200).send(data)
}
)
router.use(
'/servers/:serverId/weapons',
param(['serverId']).exists().toInt().isInt(),
validateErrors,
async (req, res) => {
const data = getWeaponReport(
req.params.weaponId,
Number(req.params.serverId)
)
res.status(200).send(data)
}
)
export default router