# 工作流更新接口文档

## 接口概述
工作流更新接口支持完整的工作流信息更新，包括基本信息、数据包和演示视频的更新。

## 接口信息
- **请求方法**: `PUT`
- **请求路径**: `/user/content/workflows/{id}`
- **接口描述**: 更新工作流信息，包括元数据、数据包和演示视频

## 请求参数

### 路径参数
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| id | Long | 是 | 工作流数据库ID |

### 请求体 (WorkflowUpdateRequest)
```json
{
  "name": "工作流名称",
  "description": "工作流描述",
  "coverUrl": "封面图URL",
  "category": "工作流分类",
  "isPublic": 1,
  "fullAccessRole": 0,
  "copyAccessRole": 0,
  "price": 29.99,
  "isFree": 0,
  "data": "{\"nodes\": [], \"edges\": []}",
  "dataFileUrl": "https://oss.example.com/workflow-package.zip",
  "vodVideoId": "vod-abc123",
  "videoId": "vod-abc123"
}
```

### 请求体参数说明

#### 基本信息
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| name | String | 否 | 工作流名称 |
| description | String | 否 | 工作流描述 |
| coverUrl | String | 否 | 封面图片URL |
| category | String | 否 | 工作流分类 |

#### 权限与定价
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| isPublic | Integer | 否 | 是否公开 (0:不公开, 1:公开) |
| fullAccessRole | Integer | 否 | 查看完整数据所需最低角色 (0-3) |
| copyAccessRole | Integer | 否 | 复制所需最低角色 (0-3) |
| price | BigDecimal | 否 | 价格 |
| isFree | Integer | 否 | 是否免费 (0:收费, 1:免费) |

#### 数据包相关 (新增)
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| data | String | 否 | 工作流核心逻辑JSON字符串 |
| dataFileUrl | String | 否 | 工作流依赖文件地址（数据包URL，例如OSS地址） |

#### 演示视频相关 (新增)
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| vodVideoId | String | 否 | 关联预览视频ID（阿里云VOD视频ID） |
| videoId | String | 否 | 关联预览视频ID（兼容前端字段名，与vodVideoId同步） |

### 角色权限说明
| 角色值 | 角色名称 | 说明 |
|--------|----------|------|
| 0 | 游客 | 未登录用户 |
| 1 | 普通用户 | 已注册登录用户 |
| 2 | VIP用户 | 付费会员用户 |
| 3 | 管理员 | 系统管理员 |

## 响应结果

### 成功响应
```json
{
  "code": 200,
  "message": "更新成功",
  "data": null
}
```

### 失败响应
```json
{
  "code": 400,
  "message": "更新失败",
  "data": null
}
```

## 使用示例

### 基本信息更新
```bash
curl -X 'PUT' \
  'http://localhost:8081/user/content/workflows/1' \
  -H 'accept: */*' \
  -H 'Content-Type: application/json' \
  -d '{
  "name": "新的工作流名称",
  "description": "更新的工作流描述",
  "coverUrl": "https://example.com/new-cover.jpg",
  "category": "数据分析",
  "isPublic": 1,
  "fullAccessRole": 1,
  "copyAccessRole": 2,
  "price": 49.99,
  "isFree": 0
}'
```

### 数据包更新
```bash
curl -X 'PUT' \
  'http://localhost:8081/user/content/workflows/1' \
  -H 'accept: */*' \
  -H 'Content-Type: application/json' \
  -d '{
  "data": "{\"nodes\": [{\"id\": \"1\", \"type\": \"input\"}], \"edges\": []}",
  "dataFileUrl": "https://oss.example.com/workflows/updated-package.zip"
}'
```

### 演示视频更新
```bash
curl -X 'PUT' \
  'http://localhost:8081/user/content/workflows/1' \
  -H 'accept: */*' \
  -H 'Content-Type: application/json' \
  -d '{
  "vodVideoId": "vod-new123",
  "videoId": "vod-new123"
}'
```

### 完整更新
```bash
curl -X 'PUT' \
  'http://localhost:8081/user/content/workflows/1' \
  -H 'accept: */*' \
  -H 'Content-Type: application/json' \
  -d '{
  "name": "完整更新的工作流",
  "description": "这是一个完整更新的示例",
  "coverUrl": "https://example.com/complete-cover.jpg",
  "category": "机器学习",
  "isPublic": 1,
  "fullAccessRole": 1,
  "copyAccessRole": 2,
  "price": 99.99,
  "isFree": 0,
  "data": "{\"nodes\": [{\"id\": \"1\", \"type\": \"input\"}, {\"id\": \"2\", \"type\": \"process\"}], \"edges\": [{\"source\": \"1\", \"target\": \"2\"}]}",
  "dataFileUrl": "https://oss.example.com/workflows/complete-package.zip",
  "vodVideoId": "vod-complete123",
  "videoId": "vod-complete123"
}'
```

## 注意事项

1. **权限验证**: 只有工作流的所有者可以更新工作流信息
2. **部分更新**: 所有字段都是可选的，只更新提供的字段
3. **数据包更新**: 
   - `data` 字段存储工作流的核心逻辑，通常是JSON格式
   - `dataFileUrl` 存储工作流依赖文件的URL地址
   - 两个字段可以独立更新
4. **演示视频更新**:
   - `vodVideoId` 和 `videoId` 字段保持同步
   - 支持阿里云VOD视频服务
5. **⚠️ 审核状态重置**: 
   - **更新后工作流将自动重置为待审核状态 (auditStatus = 0)**
   - 这与课程更新逻辑保持一致，确保内容变更需要重新审核
   - 用户需要等待管理员审核通过后才能正常展示
6. **权限角色**: fullAccessRole 和 copyAccessRole 决定了不同用户的访问权限

## 扩展功能说明

相比之前的版本，此接口新增了以下功能：

### 🆕 数据包管理
- 支持更新工作流核心逻辑JSON (`data`)
- 支持更新工作流依赖文件URL (`dataFileUrl`)
- 适用于工作流数据包的版本更新

### 🆕 演示视频管理  
- 支持更新预览视频ID (`vodVideoId`)
- 兼容前端字段名 (`videoId`)
- 支持阿里云VOD视频服务

这些扩展功能解决了之前接口无法更新工作流核心内容和演示视频的问题，使得工作流更新功能更加完整。