- 后端: 新增 user_levels, exp_history, badge_definitions, user_badges, level_configs 表 - 后端: 新增 LevelService 和 BadgeService 服务 - 后端: 新增等级/奖章/签到/排行榜 API 端点 - 后端: 考试/练习/陪练完成时触发经验值和奖章检查 - 前端: 新增 LevelBadge, ExpProgress, BadgeCard, LevelUpDialog 组件 - 前端: 新增排行榜页面 - 前端: 成长路径页面集成真实等级数据 - 数据库: 包含迁移脚本和初始数据
This commit is contained in:
@@ -134,8 +134,44 @@ async def submit_exam(
|
||||
user_agent=http_request.headers.get("user-agent")
|
||||
)
|
||||
)
|
||||
|
||||
return ResponseModel(code=200, data=SubmitExamResponse(**result), message="考试提交成功")
|
||||
|
||||
# 考试通过时触发经验值和奖章检查
|
||||
exp_result = None
|
||||
new_badges = []
|
||||
if result.get("is_passed"):
|
||||
try:
|
||||
from app.services.level_service import LevelService
|
||||
from app.services.badge_service import BadgeService
|
||||
|
||||
level_service = LevelService(db)
|
||||
badge_service = BadgeService(db)
|
||||
|
||||
# 添加考试经验值
|
||||
exp_result = await level_service.add_exam_exp(
|
||||
user_id=current_user.id,
|
||||
exam_id=request.exam_id,
|
||||
score=result.get("total_score", 0),
|
||||
is_passed=True
|
||||
)
|
||||
|
||||
# 检查是否解锁新奖章
|
||||
new_badges = await badge_service.check_and_award_badges(current_user.id)
|
||||
|
||||
await db.commit()
|
||||
except Exception as e:
|
||||
logger.warning(f"考试经验值/奖章处理失败: {str(e)}")
|
||||
|
||||
# 将经验值结果添加到返回数据
|
||||
response_data = SubmitExamResponse(**result)
|
||||
return ResponseModel(
|
||||
code=200,
|
||||
data={
|
||||
**response_data.model_dump(),
|
||||
"exp_result": exp_result,
|
||||
"new_badges": new_badges
|
||||
},
|
||||
message="考试提交成功"
|
||||
)
|
||||
|
||||
|
||||
@router.get("/mistakes", response_model=ResponseModel[GetMistakesResponse])
|
||||
|
||||
Reference in New Issue
Block a user