from __future__ import annotations
from app.database.beatmapset import BeatmapsetResp, SearchBeatmapsetsResp
from app.log import logger
from app.models.beatmap import SearchQueryModel
from app.models.model import Cursor
from ._base import BaseFetcher
class BeatmapsetFetcher(BaseFetcher):
async def get_beatmapset(self, beatmap_set_id: int) -> BeatmapsetResp:
logger.opt(colors=True).debug(
f"[BeatmapsetFetcher] get_beatmapset: {beatmap_set_id}"
)
return BeatmapsetResp.model_validate(
await self.request_api(
f"https://osu.ppy.sh/api/v2/beatmapsets/{beatmap_set_id}"
)
)
async def search_beatmapset(
self, query: SearchQueryModel, cursor: Cursor
) -> SearchBeatmapsetsResp:
logger.opt(colors=True).debug(
f"[BeatmapsetFetcher] search_beatmapset: {query}"
)
params = query.model_dump(
exclude_none=True, exclude_unset=True, exclude_defaults=True
)
for k, v in cursor.items():
params[f"cursor[{k}]"] = v
resp = SearchBeatmapsetsResp.model_validate(
await self.request_api(
"https://osu.ppy.sh/api/v2/beatmapsets/search",
params=params,
)
)
return resp