1.6.2: Refreshed.
This commit is contained in:
@@ -1,7 +1,29 @@
|
||||
from web.database import query_db
|
||||
from web.database import query_db, execute_db
|
||||
from flask import current_app, url_for
|
||||
import os
|
||||
|
||||
class StatsService:
|
||||
@staticmethod
|
||||
def resolve_avatar_url(steam_id, avatar_url):
|
||||
try:
|
||||
if avatar_url and str(avatar_url).strip():
|
||||
return avatar_url
|
||||
base = os.path.join(current_app.root_path, 'static', 'avatars')
|
||||
# Check jpg/png in order
|
||||
for ext in ('.jpg', '.png'):
|
||||
fname = f"{steam_id}{ext}"
|
||||
if os.path.exists(os.path.join(base, fname)):
|
||||
url = url_for('static', filename=f'avatars/{fname}')
|
||||
try:
|
||||
# Persist fallback URL into L2 for future reads
|
||||
execute_db('l2', "UPDATE dim_players SET avatar_url = ? WHERE steam_id_64 = ?", [url, str(steam_id)])
|
||||
except Exception:
|
||||
pass
|
||||
return url
|
||||
return None
|
||||
except Exception:
|
||||
return avatar_url
|
||||
@staticmethod
|
||||
def get_team_stats_summary():
|
||||
"""
|
||||
Calculates aggregate statistics for matches where at least 2 roster members played together.
|
||||
@@ -374,7 +396,13 @@ class StatsService:
|
||||
WHERE mp.match_id = ?
|
||||
ORDER BY mp.team_id, mp.rating DESC
|
||||
"""
|
||||
return query_db('l2', sql, [match_id])
|
||||
rows = query_db('l2', sql, [match_id])
|
||||
result = []
|
||||
for r in rows or []:
|
||||
d = dict(r)
|
||||
d['avatar_url'] = StatsService.resolve_avatar_url(d.get('steam_id_64'), d.get('avatar_url'))
|
||||
result.append(d)
|
||||
return result
|
||||
|
||||
@staticmethod
|
||||
def get_match_rounds(match_id):
|
||||
@@ -411,7 +439,12 @@ class StatsService:
|
||||
"""
|
||||
args.extend([per_page, offset])
|
||||
|
||||
players = query_db('l2', sql, args)
|
||||
rows = query_db('l2', sql, args)
|
||||
players = []
|
||||
for r in rows or []:
|
||||
d = dict(r)
|
||||
d['avatar_url'] = StatsService.resolve_avatar_url(d.get('steam_id_64'), d.get('avatar_url'))
|
||||
players.append(d)
|
||||
total = query_db('l2', f"SELECT COUNT(*) as cnt FROM dim_players WHERE {where_str}", args[:-2], one=True)['cnt']
|
||||
|
||||
return players, total
|
||||
@@ -419,7 +452,12 @@ class StatsService:
|
||||
@staticmethod
|
||||
def get_player_info(steam_id):
|
||||
sql = "SELECT * FROM dim_players WHERE steam_id_64 = ?"
|
||||
return query_db('l2', sql, [steam_id], one=True)
|
||||
r = query_db('l2', sql, [steam_id], one=True)
|
||||
if not r:
|
||||
return None
|
||||
d = dict(r)
|
||||
d['avatar_url'] = StatsService.resolve_avatar_url(steam_id, d.get('avatar_url'))
|
||||
return d
|
||||
|
||||
@staticmethod
|
||||
def get_daily_match_counts(days=365):
|
||||
@@ -442,7 +480,13 @@ class StatsService:
|
||||
return []
|
||||
placeholders = ','.join('?' for _ in steam_ids)
|
||||
sql = f"SELECT * FROM dim_players WHERE steam_id_64 IN ({placeholders})"
|
||||
return query_db('l2', sql, steam_ids)
|
||||
rows = query_db('l2', sql, steam_ids)
|
||||
result = []
|
||||
for r in rows or []:
|
||||
d = dict(r)
|
||||
d['avatar_url'] = StatsService.resolve_avatar_url(d.get('steam_id_64'), d.get('avatar_url'))
|
||||
result.append(d)
|
||||
return result
|
||||
|
||||
@staticmethod
|
||||
def get_player_basic_stats(steam_id):
|
||||
@@ -841,4 +885,3 @@ class StatsService:
|
||||
result[r_num]['economy'][sid] = dict(eco)
|
||||
|
||||
return result
|
||||
|
||||
|
||||
Reference in New Issue
Block a user