Skip to content

Commit f162045

Browse files
committed
all styles rank for player
1 parent 91850e2 commit f162045

File tree

3 files changed

+60
-4
lines changed

3 files changed

+60
-4
lines changed

globals.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,19 @@
9898
# Whitelisted IPs
9999
WHITELISTED_IPS = config["WHITELISTED_IPS"]
100100

101+
# All styles
102+
# 0 = normal, 1 = SW, 2 = HSW, 3 = BW, 4 = Low-Gravity, 5 = Slow Motion, 6 = Fast Forward, 7 = Freestyle
103+
all_styles = [
104+
"Normal",
105+
"Sideways",
106+
"Half-Sideways",
107+
"Backwards",
108+
"Low-Gravity",
109+
"Slow Motion",
110+
"Fast Forward",
111+
"Freestyle",
112+
]
113+
101114

102115
def append_request_log(request: Request):
103116
"""Logs some general info about the request recieved in `requests.json`"""

surftimer/ck_playerrank.py

Lines changed: 45 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from fastapi import APIRouter, Request, Response, status
22
from fastapi.responses import JSONResponse
33
from sql import selectQuery, insertQuery, insert_escaped_query
4-
from globals import get_cache, set_cache
4+
from globals import get_cache, set_cache, all_styles
55
from pydantic import BaseModel
66
import time, json
77
import surftimer.queries
@@ -406,6 +406,49 @@ async def selectRankedPlayersRank(
406406
return xquery
407407

408408

409+
@router.get(
410+
"/surftimer/selectRankedPlayerRankAllStyles",
411+
name="Player rank for all styles",
412+
tags=["ck_playerrank", "Refactored"],
413+
)
414+
async def selectRankedPlayerRankAllStyles(
415+
request: Request,
416+
response: Response,
417+
steamid32: str,
418+
):
419+
"""`char[] sql_selectRankedPlayersRank = ....`\n
420+
Get all styles player rank in 1 go"""
421+
tic = time.perf_counter()
422+
423+
# Check if data is cached in Redis
424+
cache_key = f"selectRankedPlayerRankAllStyles:{steamid32}"
425+
cached_data = get_cache(cache_key)
426+
if cached_data is not None:
427+
print(f"[Redis] Loaded '{cache_key}' ({time.perf_counter() - tic:0.4f}s)")
428+
response.headers["content-type"] = "application/json"
429+
response.status_code = status.HTTP_200_OK
430+
response.body = json.loads(cached_data, use_decimal=True, parse_nan=True)
431+
return response
432+
433+
output = []
434+
435+
i = 0
436+
for style in all_styles:
437+
xquery = selectQuery(
438+
surftimer.queries.sql_selectPlayersStylesRank.format(i, steamid32, i)
439+
)
440+
output.append({"style": style,"rank": xquery.pop()["COUNT(steamid)"]})
441+
i = i + 1
442+
443+
toc = time.perf_counter()
444+
445+
print(f"Execution time {toc - tic:0.4f}")
446+
# Cache the data in Redis
447+
set_cache(cache_key, output)
448+
449+
return output
450+
451+
409452
@router.get(
410453
"/surftimer/selectRankedPlayers",
411454
name="Select Ranked Players",
@@ -1535,9 +1578,7 @@ async def rankCommandSelf(
15351578
response.body = json.loads(cached_data, use_decimal=True, parse_nan=True)
15361579
return response
15371580

1538-
xquery = selectQuery(
1539-
surftimer.queries.sql_stray_rankCommandSelf.format(steamid32)
1540-
)
1581+
xquery = selectQuery(surftimer.queries.sql_stray_rankCommandSelf.format(steamid32))
15411582

15421583
if xquery:
15431584
xquery = xquery.pop()

surftimer/queries.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,8 @@
9090
sql_selectTopPlayers = "SELECT name, points, finishedmapspro, steamid FROM ck_playerrank WHERE style = {} ORDER BY points DESC LIMIT 100"
9191
sql_selectRankedPlayer = "SELECT steamid, name, points, finishedmapspro, country, lastseen, timealive, timespec, connections, readchangelog, style, countryCode, continentCode from ck_playerrank where steamid='{}';"
9292
sql_selectRankedPlayersRank = "SELECT name FROM ck_playerrank WHERE style = {} AND points >= (SELECT points FROM ck_playerrank WHERE steamid = '{}' AND style = {}) ORDER BY points;"
93+
sql_selectPlayersStylesRank = "SELECT COUNT(steamid) FROM ck_playerrank WHERE style = {} AND points >= (SELECT points FROM ck_playerrank WHERE steamid = '{}' AND style = {}) ORDER BY points;"
94+
9395
sql_selectRankedPlayers = "SELECT steamid, name from ck_playerrank where points > 0 AND style = 0 ORDER BY points DESC LIMIT 0, 1067;"
9496
sql_CountRankedPlayers = "SELECT COUNT(steamid) FROM ck_playerrank WHERE style = {};"
9597
sql_CountRankedPlayers2 = (

0 commit comments

Comments
 (0)