sistema A2S
This commit is contained in:
70
backend/app/routes.py
Normal file
70
backend/app/routes.py
Normal file
@@ -0,0 +1,70 @@
|
||||
"""Route resolution helpers for the HLL Vietnam backend bootstrap."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from http import HTTPStatus
|
||||
from urllib.parse import parse_qs, urlparse
|
||||
|
||||
from .payloads import (
|
||||
build_community_payload,
|
||||
build_discord_payload,
|
||||
build_error_payload,
|
||||
build_health_payload,
|
||||
build_server_detail_history_payload,
|
||||
build_server_history_payload,
|
||||
build_server_latest_payload,
|
||||
build_servers_payload,
|
||||
build_trailer_payload,
|
||||
)
|
||||
|
||||
|
||||
GET_ROUTES = {
|
||||
"/health": build_health_payload,
|
||||
"/api/community": build_community_payload,
|
||||
"/api/trailer": build_trailer_payload,
|
||||
"/api/discord": build_discord_payload,
|
||||
"/api/servers": build_servers_payload,
|
||||
}
|
||||
|
||||
|
||||
def resolve_get_payload(path: str) -> tuple[HTTPStatus | None, dict[str, object]]:
|
||||
"""Resolve the JSON payload for a supported GET route."""
|
||||
parsed = urlparse(path)
|
||||
if parsed.path == "/api/servers/latest":
|
||||
return HTTPStatus.OK, build_server_latest_payload()
|
||||
|
||||
if parsed.path == "/api/servers/history":
|
||||
limit = _parse_limit(parsed.query)
|
||||
if limit is None:
|
||||
return HTTPStatus.BAD_REQUEST, build_error_payload("Invalid limit parameter")
|
||||
return HTTPStatus.OK, build_server_history_payload(limit=limit)
|
||||
|
||||
builder = GET_ROUTES.get(parsed.path)
|
||||
if builder is None:
|
||||
if parsed.path.startswith("/api/servers/") and parsed.path.endswith("/history"):
|
||||
server_id = parsed.path.removeprefix("/api/servers/").removesuffix("/history")
|
||||
server_id = server_id.strip("/")
|
||||
if not server_id:
|
||||
return HTTPStatus.BAD_REQUEST, build_error_payload("Server id is required")
|
||||
|
||||
limit = _parse_limit(parsed.query)
|
||||
if limit is None:
|
||||
return HTTPStatus.BAD_REQUEST, build_error_payload("Invalid limit parameter")
|
||||
|
||||
return HTTPStatus.OK, build_server_detail_history_payload(server_id, limit=limit)
|
||||
return None, {}
|
||||
|
||||
return HTTPStatus.OK, builder()
|
||||
|
||||
|
||||
def _parse_limit(query: str) -> int | None:
|
||||
raw_limit = parse_qs(query).get("limit", ["20"])[0]
|
||||
try:
|
||||
limit = int(raw_limit)
|
||||
except ValueError:
|
||||
return None
|
||||
|
||||
if limit < 1 or limit > 100:
|
||||
return None
|
||||
|
||||
return limit
|
||||
Reference in New Issue
Block a user