# Operation 模块接口文档

## 基础 URL

所有接口的基础路径: `/api/operation/`

## 通用响应格式

所有接口都返回以下格式的响应：

```json
{
  "code": 200,  // 状态码，200表示成功
  "message": "操作成功",  // 操作结果描述
  "data": {}  // 数据内容，具体格式根据接口不同而变化
}
```

分页接口的响应格式：

```json
{
  "code": 200,
  "message": "获取数据成功",
  "data": {
    "count": 100,  // 总记录数
    "next": "http://example.com/api/operation/xxx/?page=2",  // 下一页链接，没有下一页则为null
    "previous": null,  // 上一页链接，没有上一页则为null
    "results": [],  // 当前页的数据列表
    "page": 1,  // 当前页码
    "pages": 10,  // 总页数
    "page_size": 10  // 每页记录数
  }
}
```

## 接口列表

### 1. 运营账号管理

#### 1.1 获取运营账号列表

- **URL**: `/operators/`
- **方法**: GET
- **参数**:
  - `page`: 页码，默认1
  - `page_size`: 每页记录数，默认10

- **响应示例**:
```json
{
  "code": 200,
  "message": "获取运营账号列表成功",
  "data": {
    "count": 10,
    "next": null,
    "previous": null,
    "results": [
      {
        "id": 1,
        "uuid": "550e8400-e29b-41d4-a716-446655440000",
        "username": "operator1",
        "real_name": "张三",
        "email": "zhangsan@example.com",
        "phone": "13800138000",
        "position": "editor",
        "department": "内容部",
        "is_active": true,
        "created_at": "2023-09-01T10:00:00Z",
        "updated_at": "2023-09-01T10:00:00Z"
      }
    ],
    "page": 1,
    "pages": 1,
    "page_size": 10
  }
}
```

#### 1.2 获取运营账号详情

- **URL**: `/operators/{id}/`
- **方法**: GET
- **响应示例**:
```json
{
  "code": 200,
  "message": "获取运营账号详情成功",
  "data": {
    "id": 1,
    "uuid": "550e8400-e29b-41d4-a716-446655440000",
    "username": "operator1",
    "real_name": "张三",
    "email": "zhangsan@example.com",
    "phone": "13800138000",
    "position": "editor",
    "department": "内容部",
    "is_active": true,
    "created_at": "2023-09-01T10:00:00Z",
    "updated_at": "2023-09-01T10:00:00Z"
  }
}
```

#### 1.3 创建运营账号

- **URL**: `/operators/`
- **方法**: POST
- **请求参数**:
```json
{
  "username": "operator1",
  "password": "password123",
  "real_name": "张三",
  "email": "zhangsan@example.com",
  "phone": "13800138000",
  "position": "editor",
  "department": "内容部"
}
```
- **响应示例**: 同详情接口

#### 1.4 更新运营账号

- **URL**: `/operators/{id}/`
- **方法**: PUT/PATCH
- **请求参数**: 同创建接口，PATCH 可部分更新
- **响应示例**: 同详情接口

#### 1.5 删除运营账号

- **URL**: `/operators/{id}/`
- **方法**: DELETE
- **响应示例**:
```json
{
  "code": 200,
  "message": "运营账号已停用",
  "data": null
}
```

### 2. 平台账号管理

#### 2.1 获取平台账号列表

- **URL**: `/platforms/`
- **方法**: GET
- **参数**:
  - `page`: 页码，默认1
  - `page_size`: 每页记录数，默认10

- **响应示例**:
```json
{
  "code": 200,
  "message": "获取平台账号列表成功",
  "data": {
    "count": 10,
    "next": null,
    "previous": null,
    "results": [
      {
        "id": 1,
        "operator": 1,
        "operator_name": "张三",
        "status": "active",
        "followers_count": 1000,
        "description": "测试账号",
        "tags": ["科技", "数码"],
        "profile_image": "https://example.com/image.jpg",
        "last_posting": "2023-09-01T10:00:00Z",
        "created_at": "2023-09-01T10:00:00Z",
        "updated_at": "2023-09-01T10:00:00Z",
        "last_login": "2023-09-01T10:00:00Z",
        "platforms": [
          {
            "platform_name": "youtube",
            "account_url": "https://youtube.com/channel/123",
            "account_id": "channel123",
            "account_name": "测试频道"
          }
        ],
        "name": "youtube"
      }
    ],
    "page": 1,
    "pages": 1,
    "page_size": 10
  }
}
```

#### 2.2 获取平台账号详情

- **URL**: `/platforms/{id}/`
- **方法**: GET
- **响应示例**: 类似列表但无分页

#### 2.3 创建平台账号

- **URL**: `/platforms/`
- **方法**: POST
- **请求参数**:
```json
{
  "operator": 1,
  "name": "Shizuku",
  "status": "active",
  "followers_count": 1000,
  "description": "测试频道",
  "tags": ["Vlogs", "Foodie"],
  "profile_image": "https://example.com/image.jpg",
  "platforms": [
    {
      "platform_name": "youtube",
      "account_name": "测试频道",
      "account_id": "channel123",
      "account_url": "https://youtube.com/channel/123"
    }
  ]
}
```
- **响应示例**: 同详情接口

#### 2.4 更新平台账号

- **URL**: `/platforms/{id}/`
- **方法**: PUT/PATCH
- **请求参数**: 同创建接口，PATCH 可部分更新
- **响应示例**: 同详情接口

#### 2.5 删除平台账号

- **URL**: `/platforms/{id}/`
- **方法**: DELETE
- **响应示例**:
```json
{
  "code": 200,
  "message": "平台账号已删除",
  "data": null
}
```

#### 2.6 更新粉丝数

- **URL**: `/platforms/{id}/update_followers/`
- **方法**: POST
- **请求参数**:
```json
{
  "followers_count": 2000
}
```
- **响应示例**: 同详情接口

#### 2.7 更新账号资料

- **URL**: `/platforms/{id}/update_profile/`
- **方法**: POST
- **请求参数**:
```json
{
  "tags": ["科技", "数码"],
  "profile_image": "https://example.com/new_image.jpg",
  "last_posting": "2023-09-02T10:00:00Z"
}
```
- **响应示例**: 同详情接口

### 3. 视频管理

#### 3.1 获取视频列表

- **URL**: `/videos/`
- **方法**: GET
- **参数**:
  - `page`: 页码，默认1
  - `page_size`: 每页记录数，默认10

- **响应示例**:
```json
{
  "code": 200,
  "message": "获取视频列表成功",
  "data": {
    "count": 10,
    "next": null,
    "previous": null,
    "results": [
      {
        "id": 1,
        "platform_account": 1,
        "platform_account_name": "测试频道",
        "platform_name": "youtube",
        "title": "测试视频",
        "description": "这是一个测试视频",
        "video_url": "https://youtube.com/watch?v=123",
        "local_path": "/path/to/video.mp4",
        "thumbnail_url": "https://example.com/thumb.jpg",
        "status": "published",
        "views_count": 1000,
        "likes_count": 100,
        "comments_count": 50,
        "shares_count": 20,
        "tags": ["测试", "视频"],
        "publish_time": "2023-09-01T10:00:00Z",
        "video_id": "v123",
        "created_at": "2023-09-01T10:00:00Z",
        "updated_at": "2023-09-01T10:00:00Z"
      }
    ],
    "page": 1,
    "pages": 1,
    "page_size": 10
  }
}
```

#### 3.2 获取视频详情

- **URL**: `/videos/{id}/`
- **方法**: GET
- **响应示例**: 类似列表但无分页

#### 3.3 创建视频

- **URL**: `/videos/`
- **方法**: POST
- **请求参数**:
```json
{
  "platform_account": 1,
  "title": "测试视频",
  "description": "这是一个测试视频",
  "status": "draft",
  "tags": ["测试", "视频"]
}
```
- **响应示例**: 同详情接口

#### 3.4 更新视频信息

- **URL**: `/videos/{id}/`
- **方法**: PUT/PATCH
- **请求参数**: 同创建接口，PATCH 可部分更新
- **响应示例**: 同详情接口

#### 3.5 删除视频

- **URL**: `/videos/{id}/`
- **方法**: DELETE
- **响应示例**:
```json
{
  "code": 200,
  "message": "视频记录已删除",
  "data": null
}
```

#### 3.6 更新视频统计数据

- **URL**: `/videos/{id}/update_stats/`
- **方法**: POST
- **请求参数**:
```json
{
  "views_count": 2000,
  "likes_count": 200,
  "comments_count": 100,
  "shares_count": 50
}
```
- **响应示例**:
```json
{
  "code": 200,
  "message": "视频统计数据更新成功",
  "data": {
    "id": 1,
    "title": "测试视频",
    "views_count": 2000,
    "likes_count": 200,
    "comments_count": 100,
    "shares_count": 50
  }
}
```

#### 3.7 发布视频

- **URL**: `/videos/{id}/publish/`
- **方法**: POST
- **请求参数**:
```json
{
  "video_url": "https://youtube.com/watch?v=123"
}
```
- **响应示例**:
```json
{
  "code": 200,
  "message": "视频已成功发布",
  "data": {
    "id": 1,
    "title": "测试视频",
    "status": "published",
    "video_url": "https://youtube.com/watch?v=123",
    "publish_time": "2023-09-02T10:00:00Z"
  }
}
```

#### 3.8 上传视频

- **URL**: `/videos/upload_video/`
- **方法**: POST
- **请求参数**: 
  - `video_file`: 视频文件(multipart/form-data)
  - `platform_account`: 平台账号ID
  - `title`: 视频标题
  - `description`: 视频描述
  - `tags`: 视频标签

- **响应示例**:
```json
{
  "code": 200,
  "message": "视频上传成功",
  "data": {
    "id": 1,
    "title": "测试视频",
    "status": "draft"
  }
}
```

#### 3.9 手动发布视频

- **URL**: `/videos/{id}/manual_publish/`
- **方法**: POST
- **请求参数**:
```json
{
  "video_url": "https://youtube.com/watch?v=123"
}
```
- **响应示例**:
```json
{
  "code": 200,
  "message": "视频发布成功",
  "data": {
    "id": 1,
    "title": "测试视频",
    "status": "published",
    "video_url": "https://youtube.com/watch?v=123",
    "publish_time": "2023-09-02T10:00:00Z"
  }
}
```

## 字段说明

### 运营账号(OperatorAccount)

| 字段名      | 类型      | 说明                                               |
|------------|-----------|--------------------------------------------------|
| id         | Integer   | 自增主键ID                                         |
| uuid       | UUID      | 唯一标识符                                         |
| username   | String    | 用户名                                             |
| password   | String    | 密码(创建/更新时传入，不会在响应中返回)              |
| real_name  | String    | 真实姓名                                           |
| email      | String    | 邮箱                                               |
| phone      | String    | 电话号码                                           |
| position   | String    | 职位，可选值: editor(编辑)、planner(策划)、operator(运营)、admin(管理员) |
| department | String    | 部门                                               |
| is_active  | Boolean   | 是否在职                                           |
| created_at | Datetime  | 创建时间                                           |
| updated_at | Datetime  | 更新时间                                           |

### 平台账号(PlatformAccount)

| 字段名          | 类型      | 说明                                               |
|----------------|-----------|--------------------------------------------------|
| id             | Integer   | 自增主键ID                                         |
| operator       | Integer   | 关联运营账号ID                                     |
| operator_name  | String    | 运营账号名称(只读)                                 |
| name           | String    | 自定义账户名称，可用于分类和识别不同平台的账号       |
| platforms      | Array     | 平台信息数组，包含平台名称、账号名称、账号ID、账号URL |
| status         | String    | 账号状态，可选值: active(正常)、restricted(限流)、suspended(封禁)、inactive(未激活) |
| followers_count| Integer   | 粉丝数                                             |
| description    | String    | 账号描述                                           |
| tags           | Array     | 标签数组                                           |
| profile_image  | String    | 账号头像URL                                        |
| last_posting   | Datetime  | 最后发布时间                                       |
| created_at     | Datetime  | 创建时间                                           |
| updated_at     | Datetime  | 更新时间                                           |
| last_login     | Datetime  | 最后登录时间                                       |

### 视频(Video)

| 字段名                | 类型      | 说明                                               |
|----------------------|-----------|--------------------------------------------------|
| id                   | Integer   | 自增主键ID                                         |
| platform_account     | Integer   | 关联平台账号ID                                     |
| platform_account_name| String    | 平台账号名称(只读)                                 |
| platform_name        | String    | 平台名称(只读)                                     |
| title                | String    | 视频标题                                           |
| description          | String    | 视频描述                                           |
| video_url            | String    | 视频URL                                            |
| local_path           | String    | 本地存储路径                                       |
| thumbnail_url        | String    | 缩略图URL                                          |
| status               | String    | 视频状态，可选值: draft(草稿)、scheduled(已排期)、published(已发布)、failed(失败)、deleted(已删除) |
| views_count          | Integer   | 观看次数                                           |
| likes_count          | Integer   | 点赞数                                             |
| comments_count       | Integer   | 评论数                                             |
| shares_count         | Integer   | 分享数                                             |
| tags                 | Array     | 标签数组                                           |
| publish_time         | Datetime  | 发布时间                                           |
| video_id             | String    | 视频ID                                             |
| created_at           | Datetime  | 创建时间                                           |
| updated_at           | Datetime  | 更新时间                                           |
</rewritten_file> 