Leaderboard and dynamic layout
This commit is contained in:
@@ -310,6 +310,19 @@ def public_press(p):
|
||||
}
|
||||
|
||||
|
||||
def public_leaderboard():
|
||||
"""Public score totals only; do not expose sessions or individual presses."""
|
||||
scores = {
|
||||
pid: {"name": player["name"], "total_points": 0, "press_count": 0}
|
||||
for pid, player in state["players"].items()
|
||||
}
|
||||
for press in state["presses"]:
|
||||
score = scores[press["player_id"]]
|
||||
score["total_points"] += press["points"]
|
||||
score["press_count"] += 1
|
||||
return sorted(scores.values(), key=lambda p: (-p["total_points"], p["name"].lower()))
|
||||
|
||||
|
||||
def global_stats():
|
||||
counts = empty_zone_counts()
|
||||
for p in state["presses"]:
|
||||
@@ -397,6 +410,9 @@ class Handler(BaseHTTPRequestHandler):
|
||||
"total_presses": len(state["presses"]),
|
||||
"zones": ZONES,
|
||||
})
|
||||
if path == "/api/leaderboard":
|
||||
with lock:
|
||||
return self.send_json(HTTPStatus.OK, {"leaderboard": public_leaderboard()})
|
||||
if path == "/api/me":
|
||||
with lock:
|
||||
pid = self.authed_player()
|
||||
|
||||
Reference in New Issue
Block a user