Skip to content

Commit fb16bd3

Browse files
committed
all ck_maptier queries added
1 parent 2e17afd commit fb16bd3

2 files changed

Lines changed: 241 additions & 20 deletions

File tree

surftimer/ck_maptier.py

Lines changed: 226 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,20 +36,19 @@ async def selectMapTier(
3636
cached_data = get_cache(cache_key)
3737
if cached_data is not None:
3838
print(f"[Redis] Loaded '{cache_key}' ({time.perf_counter() - tic:0.4f}s)")
39-
40-
return JSONResponse(
41-
status_code=status.HTTP_200_OK, content=json.loads(cached_data)
42-
)
39+
response.headers["content-type"] = "application/json"
40+
response.status_code = status.HTTP_200_OK
41+
response.body = json.loads(cached_data, use_decimal=True, parse_nan=True)
42+
return response
4343

4444
xquery = selectQuery(surftimer.queries.sql_selectMapTier.format(mapname))
4545

4646
if xquery:
4747
xquery = xquery.pop()
4848
else:
49-
return JSONResponse(
50-
status_code=status.HTTP_404_NOT_FOUND,
51-
content={"mapname": mapname, "xtime": time.perf_counter() - tic},
52-
)
49+
response.headers["content-type"] = "application/json"
50+
response.status_code = status.HTTP_204_NO_CONTENT
51+
return response
5352

5453
# Cache the data in Redis
5554
set_cache(cache_key, xquery)
@@ -166,3 +165,222 @@ async def updateMapperName(
166165
response.headers["content-type"] = "application/json"
167166
response.status_code = status.HTTP_200_OK
168167
return response
168+
169+
170+
@router.get(
171+
"/surftimer/viewUnfinishedMaps",
172+
name="View Player Unfinished Maps",
173+
tags=["ck_maptier", "strays"],
174+
)
175+
async def viewUnfinishedMaps(
176+
request: Request,
177+
response: Response,
178+
style: int,
179+
steamid32: str,
180+
):
181+
"""`char[] sql_stray_viewUnfinishedMaps = ....`"""
182+
tic = time.perf_counter()
183+
184+
# Check if data is cached in Redis
185+
cache_key = f"viewUnfinishedMaps:{style}-{steamid32}"
186+
cached_data = get_cache(cache_key)
187+
if cached_data is not None:
188+
print(f"[Redis] Loaded '{cache_key}' ({time.perf_counter() - tic:0.4f}s)")
189+
response.headers["content-type"] = "application/json"
190+
response.status_code = status.HTTP_200_OK
191+
response.body = json.loads(cached_data, use_decimal=True, parse_nan=True)
192+
return response
193+
194+
xquery = selectQuery(
195+
surftimer.queries.sql_stray_viewUnfinishedMaps.format(
196+
style,
197+
steamid32,
198+
style,
199+
steamid32,
200+
)
201+
)
202+
203+
if len(xquery) <= 0:
204+
response.headers["content-type"] = "application/json"
205+
response.status_code = status.HTTP_204_NO_CONTENT
206+
return response
207+
208+
# Cache the data in Redis
209+
set_cache(cache_key, xquery)
210+
211+
toc = time.perf_counter()
212+
213+
print(f"Execution time {toc - tic:0.4f}")
214+
215+
return xquery
216+
217+
218+
@router.get(
219+
"/surftimer/selectMapImprovement",
220+
name="View Map Total Finishes",
221+
tags=["ck_maptier", "strays"],
222+
)
223+
async def selectMapImprovement(
224+
request: Request,
225+
response: Response,
226+
mapname: str,
227+
):
228+
"""`char[] sql_stray_selectMapImprovement = ....`"""
229+
tic = time.perf_counter()
230+
231+
# Check if data is cached in Redis
232+
cache_key = f"selectMapImprovement:{mapname}"
233+
cached_data = get_cache(cache_key)
234+
if cached_data is not None:
235+
print(f"[Redis] Loaded '{cache_key}' ({time.perf_counter() - tic:0.4f}s)")
236+
response.headers["content-type"] = "application/json"
237+
response.status_code = status.HTTP_200_OK
238+
response.body = json.loads(cached_data, use_decimal=True, parse_nan=True)
239+
return response
240+
241+
xquery = selectQuery(
242+
surftimer.queries.sql_stray_selectMapImprovement.format(mapname)
243+
)
244+
245+
if xquery:
246+
xquery = xquery.pop()
247+
else:
248+
response.headers["content-type"] = "application/json"
249+
response.status_code = status.HTTP_204_NO_CONTENT
250+
return response
251+
252+
# Cache the data in Redis
253+
set_cache(cache_key, xquery)
254+
255+
toc = time.perf_counter()
256+
257+
print(f"Execution time {toc - tic:0.4f}")
258+
259+
return xquery
260+
261+
262+
@router.get(
263+
"/surftimer/viewMapnamePr",
264+
name="View Map Name",
265+
tags=["ck_maptier", "strays"],
266+
)
267+
async def viewMapnamePr(
268+
request: Request,
269+
response: Response,
270+
mapname: str,
271+
):
272+
"""`char[] sql_stray_viewMapnamePr = ....`"""
273+
tic = time.perf_counter()
274+
275+
# Check if data is cached in Redis
276+
cache_key = f"viewMapnamePr:{mapname}"
277+
cached_data = get_cache(cache_key)
278+
if cached_data is not None:
279+
print(f"[Redis] Loaded '{cache_key}' ({time.perf_counter() - tic:0.4f}s)")
280+
response.headers["content-type"] = "application/json"
281+
response.status_code = status.HTTP_200_OK
282+
response.body = json.loads(cached_data, use_decimal=True, parse_nan=True)
283+
return response
284+
285+
xquery = selectQuery(surftimer.queries.sql_stray_viewMapnamePr.format(mapname))
286+
287+
if xquery:
288+
xquery = xquery.pop()
289+
else:
290+
response.headers["content-type"] = "application/json"
291+
response.status_code = status.HTTP_204_NO_CONTENT
292+
return response
293+
294+
# Cache the data in Redis
295+
set_cache(cache_key, xquery)
296+
297+
toc = time.perf_counter()
298+
299+
print(f"Execution time {toc - tic:0.4f}")
300+
301+
return xquery
302+
303+
304+
@router.get(
305+
"/surftimer/viewPlayerPrMapInfo",
306+
name="View PR Map Info",
307+
tags=["ck_maptier", "strays"],
308+
)
309+
async def viewPlayerPrMapInfo(
310+
request: Request,
311+
response: Response,
312+
mapname: str,
313+
):
314+
"""`char[] sql_stray_viewPlayerPrMapInfo = ....`"""
315+
tic = time.perf_counter()
316+
317+
# Check if data is cached in Redis
318+
cache_key = f"viewPlayerPrMapInfo:{mapname}"
319+
cached_data = get_cache(cache_key)
320+
if cached_data is not None:
321+
print(f"[Redis] Loaded '{cache_key}' ({time.perf_counter() - tic:0.4f}s)")
322+
response.headers["content-type"] = "application/json"
323+
response.status_code = status.HTTP_200_OK
324+
response.body = json.loads(cached_data, use_decimal=True, parse_nan=True)
325+
return response
326+
327+
xquery = selectQuery(
328+
surftimer.queries.sql_stray_viewPlayerPrMapInfo.format(
329+
mapname, mapname, mapname
330+
)
331+
)
332+
333+
if xquery:
334+
xquery = xquery.pop()
335+
else:
336+
response.headers["content-type"] = "application/json"
337+
response.status_code = status.HTTP_204_NO_CONTENT
338+
return response
339+
340+
# Cache the data in Redis
341+
set_cache(cache_key, xquery)
342+
343+
toc = time.perf_counter()
344+
345+
print(f"Execution time {toc - tic:0.4f}")
346+
347+
return xquery
348+
349+
350+
@router.get(
351+
"/surftimer/selectMapcycle",
352+
name="View Mapcycle",
353+
tags=["ck_maptier", "strays"],
354+
)
355+
async def selectMapcycle(
356+
request: Request,
357+
response: Response,
358+
):
359+
"""`char[] sql_stray_selectMapcycle = ....`"""
360+
tic = time.perf_counter()
361+
362+
# Check if data is cached in Redis
363+
cache_key = f"selectMapcycle:"
364+
cached_data = get_cache(cache_key)
365+
if cached_data is not None:
366+
print(f"[Redis] Loaded '{cache_key}' ({time.perf_counter() - tic:0.4f}s)")
367+
response.headers["content-type"] = "application/json"
368+
response.status_code = status.HTTP_200_OK
369+
response.body = json.loads(cached_data, use_decimal=True, parse_nan=True)
370+
return response
371+
372+
xquery = selectQuery(surftimer.queries.sql_stray_selectMapcycle)
373+
374+
if len(xquery) <= 0:
375+
response.headers["content-type"] = "application/json"
376+
response.status_code = status.HTTP_204_NO_CONTENT
377+
return response
378+
379+
# Cache the data in Redis
380+
set_cache(cache_key, xquery)
381+
382+
toc = time.perf_counter()
383+
384+
print(f"Execution time {toc - tic:0.4f}")
385+
386+
return xquery

surftimer/queries.py

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@
134134
sql_selectMapZones = "SELECT zoneid, zonetype, zonetypeid, pointa_x, pointa_y, pointa_z, pointb_x, pointb_y, pointb_z, vis, team, zonegroup, zonename, hookname, targetname, onejumplimit, prespeed FROM ck_zones WHERE mapname = '{}' ORDER BY zonetypeid ASC"
135135
sql_selectTotalBonusCount = "SELECT mapname, zoneid, zonetype, zonetypeid, pointa_x, pointa_y, pointa_z, pointb_x, pointb_y, pointb_z, vis, team, zonegroup, zonename FROM ck_zones WHERE zonetype = 3 GROUP BY mapname, zonegroup;"
136136
sql_selectZoneIds = "SELECT mapname, zoneid, zonetype, zonetypeid, pointa_x, pointa_y, pointa_z, pointb_x, pointb_y, pointb_z, vis, team, zonegroup, zonename, hookname, targetname, onejumplimit, prespeed FROM ck_zones WHERE mapname = '{}' ORDER BY zoneid ASC"
137-
sql_selectBonusesInMap = "SELECT mapname, zonegroup, zonename FROM `ck_zones` WHERE mapname LIKE '%c{}%c' AND zonegroup > 0 GROUP BY zonegroup;"
137+
sql_selectBonusesInMap = "SELECT mapname, zonegroup, zonename FROM `ck_zones` WHERE mapname LIKE '%{}%' AND zonegroup > 0 GROUP BY zonegroup;"
138138
sql_deleteMapZones = "DELETE FROM ck_zones WHERE mapname = '{}'"
139139
sql_deleteZone = "DELETE FROM ck_zones WHERE mapname = '{}' AND zoneid = '{}'"
140140
sql_deleteZonesInGroup = (
@@ -177,13 +177,7 @@
177177
sql_checkDataType = "SELECT DATA_TYPE, NUMERIC_PRECISION, NUMERIC_SCALE FROM information_schema.COLUMNS WHERE TABLE_SCHEMA='{}' AND TABLE_NAME='{}' AND COLUMN_NAME='{}' HAVING DATA_TYPE = 'decimal' AND NUMERIC_PRECISION = 12 AND NUMERIC_SCALE = 6;"
178178

179179

180-
# SQLite
181-
sql_UpdateLastSeenSQLite = (
182-
"UPDATE ck_playerrank SET lastseen = date('now') where steamid = '{}';"
183-
)
184-
185-
186-
## Not implemented in ST code yet
180+
## ALL below are NOT implemented in ST code yet ##
187181
# bonus
188182
sql_stray_viewBonusRunRank = "SELECT count(runtime)+1 FROM ck_bonus WHERE mapname = '{}' AND zonegroup = {} AND runtime < {} AND style = {};"
189183
sql_stray_deleteSpecificBonus = (
@@ -202,12 +196,21 @@
202196

203197
# checkpoints
204198
sql_stray_deleteWipePlayerCheckpoints = (
205-
"DELETE FROM ck_checkpoints WHERE steamid = '%s';"
199+
"DELETE FROM ck_checkpoints WHERE steamid = '{}';"
206200
)
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;"
201+
sql_stray_selectCPR = "SELECT cp, time FROM ck_checkpoints WHERE steamid = '{}' AND mapname = '{}' AND zonegroup = 0;"
202+
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 = '{}' AND db1.steamid = '{}' AND db1.stage_time > -1.0 ORDER BY cp ASC;"
209203

210204
# latestrecords
211205
sql_stray_deleteWipePlayerLatestRecords = (
212-
"DELETE FROM ck_latestrecords WHERE steamid = '%s';"
206+
"DELETE FROM ck_latestrecords WHERE steamid = '{}';"
207+
)
208+
209+
# ck_maptier stray queries
210+
sql_stray_viewUnfinishedMaps = "SELECT mapname, zonegroup, zonename, (SELECT tier FROM ck_maptier d WHERE d.mapname = a.mapname) AS tier FROM ck_zones a WHERE (zonetype = 1 OR zonetype = 5) AND (SELECT runtimepro FROM ck_playertimes b WHERE b.mapname = a.mapname AND a.zonegroup = 0 AND b.style = {} AND steamid = '{}' UNION SELECT runtime FROM ck_bonus c WHERE c.mapname = a.mapname AND c.zonegroup = a.zonegroup AND c.style = {} AND steamid = '{}') IS NULL GROUP BY mapname, zonegroup ORDER BY tier, mapname, zonegroup ASC"
211+
sql_stray_selectMapImprovement = "SELECT mapname, (SELECT count(1) FROM ck_playertimes b WHERE a.mapname = b.mapname AND b.style = 0) as total, (SELECT tier FROM ck_maptier b WHERE a.mapname = b.mapname) as tier FROM ck_playertimes a where mapname LIKE '%{}%' AND style = 0 LIMIT 1;"
212+
sql_stray_viewMapnamePr = (
213+
"SELECT mapname FROM ck_maptier WHERE mapname LIKE '%{}%' LIMIT 1;"
213214
)
215+
sql_stray_viewPlayerPrMapInfo = "SELECT mapname, (SELECT COUNT(1) FROM ck_zones WHERE zonetype = '3' AND mapname = '{}') AS stages, (SELECT COUNT(DISTINCT zonegroup) FROM ck_zones WHERE mapname = '{}' AND zonegroup > 0) AS bonuses FROM ck_maptier WHERE mapname = '{}';"
216+
sql_stray_selectMapcycle = "SELECT mapname, tier FROM ck_maptier ORDER BY mapname ASC"

0 commit comments

Comments
 (0)