From c647bdacb39fd582eb4b32c1d3c85915189e4f47 Mon Sep 17 00:00:00 2001 From: jimmy-sketch Date: Sat, 26 Jul 2025 23:14:23 +0800 Subject: [PATCH] =?UTF-8?q?fix(api):=20=E4=BF=AE=E5=A4=8D=E7=AB=AF?= =?UTF-8?q?=E7=82=B9=E5=A4=84=E7=90=86=E9=80=BB=E8=BE=91=E4=B8=AD=E4=B8=8D?= =?UTF-8?q?=E6=AD=A3=E7=A1=AE=E7=9A=84=E6=B8=B8=E6=88=8F=E6=A8=A1=E5=BC=8F?= =?UTF-8?q?=E5=88=A4=E6=96=AD=EF=BC=8C=E4=BF=AE=E5=A4=8D=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E9=87=8C=E7=9A=84=E4=B8=80=E4=BA=9B=E5=B0=8F=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/router/beatmap.py | 4 ++-- test_api.py | 44 ++++++++++++++++++++++++++++++++++++------- 2 files changed, 39 insertions(+), 9 deletions(-) diff --git a/app/router/beatmap.py b/app/router/beatmap.py index 697cf0a..f44a685 100644 --- a/app/router/beatmap.py +++ b/app/router/beatmap.py @@ -186,9 +186,9 @@ async def get_user_beatmap_score( Beatmapset.beatmaps # pyright: ignore[reportArgumentType] ) ) + .where(Score.gamemode==mode if mode is not None else True) .where(Score.beatmap_id == beatmap) .where(Score.user_id == user) - .where(Score.gamemode == mode) .order_by(col(Score.classic_total_score).desc()) ) ).first() @@ -229,7 +229,7 @@ async def get_user_all_beatmap_scores( Beatmapset.beatmaps # pyright: ignore[reportArgumentType] ) ) - .where(Score.gamemode==ruleset) + .where(Score.gamemode==ruleset if ruleset is not None else True) .where(Score.beatmap_id == beatmap) .where(Score.user_id == user) .order_by(col(Score.classic_total_score).desc()) diff --git a/test_api.py b/test_api.py index 861b28f..c87ef5b 100644 --- a/test_api.py +++ b/test_api.py @@ -142,6 +142,24 @@ def get_user_beatmap_score(access_token: str, beatmap_id: int, user_id: int): return None +def get_user_beatmap_score_all(access_token: str, beatmap_id: int, user_id: int): + """获取玩家成绩""" + url = f"{API_URL}/api/v2/beatmaps/{beatmap_id}/scores/users/{user_id}/all" + headers = {"Authorization": f"Bearer {access_token}"} + try: + response = requests.get(url, headers=headers) + if response.status_code == 200: + print(f"✅ 成功获取谱面 {beatmap_id} 中用户 {user_id} 的成绩数据") + return response.json() + else: + print(f"❌ 获取谱面成绩失败: {response.status_code}") + print(f"响应内容: {response.text}") + return None + except Exception as e: + print(f"❌ 获取谱面成绩请求失败: {e}") + return None + + def main(): """主测试函数""" print("=== osu! API 模拟服务器测试 ===\n") @@ -194,27 +212,39 @@ def main(): if scores_data["userScore"]: print("用户在该谱面有成绩记录") print(f"用户成绩 ID: {scores_data['userScore']['id']}") - print(f"用户成绩分数: {scores_data['userScore']['total_score']}") + print(f"用户成绩分数: {scores_data['userScore']['total_score']}\n") else: - print("用户在该谱面没有成绩记录") + print("用户在该谱面没有成绩记录\n") - # 6. 测试谱面指定用户成绩 + # 5a. 测试谱面指定用户成绩 user_score = get_user_beatmap_score(token_data["access_token"], 1, 1) if user_score: print(f"用户成绩ID:{user_score['score']['id']}") print(f"此成绩acc:{user_score['score']['accuracy']}") - print(f"总分:{user_score['score']['classic_total_score']}") + print(f"总分:{user_score['score']['classic_total_score']}\n") + else: + print("该用户在此谱面没有记录\n") + + # 5b. 测试谱面指定用户成绩 + user_score_all = get_user_beatmap_score_all(token_data["access_token"], 1, 1) + if user_score_all: + index = 1 + for score in user_score_all: + print(f"第{index}个成绩:") + print(f"用户成绩ID:{score['id']}") + print(f"此成绩acc:{score['accuracy']}") + print(f"总分:{score['classic_total_score']}") else: print("该用户在此谱面没有记录") - # 7. 测试令牌刷新 - print("\n7. 测试令牌刷新...") + # 6. 测试令牌刷新 + print("\n6. 测试令牌刷新...") new_token_data = refresh_token(token_data["refresh_token"]) if new_token_data: print(f"新访问令牌: {new_token_data['access_token']}") # 使用新令牌获取用户数据 - print("\n7. 使用新令牌获取用户数据...") + print("\n6. 使用新令牌获取用户数据...") user_data = get_current_user(new_token_data["access_token"]) if user_data: print(f"✅ 新令牌有效,用户: {user_data['username']}")