docs: align API doc with backend TypeB

This commit is contained in:
zetaloop
2026-02-28 07:26:26 +08:00
parent 527d08fb81
commit 411ee8293d
+36 -34
View File
@@ -8,34 +8,30 @@
## 2. 全局约定
### 2.1 认证与授权 (Auth)
- 采用 JWT (JSON Web Token) 进行无状态认证。
- 客户端在请求头中携带 Token`Authorization: Bearer <access_token>`
- 刷新令牌 (Refresh Token) 存储在 HttpOnly Cookie 中,用于获取新的 Access Token
- 采用 Cookie `JToken` 进行认证(Phase 2 接入后端时实现)
- Phase 1 阶段仅为纯前端 Mock,不涉及真实后端交互
- 接口权限标识:
- 🔒:需要登录认证。
- 🛡️:需要管理员权限。
### 2.2 错误响应格式
所有失败的请求均返回统一的 JSON 结构,并附带 HTTP 状态码(如 400, 401, 403, 404, 500)。
```json
{
"ok": false,
"reasonCode": "AUTH_REQUIRED",
"message": "请先登录"
"code": 401,
"msg": "请先登录"
}
```
**ReasonCode 枚举值**
- `AUTH_REQUIRED`: 未登录或 Token 失效
- `NOT_FOUND`: 资源不存在
- `NOT_PARTICIPANT`: 非参与者(无权操作该订单/会话等)
- `ROLE_FORBIDDEN`: 角色权限不足
- `INVALID_STATUS`: 状态不合法(如订单状态不允许当前操作)
- `ALREADY_DONE`: 操作已完成(如已评价)
- `DISPUTE_LOCKED`: 处于争议状态,操作被锁定
- `PAYMENT_FAILED`: 支付失败或余额不足
- `IDEMPOTENT_NOOP`: 幂等操作(重复请求,无副作用)
- `VALIDATION_FAILED`: 参数校验失败
- `DUPLICATE_REQUEST`: 重复请求
**常见错误码 (code)**
- `401`: 未登录或 Token 失效
- `403`: 角色权限不足或非参与者
- `404`: 资源不存在
- `400`: 参数校验失败、状态不合法、重复请求等
- `500`: 服务器内部错误
### 2.3 分页规范
采用 `offset``limit` 进行分页(与前端 `SearchResponse` 保持一致)。
@@ -52,11 +48,13 @@
}
```
### 2.4 文件上传
- **端点**: `POST /api/v1/upload`
### 2.4 文件上传与访问
- **上传端点**: `POST /api/v1/upload`
- **Content-Type**: `multipart/form-data`
- **参数**: `file` (文件), `type` (枚举: `avatar`, `chat`, `post`, `verification`, `dispute`)
- **响应**: 返回文件的 CDN URL。
- **响应**: 返回文件的 CDN URL 或文件 ID
- **访问端点**: `GET /api/v1/files/:fileId` (获取文件内容)
### 2.5 时间戳格式
所有时间字段均采用 ISO 8601 格式的 UTC 时间字符串,例如:`2024-03-20T12:00:00.000Z`
@@ -67,6 +65,10 @@
- `owner`: 店铺店长
- `admin`: 平台管理员(隐藏角色,用于后台管理)
### 2.7 ID 规范
所有 ID 均由后端使用 Snowflake 算法生成,类型为 `int64`。在前端交互和 JSON 序列化时,统一作为 `string` 处理,以避免精度丢失。
---
## 3. 数据模型
@@ -76,12 +78,12 @@
| ------------------ | ---------- | ---------------------------------------------------- |
| id | string | 用户唯一标识 |
| username | string | 登录用户名 |
| email | string | 邮箱地址 (可选) |
| nickname | string | 昵称 |
| avatar | string | 头像 URL |
| role | UserRole | 当前激活的角色 |
| verifiedRoles | UserRole[] | 已认证的角色列表 |
| verificationStatus | object | 各角色的认证状态 (`pending`, `approved`, `rejected`) |
| phone | string | 手机号 (可选) |
| bio | string | 个人简介 (可选) |
| createdAt | string | 注册时间 |
@@ -285,12 +287,12 @@
| 方法 | 路径 | 权限 | 说明 |
| ------ | ------------------------------------- | ---- | --------------------------------- |
| POST | `/auth/register` | | 用户注册 |
| POST | `/auth/login` | | 用户登录,返回 JWT |
| POST | `/auth/logout` | 🔒 | 退出登录,清除 Cookie |
| POST | `/auth/refresh` | | 刷新 Token |
| POST | `/auth/forgot-password` | | 忘记密码(发送验证码) |
| POST | `/auth/reset-password` | | 重置密码 |
| POST | `/auth/register` | | 用户注册 (username + email + password + vcode) |
| POST | `/auth/login` | | 用户登录 (username + password) |
| POST | `/auth/logout` | 🔒 | 退出登录,清除 Cookie |
| POST | `/auth/forgot-password/send` | | 忘记密码(发送验证码到邮箱) |
| POST | `/auth/reset-password` | | 重置密码 (email + vcode + newPassword) |
| POST | `/email/verification-code/send` | | 发送邮箱验证码 |
| GET | `/users/me` | 🔒 | 获取当前登录用户信息 |
| PUT | `/users/me` | 🔒 | 更新个人资料 (昵称, 头像, 简介等) |
| POST | `/users/me/switch-role` | 🔒 | 切换当前激活角色 |
@@ -303,22 +305,23 @@
| DELETE | `/users/:id/follow` | 🔒 | 取消关注用户 |
**请求示例:登录**
```json
// POST /api/v1/auth/login
{
"phone": "13800138000",
"password": "...",
"remember": true
"username": "zhangsan",
"password": "..."
}
```
**响应示例:登录成功**
```json
{
"accessToken": "eyJhbGciOiJIUzI1NiIs...",
"refreshToken": "dGhpcyBpcyBhIHJlZnJlc2g...",
"user": {
"id": "u1",
"username": "zhangsan",
"email": "zhangsan@example.com",
"nickname": "张三",
"avatar": "https://cdn.juwan.com/avatars/u1.jpg",
"role": "consumer",
@@ -497,7 +500,6 @@
**响应示例:订单创建成功**
```json
{
"ok": true,
"order": {
"id": "ord-20240320-001",
"consumerId": "u1",