Project Review Backlog (2026-02-26)¶
用途:记录本次项目扫描发现的问题,作为后续回顾和修复清单。
P0 安全与可用性¶
- 明文 API Key 出现在仓库脚本中(高风险泄露)。
- 文件:
test_siliconflow.sh - 位置:第 4 行
-
建议:立刻移除明文密钥,改为读取环境变量;并轮换已暴露 Key。
-
标书解析接口缺少鉴权,存在滥用风险。
- 文件:
app/routes/tender/parser.py - 位置:
router = APIRouter()与/{tender_id}/documents/parse -
建议:加上
Depends(get_current_user),并校验当前用户对目标标书的访问权限。 -
任务取消失败分支会触发运行时参数错误。
- 文件:
app/routes/tasks.py - 位置:
return fail(..., code=404) - 关联:
app/schemas/response.py的fail()无code参数 - 建议:统一返回
biz_code,或扩展fail()签名并统一改造调用方。
P1 业务正确性¶
- 图库创建未写入
user_id,与模型约束不一致。 - 文件:
app/services/image/gallery_service.py - 关联模型:
app/models/image_gallery.py -
建议:创建时显式写入当前用户 ID,并对查询/更新/删除增加用户隔离条件。
-
上下文组装字段名与模型不一致,人员/设备章节可能报错。
- 文件:
app/services/context_assembler.py - 典型字段:
count_str/count_val/item_name/requirements - 关联模型字段:
count_desc/count(人员),name/quantity_desc/specifications(设备) -
建议:统一字段命名并补一组单元测试覆盖章节生成路径。
-
知识库目录服务使用了不存在字段
knowledge_base_id。 - 文件:
app/services/knowledge/directory_service.py - 关联模型:
app/models/knowledge.py(字段为knowledge_id) -
建议:统一改为
knowledge_id,并回归验证目录 CRUD。 -
知识库目录路由被注释,接口未实际暴露。
- 文件:
app/routes/knowledge/__init__.py -
建议:按产品需求决定启用或删除死代码,避免“以为可用、实际不可用”。
-
解析并发取消逻辑将 coroutine 当 Task 操作。
- 文件:
app/services/ingestion/ -
建议:
asyncio.create_task(...)后再管理 Task;或仅依赖外层 cancel 信号,不手动遍历 coroutine。 -
兜底创建 Tender 时缺少必填
title,存在失败路径。 - 文件:
app/services/tender_service.py - 关联模型:
app/models/tenders/core.py - 建议:补默认标题策略,或在创建前保证标题来源必定存在。
P2 工程化与维护性¶
- 自动化测试覆盖不足(当前
pytest无测试用例执行)。 -
建议:先补最小回归集:鉴权、解析、任务取消、图库创建、章节生成。
-
缺少数据库迁移体系。
-
建议:引入 Alembic,避免模型变更仅靠
create_all导致线上演进风险。 -
README信息过少,不利于新同学接入。 - 建议:补启动步骤、环境变量说明、核心 API 调用顺序、常见故障排查。
建议的后续修复顺序¶
- 先修 P0(安全与必炸路径)。
- 再修 P1(核心业务正确性与多租户隔离)。
- 最后补 P2(测试、迁移、文档)。