fix(multiplayer): fail to fetch for multiplayer

This commit is contained in:
MingxuanGame
2025-08-08 12:07:48 +00:00
parent 5bf733a94e
commit dd7b8a14cd
3 changed files with 32 additions and 8 deletions

View File

@@ -77,6 +77,7 @@ async def batch_get_beatmaps(
b_ids: list[int] = Query(alias="ids[]", default_factory=list),
current_user: User = Depends(get_current_user),
db: AsyncSession = Depends(get_db),
fetcher: Fetcher = Depends(get_fetcher),
):
if not b_ids:
# select 50 beatmaps by last_updated
@@ -86,9 +87,27 @@ async def batch_get_beatmaps(
)
).all()
else:
beatmaps = (
await db.exec(select(Beatmap).where(col(Beatmap.id).in_(b_ids)).limit(50))
).all()
beatmaps = list(
(
await db.exec(
select(Beatmap).where(col(Beatmap.id).in_(b_ids)).limit(50)
)
).all()
)
not_found_beatmaps = [
bid for bid in b_ids if bid not in [bm.id for bm in beatmaps]
]
beatmaps.extend(
beatmap
for beatmap in await asyncio.gather(
*[
Beatmap.get_or_fetch(db, fetcher, bid=bid)
for bid in not_found_beatmaps
],
return_exceptions=True,
)
if isinstance(beatmap, Beatmap)
)
return BatchGetResp(
beatmaps=[