AI 分析报告按用户隔离存储
个股/财务/复盘报告改为 data/user_data/reports/{username}/ 目录下,
API 端从 request.state.username 读取对应用户的报告。
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -151,11 +151,12 @@ class SaveReportRequest(BaseModel):
|
||||
|
||||
@router.get("/reports")
|
||||
def list_reports(request: Request):
|
||||
"""获取全部历史报告(按时间降序,后端已裁剪到上限)。无需 FINANCIAL 能力读取列表元信息。"""
|
||||
"""获取当前用户的历史报告(按时间降序,后端已裁剪到上限)。"""
|
||||
capset = request.app.state.capabilities
|
||||
if not capset.has(Cap.FINANCIAL):
|
||||
return {"reports": []}
|
||||
return {"reports": ai_reports.list_reports()}
|
||||
username = getattr(request.state, "username", None)
|
||||
return {"reports": ai_reports.list_reports(username)}
|
||||
|
||||
|
||||
@router.post("/reports")
|
||||
@@ -163,6 +164,7 @@ def save_report(request: Request, req: SaveReportRequest):
|
||||
"""保存一条报告。"""
|
||||
capset = request.app.state.capabilities
|
||||
capset.require(Cap.FINANCIAL)
|
||||
username = getattr(request.state, "username", None)
|
||||
report = ai_reports.save_report({
|
||||
"symbol": req.symbol,
|
||||
"name": req.name,
|
||||
@@ -170,7 +172,7 @@ def save_report(request: Request, req: SaveReportRequest):
|
||||
"content": req.content,
|
||||
"periods": req.periods,
|
||||
"summary": req.summary,
|
||||
})
|
||||
}, username)
|
||||
return {"ok": True, "report": report}
|
||||
|
||||
|
||||
@@ -179,5 +181,6 @@ def delete_report(request: Request, report_id: str):
|
||||
"""删除一条报告。"""
|
||||
capset = request.app.state.capabilities
|
||||
capset.require(Cap.FINANCIAL)
|
||||
ok = ai_reports.delete_report(report_id)
|
||||
username = getattr(request.state, "username", None)
|
||||
ok = ai_reports.delete_report(report_id, username)
|
||||
return {"ok": ok}
|
||||
|
||||
@@ -81,13 +81,15 @@ class SaveReportRequest(BaseModel):
|
||||
|
||||
@router.get("/reports")
|
||||
def list_reports(request: Request):
|
||||
"""获取全部历史复盘(按时间降序,后端已裁剪到上限)。"""
|
||||
return {"reports": market_recap_reports.list_reports()}
|
||||
"""获取当前用户的历史复盘(按时间降序,后端已裁剪到上限)。"""
|
||||
username = getattr(request.state, "username", None)
|
||||
return {"reports": market_recap_reports.list_reports(username)}
|
||||
|
||||
|
||||
@router.post("/reports")
|
||||
def save_report(request: Request, req: SaveReportRequest):
|
||||
"""保存一条复盘报告。"""
|
||||
username = getattr(request.state, "username", None)
|
||||
report = market_recap_reports.save_report({
|
||||
"as_of": req.as_of,
|
||||
"focus": req.focus,
|
||||
@@ -95,9 +97,7 @@ def save_report(request: Request, req: SaveReportRequest):
|
||||
"summary": req.summary,
|
||||
"emotion_score": req.emotion_score,
|
||||
"emotion_label": req.emotion_label,
|
||||
})
|
||||
# 推送到飞书(可选): 与定时复盘共用同一开关 review_push_enabled 与 _maybe_push_review。
|
||||
# 内部 try/except 静默降级, 不影响归档返回值。
|
||||
}, username)
|
||||
from app.jobs.daily_pipeline import _maybe_push_review
|
||||
_maybe_push_review(req.content, {
|
||||
"as_of": req.as_of,
|
||||
@@ -109,5 +109,6 @@ def save_report(request: Request, req: SaveReportRequest):
|
||||
@router.delete("/reports/{report_id}")
|
||||
def delete_report(request: Request, report_id: str):
|
||||
"""删除一条复盘报告。"""
|
||||
ok = market_recap_reports.delete_report(report_id)
|
||||
username = getattr(request.state, "username", None)
|
||||
ok = market_recap_reports.delete_report(report_id, username)
|
||||
return {"ok": ok}
|
||||
|
||||
@@ -191,13 +191,15 @@ class SaveReportRequest(BaseModel):
|
||||
|
||||
@router.get("/reports")
|
||||
def list_reports(request: Request):
|
||||
"""获取全部历史报告(按时间降序,后端已裁剪到上限)。"""
|
||||
return {"reports": stock_reports.list_reports()}
|
||||
"""获取当前用户的历史报告(按时间降序,后端已裁剪到上限)。"""
|
||||
username = getattr(request.state, "username", None)
|
||||
return {"reports": stock_reports.list_reports(username)}
|
||||
|
||||
|
||||
@router.post("/reports")
|
||||
def save_report(request: Request, req: SaveReportRequest):
|
||||
"""保存一条报告。"""
|
||||
username = getattr(request.state, "username", None)
|
||||
report = stock_reports.save_report({
|
||||
"symbol": req.symbol,
|
||||
"name": req.name,
|
||||
@@ -206,12 +208,13 @@ def save_report(request: Request, req: SaveReportRequest):
|
||||
"summary": req.summary,
|
||||
"close": req.close,
|
||||
"levels": req.levels,
|
||||
})
|
||||
}, username)
|
||||
return {"ok": True, "report": report}
|
||||
|
||||
|
||||
@router.delete("/reports/{report_id}")
|
||||
def delete_report(request: Request, report_id: str):
|
||||
"""删除一条报告。"""
|
||||
ok = stock_reports.delete_report(report_id)
|
||||
username = getattr(request.state, "username", None)
|
||||
ok = stock_reports.delete_report(report_id, username)
|
||||
return {"ok": ok}
|
||||
|
||||
Reference in New Issue
Block a user