review_results.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. """
  2. 审查结果获取接口Mock实现
  3. 模拟风险统计、总结报告和问题条文返回
  4. """
  5. from fastapi import APIRouter, HTTPException, Query
  6. from pydantic import BaseModel
  7. from typing import Dict, Any
  8. from foundation.observability.cachefiles import cache, CacheBaseDir
  9. # 导入文件上传模块的存储
  10. try:
  11. from .file_upload import uploaded_files
  12. except ImportError:
  13. from views.construction_review.file_upload import uploaded_files
  14. class ReviewResultsRequest(BaseModel):
  15. id: str = None
  16. user: str = None
  17. type: str = None # "summary" 或 "issues"
  18. class ReviewResultsResponse(BaseModel):
  19. code: int
  20. data: Dict[str, Any]
  21. review_results_router = APIRouter(prefix="/sgsc", tags=["前端接口"])
  22. @review_results_router.get("/review_results", response_model=ReviewResultsResponse)
  23. async def review_results(
  24. callback_task_id: str = Query(..., description="回调任务ID"),
  25. user: str = Query(..., description="用户ID")
  26. ):
  27. """
  28. 获取审查结果接口 - 从temp目录读取保存的结果文件
  29. """
  30. try:
  31. # 验证参数
  32. if not callback_task_id:
  33. raise HTTPException(status_code=400, detail="缺少callback_task_id参数")
  34. if not user:
  35. raise HTTPException(status_code=400, detail="缺少user参数")
  36. # 验证用户标识(应该是指定用户如user-001)
  37. valid_users = {"user-001", "user-002", "user-003"} # 可以配置化
  38. if user not in valid_users:
  39. raise HTTPException(status_code=403, detail="无效的用户ID")
  40. # 使用 cache_manager 读取结果文件
  41. review_results = cache.load(
  42. subdir="final_result",
  43. filename=f"{callback_task_id}.json",
  44. base_cache_dir=CacheBaseDir.CONSTRUCTION_REVIEW,
  45. default=None
  46. )
  47. if review_results is None:
  48. raise HTTPException(status_code=404, detail="审查结果文件不存在")
  49. # 验证文件中的用户信息是否匹配
  50. if review_results.get("user_id") != user:
  51. raise HTTPException(status_code=403, detail="用户权限验证失败")
  52. return ReviewResultsResponse(
  53. code=200,
  54. data=review_results
  55. )
  56. except HTTPException:
  57. raise
  58. except Exception as e:
  59. raise HTTPException(status_code=500, detail=f"服务器内部错误: {str(e)}")