这份文档旨在为 AI 助手提供关于本项目(电商购物车后端服务)的上下文、技术栈约束和开发规范。请在生成代码、重构或回答问题时严格遵循以下指南。
本项目是一个基于 Python 的高性能电商购物车微服务。
- 核心功能:管理用户的购物车会话,包括添加商品、更新数量、移除商品、计算总价、持久化存储。
- 业务特点:支持匿名用户(基于 Session/Device ID)和登录用户;高并发读写;数据强一致性。
请严格使用以下指定的版本和库:
- 编程语言: Python 3.10+
- Web 框架: FastAPI (最新稳定版)
- 数据库: PostgreSQL 15+
- ORM / 数据库驱动:
SQLAlchemy2.0+ (必须使用 Async 模式)asyncpg(作为底层驱动)Alembic(用于数据库迁移)
- 数据验证: Pydantic v2
- 依赖管理: Poetry 或 pip (requirements.txt)
购物车模块主要涉及两张表。AI 在生成 SQL 或 Model 时应遵循此设计:
| 字段名 | 类型 | 约束 | 说明 |
|---|---|---|---|
id |
UUID | PK | 购物车唯一标识 |
user_id |
UUID | Nullable, Index | 关联用户 ID (未登录为空) |
status |
VARCHAR | Default 'active' | 状态: active, merged, abandoned, converted |
created_at |
DATETIME | Not Null | 创建时间 |
updated_at |
DATETIME | Not Null | 更新时间 |
| 字段名 | 类型 | 约束 | 说明 |
|---|---|---|---|
id |
UUID | PK | 明细项 ID |
cart_id |
UUID | FK -> carts.id | 关联购物车 |
product_id |
VARCHAR | Not Null | 商品 SKU ID |
quantity |
INTEGER | Check > 0 | 购买数量 |
unit_price |
DECIMAL | Not Null | 加入时的单价 (用于价格快照/变动提醒) |
added_at |
DATETIME | Not Null | 加入时间 |
约束: (cart_id, product_id) 应建立联合唯一索引,避免重复行。
所有接口应遵循 RESTful 风格,路径前缀 /api/v1。
- GET
/carts/{cart_id}- 获取购物车详情(包含所有商品项和计算后的总价)。
- POST
/carts- 创建新购物车(通常在添加第一个商品时隐式调用,或显式初始化)。
- POST
/carts/{cart_id}/items- 添加商品。如果商品已存在,则增加数量。
- Body:
{ "product_id": "...", "quantity": 1 }
- PATCH
/carts/{cart_id}/items/{item_id}- 更新商品数量。
- Body:
{ "quantity": 5 }
- DELETE
/carts/{cart_id}/items/{item_id}- 移除单个商品。
- DELETE
/carts/{cart_id}- 清空购物车。
- POST
/carts/{cart_id}/merge- (可选) 用户登录后,将匿名购物车合并到用户购物车。
- 所有 I/O 操作(数据库查询、HTTP 请求)必须使用
async/await。 - FastAPI 路径操作函数定义为
async def。
- 必须使用 Python 类型提示。
- 返回类型应使用 Pydantic Model 进行定义,例如
response_model=CartSchema。
- 使用 FastAPI 的
HTTPException抛出错误。 - 常见错误码:
404 Not Found: 购物车或商品不存在。400 Bad Request: 库存不足或参数错误。401 Unauthorized: 越权访问他人购物车。
app/
├── api/
│ ├── v1/
│ │ └── endpoints/
│ │ └── cart.py # 路由层
├── core/ # 配置、安全、常量
├── db/ # 数据库连接 session
├── models/ # SQLAlchemy ORM 模型
│ └── cart.py
├── schemas/ # Pydantic 数据模型 (Request/Response)
│ └── cart.py
├── services/ # 业务逻辑层 (CRUD 操作)
│ └── cart_service.py
└── main.py