fastapi-demo/docs/complete-crud-api/CONSENSUS_complete-crud-api.md

212 lines
5.8 KiB
Markdown
Raw Normal View History

2025-09-28 09:12:13 +08:00
# CONSENSUS - 完善 CRUD API 功能共识文档
## 明确的需求描述
### 核心目标
将现有基于内存假数据的 FastAPI 项目转换为基于 MySQL 数据库的完整 CRUD 系统,实现 Users 和 Products 的完整增删改查操作。
### 具体功能需求
#### Users API 完善
- **POST /api/v1/users/** - 创建新用户
- **PUT /api/v1/users/{id}** - 更新用户信息
- **DELETE /api/v1/users/{id}** - 删除用户
#### Products API 完善
- **POST /api/v1/products/** - 创建新产品
- **PUT /api/v1/products/{id}** - 更新产品信息
- **DELETE /api/v1/products/{id}** - 删除产品
#### 数据持久化
- 完全移除内存假数据 (`fake_users_db`, `fake_products_db`)
- 所有操作直接与 MySQL 数据库交互
- 使用 SQLAlchemy ORM 进行数据库操作
## 技术实现方案
### 已确认的技术决策
#### 1. 数据验证策略 ✅
- **Pydantic 层**: 数据类型和格式验证
- **服务层**: 业务规则验证(邮箱唯一性、产品名称等)
- **数据库层**: 约束验证(主键、外键、唯一索引)
#### 2. 错误处理方式 ✅
- 提供详细错误信息,便于调试
- 标准 HTTP 状态码
- 结构化错误响应
#### 3. 数据库会话管理 ✅
- 使用 FastAPI 依赖注入机制
- `get_db()` 依赖函数管理会话生命周期
- 自动会话关闭和异常处理
#### 4. API 响应格式 ✅
- 保持现有代码风格
- 直接返回 Pydantic 模型
- 无需额外响应包装
#### 5. 初始数据策略 ✅
- **不保留**假数据
- 移除所有内存数据初始化
- 从空数据库开始
## 技术约束
### 框架和库约束
- **FastAPI**: 保持现有路由结构 `/api/v1/`
- **SQLAlchemy**: 使用现有数据库模型
- **Pydantic**: 使用现有模式定义
- **MySQL**: 连接现有 `fast_demo` 数据库
### 代码规范约束
- 保持现有项目结构和命名约定
- 遵循现有代码风格和注释规范
- 保持现有错误处理模式
- 使用现有依赖包版本
### 架构约束
- 维持分层架构: API层 → 服务层 → 数据库层
- 保持应用工厂模式
- 使用现有配置管理系统
## 集成方案
### 数据库集成
- 利用现有 SQLAlchemy 配置
- 复用现有数据库连接池
- 使用现有模型定义 (`app/database/models.py`)
### API 集成
- 扩展现有路由文件
- 保持现有 API 版本控制
- 维持现有中间件配置
### 依赖注入集成
```python
# 复用现有数据库依赖
from app.database.connection import get_db
from sqlalchemy.orm import Session
@router.post("/users/", response_model=UserResponse, status_code=201)
async def create_user(user: UserCreate, db: Session = Depends(get_db)):
return user_service.create_user(db, user)
```
## 任务边界限制
### 包含范围 ✅
- Users 和 Products 完整 CRUD API
- 数据库持久化操作
- 基础数据验证和错误处理
- API 文档自动更新
- 基础功能测试
### 排除范围 ❌
- 用户认证和授权系统
- API 限流和缓存机制
- 分页、排序、过滤功能
- 文件上传处理
- 复杂业务逻辑验证
- 性能优化和索引调优
## 验收标准
### 功能验收标准
#### Users API 验收
- [ ] **POST /api/v1/users/**
- 成功创建返回 201 状态码
- 返回创建的用户信息
- 数据持久化到数据库
- 邮箱唯一性验证
- 用户名唯一性验证
- [ ] **PUT /api/v1/users/{id}**
- 成功更新返回 200 状态码
- 支持部分字段更新
- 数据持久化到数据库
- 用户不存在返回 404
- [ ] **DELETE /api/v1/users/{id}**
- 成功删除返回 204 状态码
- 数据从数据库中删除
- 用户不存在返回 404
#### Products API 验收
- [ ] **POST /api/v1/products/**
- 成功创建返回 201 状态码
- 返回创建的产品信息
- 数据持久化到数据库
- 价格和库存数据验证
- [ ] **PUT /api/v1/products/{id}**
- 成功更新返回 200 状态码
- 支持部分字段更新
- 数据持久化到数据库
- 产品不存在返回 404
- [ ] **DELETE /api/v1/products/{id}**
- 成功删除返回 204 状态码
- 数据从数据库中删除
- 产品不存在返回 404
### 数据验证验收
- [ ] 必填字段验证 (422 状态码)
- [ ] 数据类型验证 (422 状态码)
- [ ] 邮箱格式验证 (422 状态码)
- [ ] 唯一性约束验证 (409 状态码)
- [ ] 数值范围验证 (价格 > 0)
### 错误处理验收
- [ ] 资源不存在: 404 Not Found
- [ ] 数据验证失败: 422 Unprocessable Entity
- [ ] 唯一性冲突: 409 Conflict
- [ ] 数据库连接错误: 500 Internal Server Error
- [ ] 详细错误信息返回
### 技术质量验收
- [ ] 所有内存假数据已移除
- [ ] 数据库会话正确管理
- [ ] 无内存或连接泄漏
- [ ] 事务处理正确实现
- [ ] 代码符合现有规范
- [ ] API 文档自动生成正确
### 集成验收
- [ ] 现有 GET API 正常工作
- [ ] 应用启动无错误
- [ ] 数据库连接正常
- [ ] 与现有代码无冲突
- [ ] 环境配置兼容
## 确认的关键假设
1. **数据库状态**: MySQL 数据库 `fast_demo` 已存在且可连接
2. **表结构**: SQLAlchemy 模型与数据库表结构一致
3. **权限**: 数据库用户具有完整 CRUD 权限
4. **环境**: 开发环境配置正确且稳定
5. **依赖**: 所有必要的 Python 包已安装
## 风险评估
### 低风险 🟢
- API 端点实现 (基于现有模式)
- 数据库 CRUD 操作 (SQLAlchemy 标准操作)
- 基础数据验证 (Pydantic 支持)
### 中等风险 🟡
- 数据库事务管理 (需要正确的异常处理)
- 唯一性约束冲突处理 (需要适当的错误映射)
### 已缓解风险 ✅
- 数据库连接问题 (已验证连接正常)
- 模型定义不匹配 (已确认 SQLAlchemy 模型)
- 配置环境问题 (已确认多环境配置)
---
**共识确认**: ✅ 所有关键决策点已确认
**创建时间**: 2025-09-28
**最后更新**: 2025-09-28
**状态**: 已批准,准备进入架构阶段