200 lines
4.4 KiB
Markdown
200 lines
4.4 KiB
Markdown
# API 文档
|
||
|
||
## 用户管理接口
|
||
|
||
### 创建用户账户
|
||
|
||
#### 管理员创建用户账户
|
||
|
||
**接口地址:** `POST /api/admin/accounts`
|
||
|
||
**请求头:**
|
||
```
|
||
Content-Type: application/json
|
||
Authorization: Bearer {token}
|
||
```
|
||
|
||
**请求参数:**
|
||
```json
|
||
{
|
||
"userType": "ADMIN", // 必填,用户类型:ADMIN 或 AGENT
|
||
"username": "newuser", // 必填,用户名,3-64字符,只能包含字母、数字、下划线
|
||
"password": "123456", // 必填,密码,6-128字符
|
||
"status": "ENABLED", // 可选,状态:ENABLED 或 DISABLED,默认ENABLED
|
||
"pointsBalance": 0 // 可选,积分余额(仅AGENT类型),默认0
|
||
}
|
||
```
|
||
|
||
**成功响应(200):**
|
||
```json
|
||
{
|
||
"id": 2,
|
||
"userType": "ADMIN",
|
||
"username": "newuser",
|
||
"status": "ENABLED",
|
||
"pointsBalance": 0,
|
||
"createdAt": "2025-08-24T18:30:00.000",
|
||
"updatedAt": "2025-08-24T18:30:00.000"
|
||
}
|
||
```
|
||
|
||
**错误响应:**
|
||
|
||
**400 Bad Request - 参数验证失败:**
|
||
```json
|
||
{
|
||
"timestamp": "2025-08-24T18:30:00.000",
|
||
"status": 400,
|
||
"error": "Bad Request",
|
||
"message": "Validation failed",
|
||
"details": [
|
||
{
|
||
"field": "username",
|
||
"message": "用户名长度必须在3-64字符之间"
|
||
},
|
||
{
|
||
"field": "password",
|
||
"message": "密码长度必须在6-128字符之间"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
**409 Conflict - 用户名已存在:**
|
||
```json
|
||
{
|
||
"timestamp": "2025-08-24T18:30:00.000",
|
||
"status": 409,
|
||
"error": "Conflict",
|
||
"message": "用户名已存在"
|
||
}
|
||
```
|
||
|
||
**401 Unauthorized - 未授权:**
|
||
```json
|
||
{
|
||
"timestamp": "2025-08-24T18:30:00.000",
|
||
"status": 401,
|
||
"error": "Unauthorized",
|
||
"message": "访问被拒绝"
|
||
}
|
||
```
|
||
|
||
**403 Forbidden - 权限不足:**
|
||
```json
|
||
{
|
||
"timestamp": "2025-08-24T18:30:00.000",
|
||
"status": 403,
|
||
"error": "Forbidden",
|
||
"message": "权限不足,无法创建用户"
|
||
}
|
||
```
|
||
|
||
#### 用户自注册接口
|
||
|
||
**接口地址:** `POST /api/users`
|
||
|
||
**请求头:**
|
||
```
|
||
Content-Type: application/json
|
||
```
|
||
|
||
**请求参数:**
|
||
```json
|
||
{
|
||
"userType": "AGENT", // 必填,用户类型:只能为 AGENT
|
||
"username": "newagent", // 必填,用户名,3-64字符
|
||
"password": "123456", // 必填,密码,6-128字符
|
||
"pointsBalance": 0 // 可选,积分余额,默认0
|
||
}
|
||
```
|
||
|
||
**成功响应(201):**
|
||
```json
|
||
{
|
||
"id": 3,
|
||
"userType": "AGENT",
|
||
"username": "newagent",
|
||
"status": "ENABLED",
|
||
"pointsBalance": 0,
|
||
"createdAt": "2025-08-24T18:30:00.000",
|
||
"updatedAt": "2025-08-24T18:30:00.000"
|
||
}
|
||
```
|
||
|
||
### 接口说明
|
||
|
||
#### 权限要求
|
||
- **管理员接口** (`/api/admin/accounts`):需要管理员权限,可以创建ADMIN和AGENT类型用户
|
||
- **用户接口** (`/api/users`):公开接口,只能创建AGENT类型用户
|
||
|
||
#### 参数说明
|
||
|
||
**userType(用户类型):**
|
||
- `ADMIN`:管理员用户
|
||
- `AGENT`:代理用户
|
||
|
||
**username(用户名):**
|
||
- 长度:3-64字符
|
||
- 格式:只能包含字母、数字、下划线
|
||
- 唯一性:系统内必须唯一
|
||
|
||
**password(密码):**
|
||
- 长度:6-128字符
|
||
- 存储:使用BCrypt加密存储
|
||
- 安全:建议包含大小写字母、数字和特殊字符
|
||
|
||
**status(状态):**
|
||
- 可选值:`ENABLED`(启用)、`DISABLED`(禁用)
|
||
- 默认值:`ENABLED`
|
||
|
||
**pointsBalance(积分余额):**
|
||
- 仅AGENT类型用户可以设置
|
||
- 类型:整数,不能为负数
|
||
- 默认值:0
|
||
|
||
#### 业务规则
|
||
1. 用户名在系统内必须唯一
|
||
2. 密码使用BCrypt加密存储,无法解密
|
||
3. 创建成功后账户默认状态为ENABLED
|
||
4. 只有管理员可以创建ADMIN类型用户
|
||
5. 简化的用户模型,去除了角色和显示名称等复杂字段
|
||
|
||
#### 使用示例
|
||
|
||
**创建管理员用户:**
|
||
```bash
|
||
curl -X POST http://localhost:8080/api/admin/accounts \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer your-token" \
|
||
-d '{
|
||
"userType": "ADMIN",
|
||
"username": "admin001",
|
||
"password": "Admin123!"
|
||
}'
|
||
```
|
||
|
||
**创建代理用户:**
|
||
```bash
|
||
curl -X POST http://localhost:8080/api/admin/accounts \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer your-token" \
|
||
-d '{
|
||
"userType": "AGENT",
|
||
"username": "agent001",
|
||
"password": "Agent123!",
|
||
"pointsBalance": 1000
|
||
}'
|
||
```
|
||
|
||
**用户自注册:**
|
||
```bash
|
||
curl -X POST http://localhost:8080/api/users \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"userType": "AGENT",
|
||
"username": "newuser",
|
||
"password": "User123!"
|
||
}'
|
||
```
|