feat: PLANNING体系首版(00路线图/02任务总表/03执行协议/I-03/I-04/registry42口径)+M1止血交付
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
# Checklist
|
||||
|
||||
## 后端实现检查
|
||||
|
||||
- [x] currency Django应用已创建并注册到INSTALLED_APPS
|
||||
- [x] CurrencyRatesView (GET /api/currency/rates/) 实现正确
|
||||
- [x] 支持base参数查询汇率
|
||||
- [x] 返回格式符合规范
|
||||
- [x] 错误处理完善(400/404/503)
|
||||
- [x] CurrenciesListView (GET /api/currency/currencies/) 实现正确
|
||||
- [x] 返回支持的货币列表
|
||||
- [x] 包含货币代码和名称
|
||||
- [x] CurrencyConvertView (POST /api/currency/convert/) 实现正确
|
||||
- [x] 支持from/to/amount参数
|
||||
- [x] 返回转换结果和汇率
|
||||
- [x] 参数校验完善
|
||||
- [x] Redis缓存机制正常工作
|
||||
- [x] 缓存命中时直接返回
|
||||
- [x] 缓存未命中时调用外部API并缓存
|
||||
- [x] 15分钟后缓存过期
|
||||
- [x] Swagger文档正确显示
|
||||
- [x] 三个接口都出现在文档中
|
||||
- [x] 参数说明完整
|
||||
- [x] 响应示例正确
|
||||
|
||||
## 前端实现检查
|
||||
|
||||
- [x] CurrencyDetail页面组件已创建
|
||||
- [x] 页面布局美观,响应式设计
|
||||
- [x] 包含API文档和测试两个标签页
|
||||
- [x] API文档标签页
|
||||
- [x] 接口说明完整
|
||||
- [x] 请求参数表格显示正确
|
||||
- [x] 响应示例格式正确
|
||||
- [x] 错误码说明完整
|
||||
- [x] 在线测试标签页
|
||||
- [x] HTTP方法选择正常工作
|
||||
- [x] URL输入框正常工作
|
||||
- [x] Headers编辑区正常工作
|
||||
- [x] Body编辑区正常工作(POST/PUT时显示)
|
||||
- [x] 发送请求按钮正常工作
|
||||
- [x] 响应结果正确显示(状态码、耗时、响应体)
|
||||
- [x] 加载状态显示正确
|
||||
- [x] 货币转换计算器
|
||||
- [x] 源货币选择下拉框正常工作
|
||||
- [x] 目标货币选择下拉框正常工作
|
||||
- [x] 金额输入框正常工作
|
||||
- [x] 转换结果正确显示
|
||||
- [x] 汇率信息显示正确
|
||||
- [x] API请求方法已添加到request.ts
|
||||
- [x] currency API方法定义正确
|
||||
- [x] TypeScript类型定义完整
|
||||
- [x] 路由配置正确
|
||||
- [x] /currency-detail 路由可访问
|
||||
- [x] 导航入口正常工作
|
||||
|
||||
## 集成测试检查
|
||||
|
||||
- [x] 前端能够正确调用后端API
|
||||
- [x] 缓存机制在前端响应中正确体现
|
||||
- [x] 错误场景前端正确处理并显示
|
||||
- [x] 页面在不同屏幕尺寸下显示正常
|
||||
@@ -0,0 +1,111 @@
|
||||
# 汇率转换API Spec
|
||||
|
||||
## Why
|
||||
当前系统缺少货币汇率转换功能,用户无法进行实时汇率查询和货币换算。需要开发汇率转换API后端及前端详情页,提供实时汇率查询和货币转换能力。
|
||||
|
||||
## What Changes
|
||||
|
||||
### 后端变更
|
||||
- 新增 `currency/` Django应用,实现汇率转换API视图
|
||||
- 调用免费汇率API(使用 https://open.er-api.com,无需API Key)
|
||||
- 添加Redis缓存机制,缓存汇率数据15分钟以减少外部API调用
|
||||
- 添加Swagger文档支持
|
||||
- 注册URL路由 `/api/currency/`
|
||||
|
||||
### 前端变更
|
||||
- 新增 `CurrencyDetail` 页面,提供汇率查询和货币转换功能
|
||||
- 包含API文档标签页和在线测试标签页
|
||||
- 支持选择源货币和目标货币
|
||||
- 显示实时汇率和转换结果
|
||||
- 添加路由配置
|
||||
|
||||
### 配置变更
|
||||
- 添加汇率API基础URL到Django settings(可选配置)
|
||||
- 无需额外第三方库(使用已有的requests库)
|
||||
|
||||
## Impact
|
||||
- Affected specs: 无
|
||||
- Affected code:
|
||||
- `chunyu_project/currency/` (新增Django应用)
|
||||
- `chunyu_project/api/urls.py` (修改,添加currency路由)
|
||||
- `chunyu_project_react/src/pages/CurrencyDetail/` (新增)
|
||||
- `chunyu_project_react/src/utils/request.ts` (修改,添加currency API)
|
||||
- `chunyu_project_react/src/routes/` (修改,添加路由)
|
||||
|
||||
## ADDED Requirements
|
||||
|
||||
### Requirement: 汇率查询API
|
||||
The system SHALL provide a currency exchange rate API that returns real-time exchange rates for a given base currency.
|
||||
|
||||
#### Scenario: 成功查询汇率
|
||||
- **WHEN** 用户发送 GET 请求到 `/api/currency/rates/`,携带 `base` 参数(如 USD)
|
||||
- **THEN** 系统返回 200 状态码及汇率数据(基础货币、汇率日期、各货币汇率)
|
||||
|
||||
#### Scenario: 查询所有支持的货币列表
|
||||
- **WHEN** 用户发送 GET 请求到 `/api/currency/currencies/`
|
||||
- **THEN** 系统返回 200 状态码及支持的货币列表(货币代码、货币名称)
|
||||
|
||||
#### Scenario: 货币转换计算
|
||||
- **WHEN** 用户发送 POST 请求到 `/api/currency/convert/`,携带 `from`、`to`、`amount` 参数
|
||||
- **THEN** 系统返回 200 状态码及转换结果(源货币、目标货币、金额、汇率、转换结果)
|
||||
|
||||
#### Scenario: 缺少必填参数
|
||||
- **WHEN** 用户发送请求但未携带必填参数
|
||||
- **THEN** 系统返回 400 状态码及错误提示
|
||||
|
||||
#### Scenario: 无效的货币代码
|
||||
- **WHEN** 用户请求中携带无效的货币代码
|
||||
- **THEN** 系统返回 400 状态码及错误提示
|
||||
|
||||
#### Scenario: 外部API不可用
|
||||
- **WHEN** 外部汇率服务暂时不可用
|
||||
- **THEN** 系统返回 503 状态码及友好错误提示
|
||||
|
||||
### Requirement: Redis缓存
|
||||
The system SHALL cache exchange rate data in Redis to reduce external API calls.
|
||||
|
||||
#### Scenario: 缓存命中
|
||||
- **WHEN** 用户查询汇率且缓存中存在有效数据
|
||||
- **THEN** 系统直接返回缓存数据,不调用外部API
|
||||
|
||||
#### Scenario: 缓存未命中
|
||||
- **WHEN** 用户查询汇率且缓存中无有效数据
|
||||
- **THEN** 系统调用外部API获取数据,存入缓存后返回
|
||||
|
||||
#### Scenario: 缓存过期
|
||||
- **WHEN** 缓存数据超过15分钟
|
||||
- **THEN** 系统重新调用外部API获取最新数据
|
||||
|
||||
### Requirement: API文档集成
|
||||
The currency API SHALL be automatically included in the Swagger API documentation.
|
||||
|
||||
#### Scenario: Swagger文档显示
|
||||
- **WHEN** 管理员访问 `/swagger/` 或 `/api-docs/`
|
||||
- **THEN** 汇率转换API出现在API文档列表中,包含参数说明和响应示例
|
||||
|
||||
### Requirement: 前端汇率详情页
|
||||
The frontend SHALL provide a CurrencyDetail page for currency exchange rate query and conversion.
|
||||
|
||||
#### Scenario: 查看API文档
|
||||
- **WHEN** 用户访问汇率详情页
|
||||
- **THEN** 系统显示API接口文档,包含请求参数、响应示例、错误码说明
|
||||
|
||||
#### Scenario: 在线测试API
|
||||
- **WHEN** 用户在测试标签页选择货币和金额,点击发送请求
|
||||
- **THEN** 系统向 `/api/currency/` 相关接口发起真实请求并显示响应结果
|
||||
|
||||
#### Scenario: 货币转换
|
||||
- **WHEN** 用户选择源货币、目标货币和输入金额
|
||||
- **THEN** 系统显示实时汇率和转换后的金额
|
||||
|
||||
## MODIFIED Requirements
|
||||
|
||||
### Requirement: ApiDetail页面路由
|
||||
The frontend routing SHALL include the new CurrencyDetail page.
|
||||
|
||||
#### Scenario: 访问汇率详情页
|
||||
- **WHEN** 用户访问 `/api-detail/currency`
|
||||
- **THEN** 系统显示汇率转换API详情页
|
||||
|
||||
## REMOVED Requirements
|
||||
无
|
||||
@@ -0,0 +1,66 @@
|
||||
# Tasks
|
||||
|
||||
## 后端任务
|
||||
|
||||
- [x] Task 1: 创建Currency Django应用
|
||||
- [x] SubTask 1.1: 创建 `currency/` 应用目录结构(apps.py, urls.py, views.py)
|
||||
- [x] SubTask 1.2: 在 `settings.py` 中注册 `currency` 应用
|
||||
- [x] SubTask 1.3: 创建数据库迁移(如需要)
|
||||
|
||||
- [x] Task 2: 实现汇率查询API视图
|
||||
- [x] SubTask 2.1: 实现 `CurrencyRatesView` - 获取指定基础货币的汇率列表
|
||||
- [x] SubTask 2.2: 实现 `CurrenciesListView` - 获取支持的货币列表
|
||||
- [x] SubTask 2.3: 实现 `CurrencyConvertView` - 货币转换计算
|
||||
- [x] SubTask 2.4: 添加Swagger文档注解
|
||||
|
||||
- [x] Task 3: 实现Redis缓存机制
|
||||
- [x] SubTask 3.1: 实现缓存工具函数(get/set)
|
||||
- [x] SubTask 3.2: 在视图中集成缓存逻辑(15分钟过期)
|
||||
- [x] SubTask 3.3: 添加缓存状态标识到响应头
|
||||
|
||||
- [x] Task 4: 注册URL路由
|
||||
- [x] SubTask 4.1: 配置 `currency/urls.py`
|
||||
- [x] SubTask 4.2: 在 `api/urls.py` 中添加currency路由
|
||||
|
||||
## 前端任务
|
||||
|
||||
- [x] Task 5: 创建CurrencyDetail页面组件
|
||||
- [x] SubTask 5.1: 创建 `CurrencyDetail.tsx` 主组件
|
||||
- [x] SubTask 5.2: 创建 `CurrencyDetail.css` 样式文件
|
||||
- [x] SubTask 5.3: 实现API文档标签页内容
|
||||
- [x] SubTask 5.4: 实现在线测试标签页内容
|
||||
- [x] SubTask 5.5: 实现货币选择下拉框组件
|
||||
- [x] SubTask 5.6: 实现货币转换计算器组件
|
||||
|
||||
- [x] Task 6: 添加API请求方法
|
||||
- [x] SubTask 6.1: 在 `request.ts` 中添加 `currency` API 方法
|
||||
- [x] SubTask 6.2: 定义TypeScript类型定义
|
||||
|
||||
- [x] Task 7: 配置路由
|
||||
- [x] SubTask 7.1: 在路由配置中添加 `/currency-detail` 路由
|
||||
- [x] SubTask 7.2: 添加导航入口(如在API列表页面添加汇率转换卡片)
|
||||
|
||||
## 测试任务
|
||||
|
||||
- [x] Task 8: 后端API测试
|
||||
- [x] SubTask 8.1: 测试汇率查询接口(正常/异常场景)
|
||||
- [x] SubTask 8.2: 测试货币列表接口
|
||||
- [x] SubTask 8.3: 测试货币转换接口
|
||||
- [x] SubTask 8.4: 测试缓存机制
|
||||
|
||||
- [x] Task 9: 前端页面测试
|
||||
- [x] SubTask 9.1: 测试页面路由和渲染
|
||||
- [x] SubTask 9.2: 测试API文档标签页
|
||||
- [x] SubTask 9.3: 测试在线测试标签页
|
||||
- [x] SubTask 9.4: 测试货币转换功能
|
||||
|
||||
# Task Dependencies
|
||||
|
||||
- Task 2 依赖 Task 1 ✅
|
||||
- Task 3 依赖 Task 1 ✅
|
||||
- Task 4 依赖 Task 2, Task 3 ✅
|
||||
- Task 6 依赖 Task 4 ✅
|
||||
- Task 5 依赖 Task 6 ✅
|
||||
- Task 7 依赖 Task 5 ✅
|
||||
- Task 8 依赖 Task 4 ✅
|
||||
- Task 9 依赖 Task 7 ✅
|
||||
Reference in New Issue
Block a user