Fix monthly leaderboard routes
This commit is contained in:
@@ -291,6 +291,21 @@ def build_weekly_leaderboard_payload(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def build_monthly_leaderboard_payload(
|
||||||
|
*,
|
||||||
|
limit: int = 10,
|
||||||
|
server_id: str | None = None,
|
||||||
|
metric: str = "kills",
|
||||||
|
) -> dict[str, object]:
|
||||||
|
"""Return one monthly historical leaderboard for the requested metric."""
|
||||||
|
return build_historical_leaderboard_payload(
|
||||||
|
limit=limit,
|
||||||
|
server_id=server_id,
|
||||||
|
metric=metric,
|
||||||
|
timeframe="monthly",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def build_recent_historical_matches_payload(
|
def build_recent_historical_matches_payload(
|
||||||
*,
|
*,
|
||||||
limit: int = 20,
|
limit: int = 20,
|
||||||
@@ -426,6 +441,21 @@ def build_weekly_leaderboard_snapshot_payload(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def build_monthly_leaderboard_snapshot_payload(
|
||||||
|
*,
|
||||||
|
limit: int = 10,
|
||||||
|
server_id: str | None = None,
|
||||||
|
metric: str = "kills",
|
||||||
|
) -> dict[str, object]:
|
||||||
|
"""Return one precomputed monthly leaderboard snapshot."""
|
||||||
|
return build_leaderboard_snapshot_payload(
|
||||||
|
limit=limit,
|
||||||
|
server_id=server_id,
|
||||||
|
metric=metric,
|
||||||
|
timeframe="monthly",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def build_recent_historical_matches_snapshot_payload(
|
def build_recent_historical_matches_snapshot_payload(
|
||||||
*,
|
*,
|
||||||
limit: int = 20,
|
limit: int = 20,
|
||||||
|
|||||||
@@ -11,6 +11,8 @@ from .payloads import (
|
|||||||
build_error_payload,
|
build_error_payload,
|
||||||
build_health_payload,
|
build_health_payload,
|
||||||
build_historical_leaderboard_payload,
|
build_historical_leaderboard_payload,
|
||||||
|
build_monthly_leaderboard_payload,
|
||||||
|
build_monthly_leaderboard_snapshot_payload,
|
||||||
build_historical_server_summary_snapshot_payload,
|
build_historical_server_summary_snapshot_payload,
|
||||||
build_historical_player_profile_payload,
|
build_historical_player_profile_payload,
|
||||||
build_historical_server_summary_payload,
|
build_historical_server_summary_payload,
|
||||||
@@ -90,6 +92,21 @@ def resolve_get_payload(path: str) -> tuple[HTTPStatus | None, dict[str, object]
|
|||||||
metric=metric,
|
metric=metric,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if parsed.path == "/api/historical/monthly-leaderboard":
|
||||||
|
limit = _parse_limit(parsed.query)
|
||||||
|
if limit is None:
|
||||||
|
return HTTPStatus.BAD_REQUEST, build_error_payload("Invalid limit parameter")
|
||||||
|
params = parse_qs(parsed.query)
|
||||||
|
server_id = params.get("server", [None])[0]
|
||||||
|
metric = params.get("metric", ["kills"])[0]
|
||||||
|
if metric not in {"kills", "deaths", "support", "matches_over_100_kills"}:
|
||||||
|
return HTTPStatus.BAD_REQUEST, build_error_payload("Invalid metric parameter")
|
||||||
|
return HTTPStatus.OK, build_monthly_leaderboard_payload(
|
||||||
|
limit=limit,
|
||||||
|
server_id=server_id,
|
||||||
|
metric=metric,
|
||||||
|
)
|
||||||
|
|
||||||
if parsed.path == "/api/historical/snapshots/leaderboard":
|
if parsed.path == "/api/historical/snapshots/leaderboard":
|
||||||
limit = _parse_limit(parsed.query)
|
limit = _parse_limit(parsed.query)
|
||||||
if limit is None:
|
if limit is None:
|
||||||
@@ -109,6 +126,21 @@ def resolve_get_payload(path: str) -> tuple[HTTPStatus | None, dict[str, object]
|
|||||||
timeframe=timeframe,
|
timeframe=timeframe,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if parsed.path == "/api/historical/snapshots/monthly-leaderboard":
|
||||||
|
limit = _parse_limit(parsed.query)
|
||||||
|
if limit is None:
|
||||||
|
return HTTPStatus.BAD_REQUEST, build_error_payload("Invalid limit parameter")
|
||||||
|
params = parse_qs(parsed.query)
|
||||||
|
server_id = params.get("server", [None])[0]
|
||||||
|
metric = params.get("metric", ["kills"])[0]
|
||||||
|
if metric not in {"kills", "deaths", "support", "matches_over_100_kills"}:
|
||||||
|
return HTTPStatus.BAD_REQUEST, build_error_payload("Invalid metric parameter")
|
||||||
|
return HTTPStatus.OK, build_monthly_leaderboard_snapshot_payload(
|
||||||
|
limit=limit,
|
||||||
|
server_id=server_id,
|
||||||
|
metric=metric,
|
||||||
|
)
|
||||||
|
|
||||||
if parsed.path == "/api/historical/snapshots/weekly-leaderboard":
|
if parsed.path == "/api/historical/snapshots/weekly-leaderboard":
|
||||||
limit = _parse_limit(parsed.query)
|
limit = _parse_limit(parsed.query)
|
||||||
if limit is None:
|
if limit is None:
|
||||||
|
|||||||
Reference in New Issue
Block a user