# 工具服务模块 API 文档

## 概述

工具服务模块提供第三方数据采集工具的调用功能，支持抖音、小红书、微信公众号等平台的数据获取。

## 认证方式

工具接口支持两种认证方式：

### 1. JWT Token（Web端）
登录后自动使用，适合Web前端调用。

### 2. API Key（开发者）
在请求头添加 `Authorization: Bearer {your_api_key}`，适合后端服务或脚本调用。

**获取API Key**：
1. 登录系统
2. 进入个人中心 -> API密钥管理
3. 生成API密钥

**调用示例**：
```bash
curl -X POST "https://api.1818ai.com/user/tools/call/douyin_user_videos" \
  -H "Authorization: Bearer ak_1234567890abcdef1234567890abcdef" \
  -H "Content-Type: application/json" \
  -d '{"sec_user_id": "MS4wLjABAAAA...", "max_cursor": 0, "count": 20}'
```

## 功能特性

1. **工具配置管理**：管理员可配置每个工具的积分消耗
2. **积分扣除**：用户调用工具时自动扣除积分
3. **调用记录**：完整记录每次工具调用
4. **使用统计**：按天统计每个工具的使用次数

## 数据库表

### tool_config（工具配置表）
| 字段 | 类型 | 说明 |
|------|------|------|
| id | bigint | 主键 |
| tool_code | varchar(64) | 工具编码（唯一） |
| tool_name | varchar(128) | 工具名称 |
| category | varchar(32) | 分类（douyin/xiaohongshu/wechat_mp） |
| api_endpoint | varchar(256) | API端点路径 |
| points_cost | int | 调用消耗积分 |
| is_enabled | tinyint | 是否启用 |

### tool_usage_log（调用记录表）
| 字段 | 类型 | 说明 |
|------|------|------|
| id | bigint | 主键 |
| usage_no | varchar(64) | 调用流水号 |
| user_id | bigint | 用户ID |
| tool_code | varchar(64) | 工具编码 |
| points_cost | int | 消耗积分 |
| status | varchar(20) | 状态（success/failed） |
| create_time | datetime | 调用时间 |

### tool_usage_daily_stats（每日统计表）
| 字段 | 类型 | 说明 |
|------|------|------|
| stats_date | date | 统计日期 |
| tool_code | varchar(64) | 工具编码 |
| total_calls | int | 调用总次数 |
| success_calls | int | 成功次数 |
| total_points_cost | int | 消耗总积分 |

---

## 用户端 API

### 1. 获取工具列表
```
GET /user/tools/list
```

**响应示例：**
```json
{
  "code": 200,
  "message": "success",
  "data": [
    {
      "toolCode": "douyin_user_videos",
      "toolName": "获取用户主页视频",
      "category": "douyin",
      "description": "根据sec_user_id获取用户发布的视频列表",
      "pointsCost": 5
    }
  ]
}
```

### 2. 按分类获取工具
```
GET /user/tools/list/{category}
```
- category: douyin / xiaohongshu / wechat_mp

### 3. 调用工具
```
POST /user/tools/call/{toolCode}
```

**请求示例（抖音获取用户视频）：**
```json
{
  "sec_user_id": "MS4wLjABAAAAnxkX6qJBxkyBnNhE__dpuYxdNFzihx1UoxfoKKkAlO8",
  "max_cursor": 0,
  "count": 20
}
```

**响应示例：**
```json
{
  "code": 200,
  "message": "success",
  "data": {
    "usageNo": "TU1735789012345ABCD1234",
    "pointsCost": 5,
    "remainingPoints": 95,
    "data": {
      "aweme_list": [...],
      "max_cursor": 1528366024000,
      "has_more": 1
    }
  }
}
```

### 4. 获取调用记录
```
GET /user/tools/usage/logs?page=1&size=10&toolCode=douyin_user_videos
```

---

## 管理端 API

### 1. 获取所有工具配置
```
GET /admin/tools/configs
```

### 2. 创建工具配置
```
POST /admin/tools/configs
```

**请求示例：**
```json
{
  "toolCode": "douyin_user_videos",
  "toolName": "获取用户主页视频",
  "category": "douyin",
  "description": "根据sec_user_id获取用户发布的视频列表",
  "apiEndpoint": "/api/v1/douyin/app/v3/fetch_user_post_videos",
  "requestMethod": "GET",
  "pointsCost": 5,
  "isEnabled": 1,
  "sortOrder": 1
}
```

### 3. 更新积分消耗
```
PATCH /admin/tools/configs/{id}/points-cost?pointsCost=10
```

### 4. 启用/禁用工具
```
PATCH /admin/tools/configs/{id}/status?isEnabled=0
```

### 5. 获取统计概览
```
GET /admin/tools/stats/info
```

**响应示例：**
```json
{
  "code": 200,
  "data": {
    "totalTools": 8,
    "enabledTools": 8,
    "todayCalls": 156,
    "todayPointsCost": 780
  }
}
```

### 6. 获取统计汇总
```
GET /admin/tools/stats/summary?startDate=2026-01-01&endDate=2026-01-02
```

### 7. 获取每日统计
```
GET /admin/tools/stats/daily?startDate=2026-01-01&endDate=2026-01-07&toolCode=douyin_user_videos
```

---

## 配置说明

### application.yml 配置
```yaml
tikhub:
  api:
    base-url: https://api.tikhub.io
    key: YOUR_TIKHUB_API_KEY
```

### 初始化数据库
执行 `src/main/resources/sql/tool_tables.sql` 创建表和初始数据。

---

## 预置工具列表

| 工具编码 | 名称 | 分类 | 积分 |
|---------|------|------|------|
| douyin_user_videos | 获取用户主页视频 | douyin | 5 |
| douyin_video_by_share | 根据分享链接获取视频 | douyin | 3 |
| xiaohongshu_user_notes | 获取用户笔记列表 | xiaohongshu | 5 |
| xiaohongshu_search_notes | 搜索笔记 | xiaohongshu | 5 |
| xiaohongshu_note_detail | 获取笔记详情 | xiaohongshu | 3 |
| wechat_mp_article_list | 获取文章列表 | wechat_mp | 5 |
| wechat_mp_article_json | 获取文章详情(JSON) | wechat_mp | 10 |
| wechat_mp_article_html | 获取文章详情(HTML) | wechat_mp | 100 |
