# 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 **状态**: 已批准,准备进入架构阶段