## 2025-11-03 开发日志

**比较基线**
- 上一次提交: b982cd5（2025-10-31 22:14 +0800，“更新前端配置、文档和脚本”）

**今日概览**
- 共修改 20 个文件：新增约 1047 行，删除约 616 行
- 关键主题：
  - 后端数据源抽象与路由重构（引入 DataManager 与多 Provider）
  - AI 分析模块的编排、依赖解析与流式输出接口
  - 前端接入 Prisma（PostgreSQL）并新增报告存储 API 与页面
  - 移除旧 Tushare 客户端实现，统一到新 Provider 架构
  - 配置、依赖与开发脚本同步更新

---

### 后端（FastAPI）

**数据源抽象与管理**
- 新增 `backend/app/data_manager.py`：集中加载 `config/data_sources.yaml`，根据市场（CN/US/HK/JP）优先级选择 Provider；提供统一的 `get_stock_basic`、`get_financial_statements`、`get_daily_price` 等方法。
- 新增 Provider 抽象与实现：
  - 抽象基类：`backend/app/data_providers/base.py`
  - 实现：`backend/app/data_providers/tushare.py`、`.../yfinance.py`、`.../finnhub.py`、`.../ifind.py`
  - Token 优先从环境变量读取，次选 `config/config.json`。
- 新增配置 `config/data_sources.yaml`：定义各数据源的 `api_key_env` 和各市场的优先顺序。
- 移除旧实现 `backend/app/services/tushare_client.py`。

**路由与业务逻辑重构**
- `backend/app/routers/financial.py` 大幅重写：
  - `GET /data-sources`：返回需要密钥的数据源列表（用于前端指引）。
  - 分析编排接口：
    - `POST /china/{ts_code}/analysis`：读取分析模块配置，拓扑排序按依赖顺序执行，汇总结果。
    - `GET /china/{ts_code}/analysis/{analysis_type}`：单模块分析，自动解析依赖并注入上下文。
    - `GET /china/{ts_code}/analysis/{analysis_type}/stream`：流式输出纯文本分析内容。
    - `GET /analysis-config` 与 `PUT /analysis-config`：读取/更新 `config/analysis-config.json`。
  - `GET /china/{ts_code}`：通过 `DataManager` 批量拉取多年度报表，聚合为前端所需的 `series` 结构。
  - `GET /china/{ts_code}/company-profile`：使用 LLM 生成公司画像（非流式）。

**分析客户端**
- `backend/app/services/analysis_client.py`：统一的 OpenAI 兼容客户端，支持：
  - 非流式生成：`generate_analysis(...)`
  - 流式生成：`generate_analysis_stream(...)`
  - 安全模板占位符替换与上下文合并；读写 `config/analysis-config.json`。

**应用入口与依赖**
- `backend/app/main.py`：
  - 增强日志输出（自定义 Handler，开发期强制输出到 stdout）。
  - 保持 CORS 全开与路由注册（`/api/v1/config/*`、`/api/v1/financials/*`）。
- `backend/requirements.txt`：补充 `yfinance`、`finnhub-python`、`pandas`、`PyYAML`、`asyncpg`、`greenlet` 等依赖。

---

### 配置与文档
- `config/analysis-config.json`：更新分析模块配置（依赖、模型、模板）。
- `docs/user-guide.md`：小幅补充。

---

### 前端（Next.js 15 / React 19）

**Prisma 集成与报告 API**
- 新增 Prisma：
  - `frontend/prisma/schema.prisma` 定义 `Report { id, symbol, content(Json), createdAt }`。
  - `frontend/src/lib/prisma.ts` 提供 PrismaClient 单例。
  - 依赖更新：`@prisma/client`、`prisma` 等；`package-lock.json` 同步。
- 新增 API：
  - `GET/POST /api/reports`：分页查询与创建报告（基本校验）。
  - `GET /api/reports/[id]`：按 ID 获取报告。

**页面与其他改动**
- `frontend/src/app/reports/page.tsx`：渲染报告列表并跳转至详情页 `reports/[id]`。
- 新增 `frontend/src/app/reports/[id]/page.tsx`：报告详情页。
- `frontend/src/app/report/[symbol]/page.tsx`：较大调整（生成/展示逻辑整合）。
- 其他微调：`layout.tsx`、`api/financials/[...slug]/route.ts`、`.gitignore`、`next.config.mjs`。
- 运行脚本端口：`npm run dev` 默认 3001。

---

### 脚本
- `scripts/dev.sh`：增强启动/开发流程。
- 若干测试脚本小改：`scripts/test-*.py`。
- 新增过渡脚本 `scripts/tushare_legacy_client.py`（旧 Tushare 逻辑备份/兼容）。

---

### 删除/新增（关键）
- 删除：`backend/app/services/tushare_client.py`。
- 新增（尚未提交的工作副本）：
  - 后端：`backend/app/data_manager.py`、`backend/app/data_providers/*`
  - 配置：`config/data_sources.yaml`
  - 前端：`frontend/prisma/schema.prisma`、`frontend/src/lib/prisma.ts`、`frontend/src/app/api/reports/*`、`frontend/src/app/reports/[id]/page.tsx`

---

### 备注
- 需确保各数据源的密钥通过环境变量或 `config/config.json` 正确配置。
- 分析模块配置（依赖与模板）变更需同步前后端约定。


