Skip to content

Commit 36fa99f

Browse files
committed
all ck_checkpoints queries added
1 parent 20ad3aa commit 36fa99f

3 files changed

Lines changed: 181 additions & 57 deletions

File tree

README.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ SurfTimer FastAPI
1111
- [ ] ck_announcements
1212
- [x] ck_bonus
1313
- [x] ck_checkpoints
14-
- [x] ck_latestrecords
15-
- [x] ck_maptier
16-
- [x] ck_playeroptions2
17-
- [x] ck_playerrank
18-
- [x] ck_playertemp
14+
- [x] ck_latestrecords - Partially
15+
- [x] ck_maptier - Partially
16+
- [x] ck_playeroptions2 - Partially
17+
- [x] ck_playerrank - Partially
18+
- [x] ck_playertemp - Partially
1919
- [ ] ck_playertimes
2020
- [ ] ck_spawnlocations
2121
- [ ] ck_vipadmins

surftimer/ck_checkpoints.py

Lines changed: 151 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -82,10 +82,10 @@ async def selectCheckpoints(
8282
cached_data = get_cache(cache_key)
8383
if cached_data is not None:
8484
print(f"[Redis] Loaded '{cache_key}' ({time.perf_counter() - tic:0.4f}s)")
85-
return JSONResponse(
86-
status_code=status.HTTP_200_OK,
87-
content=json.loads(cached_data, use_decimal=True, parse_nan=True),
88-
)
85+
response.headers["content-type"] = "application/json"
86+
response.status_code = status.HTTP_200_OK
87+
response.body = json.loads(cached_data, use_decimal=True, parse_nan=True)
88+
return response
8989

9090
xquery = selectQuery(
9191
surftimer.queries.sql_selectCheckpoints.format(mapname, steamid32)
@@ -95,9 +95,8 @@ async def selectCheckpoints(
9595
# xquery = xquery.pop()
9696
print("Hit, length:", len(xquery))
9797
else:
98-
return JSONResponse(
99-
status_code=status.HTTP_404_NOT_FOUND, content=status.HTTP_404_NOT_FOUND
100-
)
98+
response.status_code = status.HTTP_204_NO_CONTENT
99+
return response
101100

102101
# Cache the data in Redis
103102
set_cache(cache_key, xquery)
@@ -128,10 +127,10 @@ async def selectCheckpointsinZoneGroup(
128127
cached_data = get_cache(cache_key)
129128
if cached_data is not None:
130129
print(f"[Redis] Loaded '{cache_key}' ({time.perf_counter() - tic:0.4f}s)")
131-
return JSONResponse(
132-
status_code=status.HTTP_200_OK,
133-
content=json.loads(cached_data, use_decimal=True, parse_nan=True),
134-
)
130+
response.headers["content-type"] = "application/json"
131+
response.status_code = status.HTTP_200_OK
132+
response.body = json.loads(cached_data, use_decimal=True, parse_nan=True)
133+
return response
135134

136135
xquery = selectQuery(
137136
surftimer.queries.sql_selectCheckpointsinZoneGroup.format(
@@ -142,9 +141,8 @@ async def selectCheckpointsinZoneGroup(
142141
if len(xquery) > 0:
143142
print("Hit, length:", len(xquery))
144143
else:
145-
return JSONResponse(
146-
status_code=status.HTTP_404_NOT_FOUND, content=status.HTTP_404_NOT_FOUND
147-
)
144+
response.status_code = status.HTTP_204_NO_CONTENT
145+
return response
148146

149147
# Cache the data in Redis
150148
set_cache(cache_key, xquery)
@@ -171,10 +169,10 @@ async def selectRecordCheckpoints(
171169
cached_data = get_cache(cache_key)
172170
if cached_data is not None:
173171
print(f"[Redis] Loaded '{cache_key}' ({time.perf_counter() - tic:0.4f}s)")
174-
return JSONResponse(
175-
status_code=status.HTTP_200_OK,
176-
content=json.loads(cached_data, use_decimal=True, parse_nan=True),
177-
)
172+
response.headers["content-type"] = "application/json"
173+
response.status_code = status.HTTP_200_OK
174+
response.body = json.loads(cached_data, use_decimal=True, parse_nan=True)
175+
return response
178176

179177
xquery = selectQuery(
180178
surftimer.queries.sql_selectRecordCheckpoints.format(
@@ -185,9 +183,8 @@ async def selectRecordCheckpoints(
185183
if len(xquery) > 0:
186184
print("Hit, length:", len(xquery))
187185
else:
188-
return JSONResponse(
189-
status_code=status.HTTP_404_NOT_FOUND, content=status.HTTP_404_NOT_FOUND
190-
)
186+
response.status_code = status.HTTP_204_NO_CONTENT
187+
return response
191188

192189
# Cache the data in Redis
193190
set_cache(cache_key, xquery)
@@ -241,14 +238,14 @@ async def selectStageTimes(
241238
tic = time.perf_counter()
242239

243240
# Check if data is cached in Redis
244-
cache_key = f"selectStageTimes:-{mapname}-{steamid32}"
241+
cache_key = f"selectStageTimes:{mapname}-{steamid32}"
245242
cached_data = get_cache(cache_key)
246243
if cached_data is not None:
247244
print(f"[Redis] Loaded '{cache_key}' ({time.perf_counter() - tic:0.4f}s)")
248-
return JSONResponse(
249-
status_code=status.HTTP_200_OK,
250-
content=json.loads(cached_data, use_decimal=True, parse_nan=True),
251-
)
245+
response.headers["content-type"] = "application/json"
246+
response.status_code = status.HTTP_200_OK
247+
response.body = json.loads(cached_data, use_decimal=True, parse_nan=True)
248+
return response
252249

253250
xquery = selectQuery(
254251
surftimer.queries.sql_selectStageTimes.format(mapname, steamid32)
@@ -257,9 +254,8 @@ async def selectStageTimes(
257254
if len(xquery) > 0:
258255
print("Hit, length:", len(xquery))
259256
else:
260-
return JSONResponse(
261-
status_code=status.HTTP_404_NOT_FOUND, content=status.HTTP_404_NOT_FOUND
262-
)
257+
response.status_code = status.HTTP_204_NO_CONTENT
258+
return response
263259

264260
# Cache the data in Redis
265261
set_cache(cache_key, xquery)
@@ -282,14 +278,14 @@ async def selectStageAttempts(
282278
tic = time.perf_counter()
283279

284280
# Check if data is cached in Redis
285-
cache_key = f"selectStageAttempts:-{mapname}-{steamid32}"
281+
cache_key = f"selectStageAttempts:{mapname}-{steamid32}"
286282
cached_data = get_cache(cache_key)
287283
if cached_data is not None:
288284
print(f"[Redis] Loaded '{cache_key}' ({time.perf_counter() - tic:0.4f}s)")
289-
return JSONResponse(
290-
status_code=status.HTTP_200_OK,
291-
content=json.loads(cached_data, use_decimal=True, parse_nan=True),
292-
)
285+
response.headers["content-type"] = "application/json"
286+
response.status_code = status.HTTP_200_OK
287+
response.body = json.loads(cached_data, use_decimal=True, parse_nan=True)
288+
return response
293289

294290
xquery = selectQuery(
295291
surftimer.queries.sql_selectStageAttempts.format(mapname, steamid32)
@@ -298,9 +294,127 @@ async def selectStageAttempts(
298294
if len(xquery) > 0:
299295
print("Hit, length:", len(xquery))
300296
else:
301-
return JSONResponse(
302-
status_code=status.HTTP_404_NOT_FOUND, content=status.HTTP_404_NOT_FOUND
303-
)
297+
response.status_code = status.HTTP_204_NO_CONTENT
298+
return response
299+
300+
# Cache the data in Redis
301+
set_cache(cache_key, xquery)
302+
303+
toc = time.perf_counter()
304+
print(f"Execution time {toc - tic:0.4f}")
305+
306+
return xquery
307+
308+
309+
@router.delete(
310+
"/surftimer/deleteWipePlayerCheckpoints",
311+
name="Wipe Player Checkpoint",
312+
tags=["ck_checkpoints", "strays"],
313+
)
314+
async def deleteWipePlayerCheckpoints(
315+
request: Request,
316+
response: Response,
317+
steamid32: str,
318+
):
319+
"""```char sql_stray_deleteWipePlayerCheckpoints[] = ....```"""
320+
tic = time.perf_counter()
321+
322+
xquery = insertQuery(
323+
surftimer.queries.sql_stray_deleteWipePlayerCheckpoints.format(steamid32)
324+
)
325+
326+
content_data = {"deleted": xquery, "xtime": time.perf_counter() - tic}
327+
if xquery < 1:
328+
# response.body = json.dumps(content_data).encode('utf-8')
329+
response.headers["content-type"] = "application/json"
330+
response.status_code = status.HTTP_304_NOT_MODIFIED
331+
return response
332+
333+
toc = time.perf_counter()
334+
print(f"Execution time {toc - tic:0.4f}")
335+
336+
response.body = json.dumps(content_data).encode("utf-8")
337+
response.headers["content-type"] = "application/json"
338+
response.status_code = status.HTTP_200_OK
339+
return response
340+
341+
342+
@router.get(
343+
"/surftimer/selectCPR",
344+
name="Get Player Checkpoints for !cpr",
345+
tags=["ck_checkpoints", "strays"],
346+
)
347+
async def stray_selectCPR(
348+
request: Request,
349+
response: Response,
350+
steamid32: str,
351+
mapname: str,
352+
):
353+
"""`char[] sql_stray_selectCPR = ....`"""
354+
tic = time.perf_counter()
355+
356+
# Check if data is cached in Redis
357+
cache_key = f"selectCPR:{steamid32}-{mapname}"
358+
cached_data = get_cache(cache_key)
359+
if cached_data is not None:
360+
print(f"[Redis] Loaded '{cache_key}' ({time.perf_counter() - tic:0.4f}s)")
361+
response.headers["content-type"] = "application/json"
362+
response.status_code = status.HTTP_200_OK
363+
response.body = json.loads(cached_data, use_decimal=True, parse_nan=True)
364+
return response
365+
366+
xquery = selectQuery(
367+
surftimer.queries.sql_stray_selectCPR.format(steamid32, mapname)
368+
)
369+
370+
if len(xquery) > 0:
371+
print("Hit, length:", len(xquery))
372+
else:
373+
response.status_code = status.HTTP_204_NO_CONTENT
374+
return response
375+
376+
# Cache the data in Redis
377+
set_cache(cache_key, xquery)
378+
379+
toc = time.perf_counter()
380+
print(f"Execution time {toc - tic:0.4f}")
381+
382+
return xquery
383+
384+
385+
@router.get(
386+
"/surftimer/ccp_getPlayerPR",
387+
name="Get Player CCP info",
388+
tags=["ck_checkpoints", "strays"],
389+
)
390+
async def ccp_getPlayerPR(
391+
request: Request,
392+
response: Response,
393+
mapname: str,
394+
steamid32: str,
395+
):
396+
"""`char[] sql_stray_ccp_getPlayerPR = ....`"""
397+
tic = time.perf_counter()
398+
399+
# Check if data is cached in Redis
400+
cache_key = f"ccp_getPlayerPR:{mapname}-{steamid32}"
401+
cached_data = get_cache(cache_key)
402+
if cached_data is not None:
403+
print(f"[Redis] Loaded '{cache_key}' ({time.perf_counter() - tic:0.4f}s)")
404+
response.headers["content-type"] = "application/json"
405+
response.status_code = status.HTTP_200_OK
406+
response.body = json.loads(cached_data, use_decimal=True, parse_nan=True)
407+
return response
408+
409+
xquery = selectQuery(
410+
surftimer.queries.sql_stray_ccp_getPlayerPR.format(steamid32, mapname)
411+
)
412+
413+
if len(xquery) > 0:
414+
print("Hit, length:", len(xquery))
415+
else:
416+
response.status_code = status.HTTP_204_NO_CONTENT
417+
return response
304418

305419
# Cache the data in Redis
306420
set_cache(cache_key, xquery)

surftimer/queries.py

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -22,21 +22,6 @@
2222
sql_stray_selectPlayerSpecificBonusData = "SELECT `steamid`, `name`, `mapname`, `runtime`, zonegroup FROM `ck_bonus` WHERE `steamid` = '{}' AND `mapname` LIKE '%{}%' AND zonegroup = {} AND style = 0 LIMIT 1;"
2323
sql_stray_selectTotalBonusCompletes = "SELECT count(name) FROM `ck_bonus` WHERE `mapname` = '{}' AND zonegroup = {} AND style = 0 AND runtime > 0.0;"
2424
sql_stray_selectPlayersBonusRank = "SELECT name,mapname FROM ck_bonus WHERE runtime <= (SELECT runtime FROM ck_bonus WHERE steamid = '{}' AND mapname = '{}' AND zonegroup = {} AND style = 0 AND runtime > -1.0) AND mapname = '{}' AND zonegroup = {} AND runtime > -1.0 ORDER BY runtime;"
25-
sql_stray_viewBonusRunRank = "SELECT count(runtime)+1 FROM ck_bonus WHERE mapname = '{}' AND zonegroup = {} AND runtime < {} AND style = {};"
26-
sql_stray_deleteSpecificBonus = (
27-
"DELETE FROM ck_bonus WHERE zonegroup = {} AND mapname = '{}';"
28-
)
29-
sql_stray_selectPersonalBonusPrestrafeSpeeds = "SELECT zonegroup, style, velStartXY, velStartXYZ, velStartZ FROM ck_bonus WHERE steamid = '{}' AND mapname = '{}' AND runtime > '0.0';"
30-
sql_stray_selectMapRankBonusStyle = "SELECT name FROM ck_bonus WHERE runtime <= (SELECT runtime FROM ck_bonus WHERE steamid = '{}' AND mapname= '{}' AND style = {} AND runtime > 0.0 AND zonegroup = {}) AND mapname = '{}' AND style = {} AND zonegroup = {};"
31-
sql_stray_viewBonusStyleRunRank = "SELECT count(runtime)+1 FROM ck_bonus WHERE mapname = '{}' AND zonegroup = '{}' AND style = '{}' AND runtime < {}"
32-
sql_stray_selectPersonalBonusStylesRecords = "SELECT runtime, zonegroup FROM ck_bonus WHERE steamid = '{}' AND mapname = '{}' AND style = '{}' AND runtime > '0.0'"
33-
sql_stray_viewPRinfoMapRankBonusCallback = "SELECT COUNT(*), steamid FROM ck_bonus WHERE runtime <= (SELECT runtime FROM ck_bonus WHERE steamid = '{}' AND mapname LIKE '%{}%' AND runtime > -1.0 AND zonegroup = {} AND style = 0) AND mapname = '{}' AND zonegroup = {} AND style = 0;"
34-
sql_stray_getRankSteamIdBonus = "SELECT steamid FROM ck_bonus WHERE mapname = '{}' AND style = 0 AND runtime > -1.0 AND zonegroup = '{}' ORDER BY runtime ASC LIMIT {}, 1;"
35-
sql_stray_deleteWipePlayerBonus = "DELETE FROM ck_bonus WHERE steamid = '{}';"
36-
sql_stray_pr_bonusInfo = "SELECT runtime, zonegroup FROM ck_bonus WHERE steamid = '{}' AND mapname = '{}' AND zonegroup = {};"
37-
## Player Points Calculation ##
38-
sql_stray_point_calc_countFinishedBonus = "SELECT mapname, (SELECT count(1)+1 FROM ck_bonus b WHERE a.mapname=b.mapname AND a.runtime > b.runtime AND a.zonegroup = b.zonegroup AND b.style = {}) AS `rank`, (SELECT count(1) FROM ck_bonus b WHERE a.mapname = b.mapname AND a.zonegroup = b.zonegroup AND b.style = {}) as total FROM ck_bonus a WHERE steamid = '{}' AND style = {};"
39-
4025

4126
## ck_checkpoints
4227
sql_createCheckpoints = "CREATE TABLE IF NOT EXISTS ck_checkpoints (steamid VARCHAR(32), mapname VARCHAR(32), cp INT(11) NOT NULL, time decimal(12,6) NOT NULL DEFAULT '-1.000000', zonegroup INT(12) NOT NULL DEFAULT 0, PRIMARY KEY(steamid, mapname, cp, zonegroup)) DEFAULT CHARSET=utf8mb4;"
@@ -196,3 +181,28 @@
196181
sql_UpdateLastSeenSQLite = (
197182
"UPDATE ck_playerrank SET lastseen = date('now') where steamid = '{}';"
198183
)
184+
185+
186+
## Not implemented in ST code yet
187+
# bonus
188+
sql_stray_viewBonusRunRank = "SELECT count(runtime)+1 FROM ck_bonus WHERE mapname = '{}' AND zonegroup = {} AND runtime < {} AND style = {};"
189+
sql_stray_deleteSpecificBonus = (
190+
"DELETE FROM ck_bonus WHERE zonegroup = {} AND mapname = '{}';"
191+
)
192+
sql_stray_selectPersonalBonusPrestrafeSpeeds = "SELECT zonegroup, style, velStartXY, velStartXYZ, velStartZ FROM ck_bonus WHERE steamid = '{}' AND mapname = '{}' AND runtime > '0.0';"
193+
sql_stray_selectMapRankBonusStyle = "SELECT name FROM ck_bonus WHERE runtime <= (SELECT runtime FROM ck_bonus WHERE steamid = '{}' AND mapname= '{}' AND style = {} AND runtime > 0.0 AND zonegroup = {}) AND mapname = '{}' AND style = {} AND zonegroup = {};"
194+
sql_stray_viewBonusStyleRunRank = "SELECT count(runtime)+1 FROM ck_bonus WHERE mapname = '{}' AND zonegroup = '{}' AND style = '{}' AND runtime < {}"
195+
sql_stray_selectPersonalBonusStylesRecords = "SELECT runtime, zonegroup FROM ck_bonus WHERE steamid = '{}' AND mapname = '{}' AND style = '{}' AND runtime > '0.0'"
196+
sql_stray_viewPRinfoMapRankBonusCallback = "SELECT COUNT(*), steamid FROM ck_bonus WHERE runtime <= (SELECT runtime FROM ck_bonus WHERE steamid = '{}' AND mapname LIKE '%{}%' AND runtime > -1.0 AND zonegroup = {} AND style = 0) AND mapname = '{}' AND zonegroup = {} AND style = 0;"
197+
sql_stray_getRankSteamIdBonus = "SELECT steamid FROM ck_bonus WHERE mapname = '{}' AND style = 0 AND runtime > -1.0 AND zonegroup = '{}' ORDER BY runtime ASC LIMIT {}, 1;"
198+
sql_stray_deleteWipePlayerBonus = "DELETE FROM ck_bonus WHERE steamid = '{}';"
199+
sql_stray_pr_bonusInfo = "SELECT runtime, zonegroup FROM ck_bonus WHERE steamid = '{}' AND mapname = '{}' AND zonegroup = {};"
200+
## Player Points Calculation ##
201+
sql_stray_point_calc_countFinishedBonus = "SELECT mapname, (SELECT count(1)+1 FROM ck_bonus b WHERE a.mapname=b.mapname AND a.runtime > b.runtime AND a.zonegroup = b.zonegroup AND b.style = {}) AS `rank`, (SELECT count(1) FROM ck_bonus b WHERE a.mapname = b.mapname AND a.zonegroup = b.zonegroup AND b.style = {}) as total FROM ck_bonus a WHERE steamid = '{}' AND style = {};"
202+
203+
# checkpoints
204+
sql_stray_deleteWipePlayerCheckpoints = (
205+
"DELETE FROM ck_checkpoints WHERE steamid = '%s';"
206+
)
207+
sql_stray_selectCPR = "SELECT cp, time FROM ck_checkpoints WHERE steamid = '%s' AND mapname = '%s' AND zonegroup = 0;"
208+
sql_stray_ccp_getPlayerPR = "SELECT db1.steamid, db1.mapname, db1.cp, db1.stage_time, db1.stage_attempts, (SELECT count(name)+1 FROM ck_wrcps WHERE style = 0 AND mapname = db1.mapname AND stage = db1.cp AND stage_time > -1.0 AND runtimepro <= db1.stage_time) AS `rank`, (SELECT count(name) FROM ck_wrcps WHERE style = 0 AND mapname = db1.mapname AND stage = db1.cp AND runtimepro > -1.0) AS total FROM ck_checkpoints db1 WHERE db1.mapname = '%s' AND db1.steamid = '%s' AND db1.stage_time > -1.0 ORDER BY cp ASC;"

0 commit comments

Comments
 (0)