1.7 KiB
1.7 KiB
市场数据完整性检查 API 设计
深模块接口
RunMarketIntegrityCheck 对 HTTP 暴露 prepare/execute/query;调用方不需要知道流式 cursor、CSV
布局、比较算法或检查表写入细节。真实 PostgreSQL/CSV adapters 与内存测试 adapters 落在既有 ports seam。
数据模型
新增 IntegrityCheckRun、IntegrityIssue 和分页结果。迁移 0003_market_integrity_checks 创建:
market_integrity_check:运行状态、窗口、target/checked/issue 计数、安全批次错误和时间;market_integrity_issue:check id、稳定 issue key、item kind/key、issue type、安全 message;- running/created_at 和 issue check id 索引。
检查表不参与首页 overview 或 selection source 查询。
比较算法
在同一 advisory lock 中:
- 读取最近已完成同步窗口和 active stock master;
- 比较 stock CSV;
- PostgreSQL 按
(ts_code, trade_date)流式读取 bars,与逐股 CSV 归并比较; - PostgreSQL 按
(trade_date, ts_code)流式读取 daily_basic,与逐日 CSV 归并比较; - 每完成一组更新 checked_count,问题分批写入;
- 无问题为 passed,有问题为 issues_found,批次异常为 failed。
事实读取使用稳定快照且不执行 DML。CSV adapter 仅打开正式文件,不创建临时文件、不调用 publish。
HTTP 与恢复
挂载 /api/v1/market-data/integrity-checks。POST 原子 claim 后通过 BackgroundTasks 执行;已有 running
返回 409。查询端点返回 Pydantic 模型并限制 page size。
prepare 时可把超过配置阈值且已不持有 advisory lock 的旧 running 标记为 failed;不能仅按页面刷新 时间误杀仍在运行的任务。后台 execute 最外层保证异常落库。