feat: 新增等级与奖章系统
Some checks failed
continuous-integration/drone/push Build is failing

- 后端: 新增 user_levels, exp_history, badge_definitions, user_badges, level_configs 表
- 后端: 新增 LevelService 和 BadgeService 服务
- 后端: 新增等级/奖章/签到/排行榜 API 端点
- 后端: 考试/练习/陪练完成时触发经验值和奖章检查
- 前端: 新增 LevelBadge, ExpProgress, BadgeCard, LevelUpDialog 组件
- 前端: 新增排行榜页面
- 前端: 成长路径页面集成真实等级数据
- 数据库: 包含迁移脚本和初始数据
This commit is contained in:
yuliang_guo
2026-01-29 16:19:22 +08:00
parent 5dfe23831d
commit 0933b936f9
19 changed files with 3207 additions and 65 deletions

View File

@@ -261,8 +261,40 @@ async def end_training(
)
logger.info(f"用户 {current_user['id']} 结束陪练会话: {session_id}")
# 陪练完成时触发经验值和奖章检查
exp_result = None
new_badges = []
try:
from app.services.level_service import LevelService
from app.services.badge_service import BadgeService
level_service = LevelService(db)
badge_service = BadgeService(db)
# 获取陪练得分(如果有报告的话)
score = response.get("total_score") if isinstance(response, dict) else None
# 添加陪练经验值
exp_result = await level_service.add_training_exp(
user_id=current_user["id"],
session_id=session_id,
score=score
)
# 检查是否解锁新奖章
new_badges = await badge_service.check_and_award_badges(current_user["id"])
await db.commit()
except Exception as e:
logger.warning(f"陪练经验值/奖章处理失败: {str(e)}")
# 将经验值结果添加到返回数据
result_data = response if isinstance(response, dict) else {"session_id": session_id}
result_data["exp_result"] = exp_result
result_data["new_badges"] = new_badges
return ResponseModel(data=response, message="结束陪练成功")
return ResponseModel(data=result_data, message="结束陪练成功")
except HTTPException:
raise