Fundamental_Analysis/services/data-persistence-service/README.md
Lv, Qi 21155bc4f8 feat(realtime): 接入前端实时报价并完善后端缓存
前端: 新增 RealTimeQuoteResponse 类型;新增 useRealtimeQuote Hook 并在报告页图表旁展示价格与时间戳(严格 TTL,无兜底)

FastAPI: 新增 GET /financials/{market}/{symbol}/realtime?max_age_seconds=.. 只读端点;通过 DataPersistenceClient 读取 Rust 缓存

Rust: 新增 realtime_quotes hypertable 迁移;新增 POST /api/v1/market-data/quotes 与 GET /api/v1/market-data/quotes/{symbol}?market=..;新增 DTO/Model/DB 函数;修正 #[api] 宏与路径参数;生成 SQLx 离线缓存 (.sqlx) 以支持离线构建

Python: DataPersistenceClient 新增 upsert/get 实时报价,并调整 GET 路径与参数

说明: TradingView 图表是第三方 websocket,不受我们缓存控制;页面数值展示走自有缓存通路,统一且可控。
2025-11-09 05:12:14 +08:00

68 lines
1.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 数据持久化服务 (Data Persistence Service)
本服务是“基本面分析”微服务架构中数据库的唯一所有者,为所有数据持久化需求提供一个 RESTful API。
## 概览
- **语言**: Rust
- **框架**: Axum
- **数据库**: PostgreSQL (带有 TimescaleDB 扩展)
- **核心任务**: 为数据库提供一个稳定、高性能且类型安全的 API 层。
## 本地开发指南
### 1. 先决条件
- Rust 工具链 (`rustup`)
- `sqlx-cli` (`cargo install sqlx-cli`)
- 一个正在运行的、并已启用 TimescaleDB 扩展的 PostgreSQL 实例。
### 2. 配置
`env.sample` 文件复制为 `.env`,并根据您的本地环境配置 `DATABASE_URL`
```bash
cp env.sample .env
```
您的 `.env` 文件应如下所示:
```ini
# 服务监听的端口
PORT=3000
# 用于 sqlx 连接数据库的 URL
# 请确保用户、密码、主机、端口和数据库名称都正确无误
DATABASE_URL=postgres://user:password@localhost:5432/fundamental_analysis
```
### 3. 数据库迁移
在首次运行本服务之前,或在任何数据库结构变更之后,请运行迁移命令以更新数据库:
```bash
sqlx migrate run
```
### 4. 运行服务
编译并运行本服务:
```bash
cargo run
```
服务将会启动并在您 `.env` 文件中指定的端口(默认为 3000上监听。服务的 OpenAPI 规范 (Swagger JSON) 将在 `/api-docs/openapi.json` 路径下可用。
## 测试
要运行所有测试(包括数据库集成测试和 API 集成测试),请使用以下命令。请确保您的 `.env` 文件中的 `DATABASE_URL` 指向一个有效的、已应用迁移的测试数据库。
```bash
cargo test
```
如果需要查看详细的测试输出,可以使用:
```bash
cargo test -- --nocapture
```