5.8 KiB
5.8 KiB
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 版本控制
- 维持现有中间件配置
依赖注入集成
# 复用现有数据库依赖
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 正常工作
- 应用启动无错误
- 数据库连接正常
- 与现有代码无冲突
- 环境配置兼容
确认的关键假设
- 数据库状态: MySQL 数据库
fast_demo已存在且可连接 - 表结构: SQLAlchemy 模型与数据库表结构一致
- 权限: 数据库用户具有完整 CRUD 权限
- 环境: 开发环境配置正确且稳定
- 依赖: 所有必要的 Python 包已安装
风险评估
低风险 🟢
- API 端点实现 (基于现有模式)
- 数据库 CRUD 操作 (SQLAlchemy 标准操作)
- 基础数据验证 (Pydantic 支持)
中等风险 🟡
- 数据库事务管理 (需要正确的异常处理)
- 唯一性约束冲突处理 (需要适当的错误映射)
已缓解风险 ✅
- 数据库连接问题 (已验证连接正常)
- 模型定义不匹配 (已确认 SQLAlchemy 模型)
- 配置环境问题 (已确认多环境配置)
共识确认: ✅ 所有关键决策点已确认 创建时间: 2025-09-28 最后更新: 2025-09-28 状态: 已批准,准备进入架构阶段