# 云函数测试项目

这是一个云函数服务端的测试项目，用于测试和演示云函数在不同 Content-Type 和 HTTP 方法下的处理能力。

## 项目结构

```
src/
├── json/          # JSON 请求处理函数
├── form/          # 表单提交处理函数
├── multipart/     # 文件上传处理函数
├── binary/        # 二进制数据处理函数
├── text/          # 文本数据处理函数
└── user/          # 用户相关函数
```

## 函数目录说明

### 1. JSON 请求处理 (`src/json/`)

**覆盖场景：**
- `Content-Type: application/json`
- `Content-Type: application/vnd.api+json` (带 +json 后缀)

**业务场景：** 用户数据查询和创建（模拟数据库操作）

#### 函数列表

| 函数名 | 路由路径 | HTTP 方法 | 功能说明 |
|--------|---------|----------|---------|
| `jsonUsersList` | `/json/users` | GET | 查询用户列表（支持分页） |
| `jsonUsersCreate` | `/json/users/create` | POST | 创建用户（JSON Body） |
| `jsonUsersBatch` | `/json/users/batch` | POST | 批量查询用户（支持 +json content-type） |

**示例请求：**
```bash
# GET 查询用户列表
GET /json/users?page=1&limit=10

# POST 创建用户
POST /json/users/create
Content-Type: application/json
Body: { "name": "王五", "email": "wangwu@example.com", "age": 28 }

# POST 批量查询
POST /json/users/batch
Content-Type: application/vnd.api+json
Body: { "userIds": ["u001", "u002"] }
```

---

### 2. 表单提交处理 (`src/form/`)

**覆盖场景：**
- `Content-Type: application/x-www-form-urlencoded`

**业务场景：** 表单数据提交和处理（模拟表单提交到数据库）

#### 函数列表

| 函数名 | 路由路径 | HTTP 方法 | 功能说明 |
|--------|---------|----------|---------|
| `formSubmit` | `/form/submit` | POST | 提交表单数据 |
| `formSubmissions` | `/form/submissions` | GET | 查询表单提交记录 |

**示例请求：**
```bash
# POST 提交表单
POST /form/submit
Content-Type: application/x-www-form-urlencoded
Body: name=张三&email=zhangsan@example.com&message=这是一条留言

# GET 查询提交记录
GET /form/submissions?email=zhangsan@example.com
```

---

### 3. 文件上传处理 (`src/multipart/`)

**覆盖场景：**
- `Content-Type: multipart/form-data`

**业务场景：** 文件上传，模拟保存到数据库或 OSS

#### 函数列表

| 函数名 | 路由路径 | HTTP 方法 | 功能说明 |
|--------|---------|----------|---------|
| `multipartUpload` | `/multipart/upload` | POST | 上传文件（multipart/form-data） |
| `multipartFiles` | `/multipart/files` | GET | 查询文件列表 |

**功能特性：**
- 支持多种文件格式（Buffer、base64 字符串、包装对象）
- 模拟保存文件元数据到数据库
- 模拟上传文件到 OSS
- 返回文件访问 URL

**示例请求：**
```bash
# POST 上传文件
POST /multipart/upload
Content-Type: multipart/form-data
Body: FormData with file field

# GET 查询文件列表
GET /multipart/files?fileType=image/png
```

---

### 4. 二进制数据处理 (`src/binary/`)

**覆盖场景：**
- `Content-Type: application/octet-stream`

**业务场景：** 处理二进制文件（图片、文档等），模拟保存到数据库或 OSS

#### 函数列表

| 函数名 | 路由路径 | HTTP 方法 | 功能说明 |
|--------|---------|----------|---------|
| `binaryUpload` | `/binary/upload` | POST | 上传二进制文件 |
| `binaryFiles` | `/binary/files` | GET | 查询二进制文件信息 |

**功能特性：**
- 自动检测文件类型（JPEG、PNG、PDF 等）
- 通过文件头（Magic Number）识别文件格式
- 模拟保存到 OSS
- 图片文件自动生成缩略图（模拟）
- 保存文件元数据到数据库

**示例请求：**
```bash
# POST 上传二进制文件
POST /binary/upload
Content-Type: application/octet-stream
Body: <binary data>

# GET 查询文件信息
GET /binary/files?fileType=image/jpeg
```

---

### 5. 文本数据处理 (`src/text/`)

**覆盖场景：**
- `Content-Type: text/plain`
- `Content-Type: text/html`
- `Content-Type: text/xml`
- 默认 text（未指定 content-type）

**业务场景：** 处理文本数据，模拟日志记录、文本分析等

#### 函数列表

| 函数名 | 路由路径 | HTTP 方法 | 功能说明 |
|--------|---------|----------|---------|
| `textSubmit` | `/text/submit` | POST | 提交文本内容 |
| `textLogs` | `/text/logs` | GET | 查询文本日志 |
| `textHtml` | `/text/html` | POST | 处理 HTML 内容 |

**功能特性：**
- 文本分析（字数统计、字符统计、行数统计）
- 关键词提取
- HTML 解析（提取标题、链接）
- 日志记录和查询

**示例请求：**
```bash
# POST 提交文本
POST /text/submit
Content-Type: text/plain
Body: "这是一段文本内容"

# GET 查询日志
GET /text/logs?contentType=text/plain&limit=10

# POST 处理 HTML
POST /text/html
Content-Type: text/html
Body: "<html><body><h1>Hello</h1></body></html>"
```

---

### 6. 用户相关 (`src/user/`)

**业务场景：** 用户基本信息查询

#### 函数列表

| 函数名 | 路由路径 | HTTP 方法 | 功能说明 |
|--------|---------|----------|---------|
| `userProfile` | `/user/profile` | POST | 查询用户基本信息 |

**示例请求：**
```bash
# POST 查询用户信息
POST /user/profile
Body: { "userId": "u10001" }
```

---

## Content-Type 覆盖情况

本项目完整覆盖了以下 Content-Type 场景：

| Content-Type | 处理函数目录 | 说明 |
|-------------|------------|------|
| `application/json` | `json/` | JSON 数据请求 |
| `application/vnd.api+json` | `json/` | 带 +json 后缀的 JSON |
| `application/x-www-form-urlencoded` | `form/` | URL 编码表单数据 |
| `multipart/form-data` | `multipart/` | 多部分表单数据（文件上传） |
| `application/octet-stream` | `binary/` | 二进制数据流 |
| `text/plain` | `text/` | 纯文本 |
| `text/html` | `text/` | HTML 文本 |
| `text/xml` | `text/` | XML 文本 |
| 默认（未指定） | `text/` | 默认按 text/plain 处理 |

## HTTP 方法覆盖

- **GET**: 用于查询操作（列表查询、详情查询）
- **POST**: 用于创建操作（数据提交、文件上传）

## 日志功能

所有函数都包含详细的日志输出，包括：

- **函数调用开始日志**：记录函数调用时间、上下文 ID、事件 ID
- **参数日志**：记录请求参数和查询条件
- **处理过程日志**：记录数据处理的关键步骤
- **结果日志**：记录处理结果和返回数据
- **错误日志**：记录错误信息和失败原因

日志格式统一使用 `[函数名]` 前缀，便于日志过滤和追踪。

## 业务逻辑模拟

所有函数都模拟了真实的业务场景：

1. **数据库操作**：使用内存数组模拟数据库的增删改查
2. **文件存储**：模拟文件上传到 OSS，生成访问 URL
3. **数据验证**：参数校验、格式检查、业务规则验证
4. **错误处理**：统一的错误响应格式
5. **数据分析**：文本分析、文件类型检测等

## 配置说明

函数配置在 `agent-cloudbase-functions.json` 中定义，遵循以下规则：

- 每个函数一个目录
- 使用 `source: "index.js"` 映射函数入口
- 通过 `triggerPath` 定义路由路径
- 支持单实例多函数框架

## 使用说明

1. **启动开发服务器**：
   ```bash
   npm run dev
   ```

2. **测试函数**：
   使用 HTTP 客户端（如 Postman、curl）或云函数调试器调用各个路由

3. **查看日志**：
   函数执行时会输出详细的日志信息，便于调试和追踪

## 注意事项

- 本项目仅用于测试和演示，所有数据存储在内存中，重启后会丢失
- 文件上传功能仅模拟保存元数据，实际文件内容不会持久化存储
- 所有业务逻辑都是模拟实现，不包含真实的数据库或 OSS 操作
