feat: 初始化孕育无忧全栈项目基础代码结构
完成项目初始搭建,包含后端FastAPI+MongoDB服务、前端React+Vite项目的完整基础结构,添加各类配置文件与依赖清单,涵盖核心业务初始框架。
This commit is contained in:
70
backend/app/routers/share.py
Normal file
70
backend/app/routers/share.py
Normal file
@@ -0,0 +1,70 @@
|
||||
from fastapi import APIRouter, Depends, HTTPException
|
||||
from pydantic import BaseModel
|
||||
|
||||
from app.middleware.auth import get_current_user
|
||||
from app.models.analysis import Analysis
|
||||
from app.models.report import Report
|
||||
from app.models.user import User
|
||||
from app.utils.helpers import parse_object_id, mask_name
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
class ShareOptions(BaseModel):
|
||||
privacy_mode: bool = True # 隐私模式,脱敏个人信息
|
||||
include_details: bool = False # 是否包含详细数据
|
||||
|
||||
|
||||
@router.post("/{report_id}/generate")
|
||||
async def generate_share_data(
|
||||
report_id: str,
|
||||
options: ShareOptions = ShareOptions(privacy_mode=True, include_details=True),
|
||||
user: User = Depends(get_current_user),
|
||||
):
|
||||
"""生成分享数据"""
|
||||
oid = parse_object_id(report_id)
|
||||
report = await Report.get(oid)
|
||||
if not report or report.user_id != user.id:
|
||||
raise HTTPException(status_code=404, detail="报告不存在")
|
||||
|
||||
analysis = await Analysis.find_one(Analysis.report_id == report.id)
|
||||
if not analysis:
|
||||
raise HTTPException(status_code=404, detail="暂无解读结果")
|
||||
|
||||
# Build share data
|
||||
share_data = {
|
||||
"report_type": report.report_type,
|
||||
"pregnancy_week": report.pregnancy_week,
|
||||
"overall_status": analysis.overall_status,
|
||||
"risk_level": analysis.risk_level,
|
||||
"overall_summary": analysis.overall_summary,
|
||||
"emotional_summary": analysis.emotional_summary,
|
||||
"action_items": [a.model_dump() for a in analysis.action_items],
|
||||
"tips": analysis.tips,
|
||||
"categories": [
|
||||
{
|
||||
"category": cat.category,
|
||||
"status": cat.status,
|
||||
"indicators": [
|
||||
{
|
||||
"name": ind.name,
|
||||
"nickname": ind.nickname,
|
||||
"value": ind.value,
|
||||
"status": ind.status,
|
||||
"what_is_it": ind.what_is_it,
|
||||
"impact": ind.impact,
|
||||
"suggestion": ind.suggestion,
|
||||
}
|
||||
for ind in cat.indicators
|
||||
],
|
||||
}
|
||||
for cat in analysis.categories
|
||||
],
|
||||
}
|
||||
|
||||
if not options.privacy_mode:
|
||||
share_data["user_name"] = user.name
|
||||
else:
|
||||
share_data["user_name"] = mask_name(user.name)
|
||||
|
||||
return {"share_data": share_data}
|
||||
Reference in New Issue
Block a user