mirror of
https://github.com/nihilvux/bancho.py.git
synced 2025-09-16 10:38:39 -07:00
77 lines
1.9 KiB
Python
77 lines
1.9 KiB
Python
"""bancho.py's v2 apis for interacting with maps"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from fastapi import APIRouter
|
|
from fastapi import status
|
|
from fastapi.param_functions import Query
|
|
|
|
from app.api.v2.common import responses
|
|
from app.api.v2.common.responses import Failure
|
|
from app.api.v2.common.responses import Success
|
|
from app.api.v2.models.maps import Map
|
|
from app.repositories import maps as maps_repo
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.get("/maps")
|
|
async def get_maps(
|
|
set_id: int | None = None,
|
|
server: str | None = None,
|
|
status: int | None = None,
|
|
artist: str | None = None,
|
|
creator: str | None = None,
|
|
filename: str | None = None,
|
|
mode: int | None = None,
|
|
frozen: bool | None = None,
|
|
page: int = Query(1, ge=1),
|
|
page_size: int = Query(50, ge=1, le=100),
|
|
) -> Success[list[Map]] | Failure:
|
|
maps = await maps_repo.fetch_many(
|
|
server=server,
|
|
set_id=set_id,
|
|
status=status,
|
|
artist=artist,
|
|
creator=creator,
|
|
filename=filename,
|
|
mode=mode,
|
|
frozen=frozen,
|
|
page=page,
|
|
page_size=page_size,
|
|
)
|
|
total_maps = await maps_repo.fetch_count(
|
|
server=server,
|
|
set_id=set_id,
|
|
status=status,
|
|
artist=artist,
|
|
creator=creator,
|
|
filename=filename,
|
|
mode=mode,
|
|
frozen=frozen,
|
|
)
|
|
|
|
response = [Map.from_mapping(rec) for rec in maps]
|
|
|
|
return responses.success(
|
|
content=response,
|
|
meta={
|
|
"total": total_maps,
|
|
"page": page,
|
|
"page_size": page_size,
|
|
},
|
|
)
|
|
|
|
|
|
@router.get("/maps/{map_id}")
|
|
async def get_map(map_id: int) -> Success[Map] | Failure:
|
|
data = await maps_repo.fetch_one(id=map_id)
|
|
if data is None:
|
|
return responses.failure(
|
|
message="Map not found.",
|
|
status_code=status.HTTP_404_NOT_FOUND,
|
|
)
|
|
|
|
response = Map.from_mapping(data)
|
|
return responses.success(response)
|