import requests import json # 服务器配置 BASE_URL = "http://localhost:8080/api" def get_user_achievements(user_id): """获取用户成就""" url = f"{BASE_URL}/achievements/user/{user_id}" response = requests.get(url) return response def update_achievement_progress(user_id, achievement_id, new_value): """直接更新成就进度""" url = f"{BASE_URL}/achievements/user/{user_id}/achievement/{achievement_id}/progress" data = {"currentValue": new_value} response = requests.put(url, json=data) return response def test_simple_achievement_update(): """简单测试成就更新""" print("=== 简单成就更新测试 ===") # 使用已存在的用户ID(从之前的测试可以看到有用户ID 5, 6, 7) user_id = 5 print(f"\n1. 检查用户 {user_id} 的成就") achievements_response = get_user_achievements(user_id) if achievements_response.status_code == 200: achievements = achievements_response.json() print(f"成就数量: {len(achievements)}") # 找到学习时长成就 study_time_achievements = [a for a in achievements if 'STUDY_TIME' in a['type']] print(f"\n学习时长成就:") for achievement in study_time_achievements: print(f" ID: {achievement['achievementId']}, {achievement['title']}: {achievement['currentValue']}/{achievement['targetValue']} (已获得: {achievement['isAchieved']})") if study_time_achievements: # 测试更新第一个学习时长成就 first_achievement = study_time_achievements[0] achievement_id = first_achievement['achievementId'] target_value = first_achievement['targetValue'] print(f"\n2. 更新成就 {achievement_id} 的进度到 {target_value}") update_response = update_achievement_progress(user_id, achievement_id, target_value) if update_response.status_code == 200: updated_achievement = update_response.json() print(f"更新成功: {updated_achievement['title']} - 已获得: {updated_achievement['isAchieved']}") else: print(f"更新失败: {update_response.status_code} - {update_response.text}") # 再次检查成就状态 print(f"\n3. 再次检查成就状态") achievements_response = get_user_achievements(user_id) if achievements_response.status_code == 200: achievements = achievements_response.json() study_time_achievements = [a for a in achievements if 'STUDY_TIME' in a['type']] for achievement in study_time_achievements: status = "✅ 已获得" if achievement['isAchieved'] else "❌ 未获得" print(f" {achievement['title']}: {achievement['currentValue']}/{achievement['targetValue']} {status}") completed_count = len([a for a in achievements if a['isAchieved']]) print(f"\n总计已完成成就: {completed_count}") if completed_count > 0: print("✅ 成就更新功能正常!") else: print("❌ 成就更新功能有问题") else: print(f"获取成就失败: {achievements_response.status_code} - {achievements_response.text}") if __name__ == "__main__": test_simple_achievement_update()