diff --git a/app/router/beatmap.py b/app/router/beatmap.py index 27555ad..697cf0a 100644 --- a/app/router/beatmap.py +++ b/app/router/beatmap.py @@ -33,11 +33,9 @@ async def get_beatmap( await db.exec( select(Beatmap) .options( - joinedload( - Beatmap.beatmapset # pyright: ignore[reportArgumentType] - ).selectinload( + joinedload(Beatmap.beatmapset).selectinload( # pyright: ignore[reportArgumentType] Beatmapset.beatmaps # pyright: ignore[reportArgumentType] - ) + ) ) .where(Beatmap.id == bid) ) @@ -77,7 +75,7 @@ async def batch_get_beatmaps( select(Beatmap) .options( joinedload( - Beatmap.beatmapset # pyright: ignore[reportArgumentType] + Beatmap.beatmapset # pyright: ignore[reportArgumentType] ).selectinload( Beatmapset.beatmaps # pyright: ignore[reportArgumentType] ) @@ -92,8 +90,8 @@ async def batch_get_beatmaps( select(Beatmap) .options( joinedload( - Beatmap.beatmapset # pyright: ignore[reportArgumentType] - ).selectinload( + Beatmap.beatmapset # pyright: ignore[reportArgumentType] + ).selectinload( Beatmapset.beatmaps # pyright: ignore[reportArgumentType] ) ) @@ -146,7 +144,6 @@ async def get_beatmap_scores( ) .where(Score.beatmap_id == beatmap) .where(Score.user_id == current_user.id) - .order_by(col(Score.classic_total_score).desc()) ) ).first() @@ -179,29 +176,22 @@ async def get_user_beatmap_score( raise HTTPException( status_code=404, detail="This server only contains non-legacy scores" ) - all_scores = ( + user_score = ( await db.exec( select(Score) .options( joinedload(Score.beatmap) # pyright: ignore[reportArgumentType] .joinedload(Beatmap.beatmapset) # pyright: ignore[reportArgumentType] .selectinload( - Beatmapset.beatmaps # pyright: ignore[reportArgumentType] - ) + Beatmapset.beatmaps # pyright: ignore[reportArgumentType] + ) ) - .where(Score.gamemode == mode) .where(Score.beatmap_id == beatmap) + .where(Score.user_id == user) + .where(Score.gamemode == mode) .order_by(col(Score.classic_total_score).desc()) ) - ).all() - - rank = 1 - user_score = None - for score in all_scores: - if score.user_id == user: - user_score = score - break - rank += 1 + ).first() if not user_score: raise HTTPException( @@ -209,7 +199,7 @@ async def get_user_beatmap_score( ) else: return BeatmapUserScore( - position=rank, + position=user_score.position if user_score.position is not None else 0, score=ScoreResp.from_db(user_score), ) @@ -228,24 +218,22 @@ async def get_user_all_beatmap_scores( db: AsyncSession = Depends(get_db), ): if legacy_only: - raise HTTPException( - status_code=404, detail="This server only contains non-legacy scores" - ) - all_user_scores = ( + raise HTTPException(status_code=404,detail="This server only contains non-legacy scores") + all_user_scores=( await db.exec( select(Score) .options( joinedload(Score.beatmap) # pyright: ignore[reportArgumentType] .joinedload(Beatmap.beatmapset) # pyright: ignore[reportArgumentType] .selectinload( - Beatmapset.beatmaps # pyright: ignore[reportArgumentType] + Beatmapset.beatmaps # pyright: ignore[reportArgumentType] ) ) - .where(Score.gamemode == ruleset) + .where(Score.gamemode==ruleset) .where(Score.beatmap_id == beatmap) .where(Score.user_id == user) .order_by(col(Score.classic_total_score).desc()) ) ).all() - + return [ScoreResp.from_db(score) for score in all_user_scores]