Code Review 第二轮修复:前端 HTTP 统一 + 数据采集可靠性

F1: 统一前端 HTTP 客户端
- 新增 frontend/src/lib/http.ts(共享客户端,统一超时/错误/401 处理)
- Matches.tsx 的列表/分页/进行中/预测请求改用 http 客户端
- 公开站与 Admin 行为一致

D2: events 采集按联赛分批提交
- _run_bzzoiro 改为 per-league 独立事务,避免超长事务
- 单联赛失败不影响其他联赛

F3: 仪表盘真实计数
- admin_stats 补充 matches/stats/standings 真实聚合
- Dashboard 展示比赛总数/已完赛/统计行/积分榜

F4: LLM 连通性测试不依赖 match_id=1
- 新增 POST /admin/llm/ping 端点(只发一次 chat,不依赖比赛)
- testLLMConnection 优先调用 ping,失败回退旧方式

F5: 导航改用 React Router Link
- App.tsx 中 <a href> 全部替换为 <Link to>

D5: 删除 away_possession 死代码
- bzzoiro.py 中移除计算与注释

D1: 管线基础设施表文档化
- RawEvent/IngestFailure/DataQualityCheck/DataLineage 添加「预留未启用」注释

Co-Authored-By: new-provider/LongCat-2.0 <<EMAIL>>
This commit is contained in:
shangfangjian
2026-09-21 03:06:52 +08:00
co-authored by new-provider/LongCat-2.0 <
parent 675e176603
commit b6e367a640
10 changed files with 226 additions and 74 deletions
+20 -4
View File
@@ -284,7 +284,11 @@ class Schedule(Base):
class RawEvent(Base):
"""Bronze 层:采集到的原始事件存档,便于重放与审计。"""
"""Bronze 层:采集到的原始事件存档,便于重放与审计。
⚠️ 预留未启用:当前 bzzoiro 管线不写入此表。
未来接线计划:events 采集成功后写入 raw_payload,支持重放与审计。
"""
__tablename__ = "raw_events"
id: Mapped[int] = mapped_column(BigInteger, primary_key=True)
@@ -301,7 +305,11 @@ class RawEvent(Base):
class IngestFailure(Base):
"""采集失败死信:记录失败原因、重试次数与下次重试时间。"""
"""采集失败死信:记录失败原因、重试次数与下次重试时间。
⚠️ 预留未启用:当前 bzzoiro 管线不写入此表。
未来接线计划:采集失败时写入,支持按 next_retry_at 自动重试。
"""
__tablename__ = "ingest_failures"
id: Mapped[int] = mapped_column(BigInteger, primary_key=True)
@@ -327,7 +335,11 @@ class IngestFailure(Base):
class DataQualityCheck(Base):
"""数据质量监控:记录每次质量检查的结果。"""
"""数据质量监控:记录每次质量检查的结果。
⚠️ 预留未启用:当前 bzzoiro 管线不写入此表。
未来接线计划:定时检查比赛/统计/积分榜完整性,写入检查结果。
"""
__tablename__ = "data_quality_checks"
id: Mapped[int] = mapped_column(BigInteger, primary_key=True)
@@ -348,7 +360,11 @@ class DataQualityCheck(Base):
class DataLineage(Base):
"""ETL 血缘追踪:记录从源到目标的转换过程。"""
"""ETL 血缘追踪:记录从源到目标的转换过程。
⚠️ 预留未启用:当前 bzzoiro 管线不写入此表。
未来接线计划:每次采集写入 source_record_id → target_table/id 映射。
"""
__tablename__ = "data_lineage"
id: Mapped[int] = mapped_column(BigInteger, primary_key=True)