"""Player endpoints — list current players for a running server.""" from __future__ import annotations import logging from typing import Annotated from fastapi import APIRouter, Depends from sqlalchemy.engine import Connection from core.dal.player_repository import PlayerRepository from core.servers.service import ServerService from database import get_db from dependencies import get_current_user logger = logging.getLogger(__name__) router = APIRouter(prefix="/servers/{server_id}/players", tags=["players"]) def _ok(data): return {"success": True, "data": data, "error": None} @router.get("") def list_players( server_id: int, db: Annotated[Connection, Depends(get_db)], _user: Annotated[dict, Depends(get_current_user)], ) -> dict: """List current players (cached from RemoteAdminPollerThread).""" ServerService(db).get_server(server_id) # raises 404 if not found player_repo = PlayerRepository(db) players = player_repo.get_all(server_id=server_id) count = player_repo.count(server_id=server_id) return _ok({ "server_id": server_id, "player_count": count, "players": players, }) @router.get("/history") def player_history( server_id: int, db: Annotated[Connection, Depends(get_db)], _user: Annotated[dict, Depends(get_current_user)], limit: int = 100, offset: int = 0, search: str | None = None, ) -> dict: """Get historical player sessions.""" ServerService(db).get_server(server_id) # raises 404 if not found player_repo = PlayerRepository(db) total, rows = player_repo.get_history( server_id=server_id, limit=limit, offset=offset, search=search, ) return _ok({"total": total, "items": rows})