# 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!"
  }'
```
