assessment.py 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. """
  2. 水平检测API路由
  3. """
  4. from fastapi import APIRouter, HTTPException, Query
  5. from typing import Optional
  6. from ...models.learning import (
  7. AssessmentStartRequest, AssessmentAnswerRequest,
  8. AssessmentCompleteRequest, AssessmentStartResponse,
  9. AssessmentAnswerResponse, AssessmentResult
  10. )
  11. from ...services.assessment_service import (
  12. start_assessment, submit_answer, complete_assessment
  13. )
  14. from ...services.data_store import data_store
  15. router = APIRouter(prefix="/assessment", tags=["assessment"])
  16. @router.get("/check/{path_type}")
  17. async def check_assessment(path_type: str, user_id: str = "default"):
  18. """检查用户是否已测试过指定路径"""
  19. has_test = data_store.has_assessment(user_id, path_type)
  20. current = data_store.get_current_assessment(user_id, path_type)
  21. return {
  22. "has_assessment": has_test,
  23. "current_result": current,
  24. }
  25. @router.get("/result/{path_type}")
  26. async def get_assessment_result(path_type: str, user_id: str = "default"):
  27. """获取用户测试结果"""
  28. result = data_store.get_current_assessment(user_id, path_type)
  29. if not result:
  30. raise HTTPException(status_code=404, detail="未找到测试结果")
  31. return result
  32. @router.get("/history/{path_type}")
  33. async def get_assessment_history(path_type: str, user_id: str = "default"):
  34. """获取用户测试历史"""
  35. assessments = data_store.get_user_assessments(user_id, path_type)
  36. return {"assessments": assessments}
  37. @router.post("/start")
  38. async def api_start_assessment(request: AssessmentStartRequest):
  39. """开始测试"""
  40. result = start_assessment(request.path_type, user_id=request.user_id)
  41. return result
  42. @router.post("/answer")
  43. async def api_submit_answer(request: AssessmentAnswerRequest):
  44. """提交答案"""
  45. result = submit_answer(
  46. request.session_id,
  47. request.question_id,
  48. request.answer,
  49. user_id=request.user_id,
  50. )
  51. if "error" in result:
  52. raise HTTPException(status_code=400, detail=result["error"])
  53. return result
  54. @router.post("/complete")
  55. async def api_complete_assessment(request: AssessmentCompleteRequest):
  56. """完成测试"""
  57. result = complete_assessment(request.session_id, user_id=request.user_id)
  58. if not result:
  59. raise HTTPException(status_code=400, detail="会话不存在或已过期")
  60. return result
  61. @router.post("/save-result")
  62. async def save_assessment_result(result: AssessmentResult, user_id: str = "default"):
  63. """保存测试结果"""
  64. result.user_id = user_id
  65. data_store.save_assessment(result)
  66. return {"message": "保存成功", "result": result}