# 数据库迁移说明 - 模板市场功能

## 📋 概述

模板市场功能需要创建3个新的数据库表：
1. `workflow_templates` - 工作流模板表
2. `template_ratings` - 模板评分表
3. `template_favorites` - 模板收藏表

## 🔧 迁移方式

### 方式一：执行SQL脚本（推荐）

**SQL脚本位置**: `backend/create_template_market_tables.sql`

**执行命令**:
```bash
# 使用MySQL客户端
mysql -h [数据库地址] -u [用户名] -p [数据库名] < backend/create_template_market_tables.sql

# 例如（根据您的配置）:
mysql -h gz-cynosdbmysql-grp-d26pzce5.sql.tencentcdb.com -P 24936 -u root -p agent_db < backend/create_template_market_tables.sql
```

### 方式二：重启后端服务（自动创建）

如果后端服务配置了自动创建表（使用 `Base.metadata.create_all`），重启服务后会自动创建表。

**重启命令**:
```bash
# Docker方式
docker-compose restart backend

# 或直接重启uvicorn进程
```

### 方式三：通过Python脚本创建

```python
from app.core.database import engine, Base
from app.models.workflow_template import WorkflowTemplate, TemplateRating, TemplateFavorite

# 创建表
Base.metadata.create_all(bind=engine)
```

## ✅ 验证表是否创建成功

### 方法一：通过MySQL客户端查询

```sql
SHOW TABLES LIKE 'workflow_template%';
SHOW TABLES LIKE 'template_%';
```

应该看到：
- `workflow_templates`
- `template_ratings`
- `template_favorites`

### 方法二：通过API测试

```bash
# 登录获取token
curl -X POST http://101.43.95.130:8037/api/v1/auth/login \
  -d "username=test_user&password=test_password123"

# 测试模板市场API
curl -X GET http://101.43.95.130:8037/api/v1/template-market \
  -H "Authorization: Bearer <token>"
```

如果返回200状态码和空数组 `[]`，说明表已创建成功。

## 📊 表结构说明

### workflow_templates（工作流模板表）

| 字段 | 类型 | 说明 |
|------|------|------|
| id | CHAR(36) | 模板ID（主键） |
| name | VARCHAR(100) | 模板名称 |
| description | TEXT | 模板描述 |
| category | VARCHAR(50) | 分类 |
| tags | JSON | 标签列表 |
| nodes | JSON | 节点配置 |
| edges | JSON | 边配置 |
| thumbnail | VARCHAR(500) | 缩略图URL |
| is_public | BOOLEAN | 是否公开 |
| is_featured | BOOLEAN | 是否精选 |
| view_count | INT | 查看次数 |
| use_count | INT | 使用次数 |
| rating_count | INT | 评分次数 |
| rating_avg | FLOAT | 平均评分 |
| user_id | CHAR(36) | 创建者ID（外键） |
| created_at | DATETIME | 创建时间 |
| updated_at | DATETIME | 更新时间 |

### template_ratings（模板评分表）

| 字段 | 类型 | 说明 |
|------|------|------|
| id | CHAR(36) | 评分ID（主键） |
| template_id | CHAR(36) | 模板ID（外键） |
| user_id | CHAR(36) | 用户ID（外键） |
| rating | INT | 评分（1-5） |
| comment | TEXT | 评论 |
| created_at | DATETIME | 创建时间 |
| updated_at | DATETIME | 更新时间 |

**唯一约束**: `(template_id, user_id)` - 每个用户对每个模板只能评分一次

### template_favorites（模板收藏表）

| 字段 | 类型 | 说明 |
|------|------|------|
| id | CHAR(36) | 收藏ID（主键） |
| template_id | CHAR(36) | 模板ID（外键） |
| user_id | CHAR(36) | 用户ID（外键） |
| created_at | DATETIME | 创建时间 |

**唯一约束**: `(template_id, user_id)` - 每个用户对每个模板只能收藏一次

## 🐛 常见问题

### 问题1: 表创建失败 - 外键约束错误

**原因**: `users` 表不存在或结构不匹配

**解决**: 确保 `users` 表已存在且 `id` 字段类型为 `CHAR(36)`

### 问题2: JSON字段不支持

**原因**: MySQL版本过低（需要5.7+）

**解决**: 升级MySQL版本或使用 `TEXT` 类型替代 `JSON`

### 问题3: 表已存在错误

**原因**: 表已经创建过

**解决**: 使用 `CREATE TABLE IF NOT EXISTS` 可以安全地重复执行

## 📝 迁移检查清单

- [ ] SQL脚本已创建
- [ ] 执行SQL脚本或重启后端服务
- [ ] 验证表是否创建成功
- [ ] 测试模板市场API
- [ ] 测试前端模板市场页面

## 🎯 迁移完成后

迁移完成后，您可以：

1. **使用模板市场功能**:
   - 分享工作流模板
   - 搜索和浏览模板
   - 收藏和评分模板
   - 使用模板创建工作流

2. **使用批量操作功能**（不依赖新表）:
   - 批量执行工作流
   - 批量导出工作流
   - 批量删除工作流

---

**SQL脚本位置**: `backend/create_template_market_tables.sql`  
**最后更新**: 2024年1月17日
