# 数据缓冲平台

基于 FastAPI + SQLite + APScheduler 的行情数据缓冲服务。

## 功能

1. **数据采集缓存** - 复用现有采集脚本，自动缓存到 SQLite
2. **批量获取接口** - 指定品种+周期，批量拉取并缓存
3. **定时任务管理** - 创建/启动/停止/删除自动轮询任务
4. **最新数据接口** - 从缓存中快速获取最新数据

## 快速启动

```bash
cd buffer_platform
pip install -r requirements.txt

# 启动服务（默认端口 8600）
python -m app.main

# 或指定端口
BUFFER_PORT=9000 python -m app.main
```

## API 接口

### 数据接口 `/api/v1/data`

| 方法 | 路径 | 说明 |
|------|------|------|
| POST | `/data/batch-fetch` | 批量获取并缓存（智能缓存） |
| GET | `/data/latest/{symbol}` | 从缓存获取最新数据 |
| GET | `/data/latest/{symbol}/{period}` | 获取指定周期最新数据 |
| GET | `/data/cache-status/{symbol}` | 查看缓存状态 |

### 品种配置接口 `/api/v1/config`

| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/config` | 获取当前品种配置 |
| POST | `/config/upload` | 上传品种配置文件（JSON） |
| POST | `/config/batch-fetch-all` | 根据配置批量获取所有品种数据 |
| POST | `/config/batch-tasks` | 根据配置批量创建定时任务 |

### 定时任务接口 `/api/v1/tasks`

| 方法 | 路径 | 说明 |
|------|------|------|
| POST | `/tasks` | 创建并启动定时任务 |
| GET | `/tasks` | 列出所有任务 |
| POST | `/tasks/{id}/start` | 启动任务 |
| POST | `/tasks/{id}/stop` | 停止任务 |
| POST | `/tasks/{id}/update-interval` | 更新轮询间隔 |
| DELETE | `/tasks/{id}` | 删除任务 |

### UI 页面

| 路径 | 说明 |
|------|------|
| `/ui` | 品种配置管理页面（上传文件、批量获取、批量任务） |
| `/docs` | Swagger API 文档 |

### 使用示例

```bash
# 启动服务（默认端口 8600）
cd buffer_platform
python -m app.main

# 访问 UI 管理页面
open http://localhost:8600/ui

# 上传品种配置文件
curl -X POST http://localhost:8600/api/v1/config/upload \
  -F "file=@symbols_config.json"

# 查看当前配置
curl http://localhost:8600/api/v1/config

# 根据配置批量获取所有品种数据
curl -X POST 'http://localhost:8600/api/v1/config/batch-fetch-all?periods=5min,15min,60min&data_type=futures'

# 根据配置批量创建定时任务（每5分钟自动采集）
curl -X POST 'http://localhost:8600/api/v1/config/batch-tasks?periods=5min,15min,60min&interval_seconds=300&data_type=futures'

# 批量获取（手动指定品种）
curl -X POST http://localhost:8600/api/v1/data/batch-fetch \
  -H "Content-Type: application/json" \
  -d '{"symbols": ["SN2504", "AG2506"], "periods": ["5min", "15min"]}'

# 获取最新缓存
curl http://localhost:8600/api/v1/data/latest/SN2504

# 创建单个定时任务
curl -X POST http://localhost:8600/api/v1/tasks \
  -H "Content-Type: application/json" \
  -d '{"symbol": "SN2504", "periods": ["5min", "15min", "60min"], "interval_seconds": 300}'
```

## 项目结构

```
buffer_platform/
├── app/
│   ├── main.py              # FastAPI 入口
│   ├── config.py             # 配置
│   ├── database.py           # 数据库连接
│   ├── models.py             # ORM 模型
│   ├── schemas.py            # 请求/响应模型
│   ├── api/
│   │   ├── data.py           # 数据接口
│   │   └── tasks.py          # 任务接口
│   └── services/
│       ├── collector.py      # 采集服务
│       ├── cache.py          # 缓存服务
│       └── scheduler.py      # 调度服务
├── data/                     # SQLite 数据库文件
└── requirements.txt
```
