# 会议管理接口文档

## 接口列表

### 1. 创建会议

**接口地址：** `POST /meeting/create_meeting`

**请求参数：**

```json
{
  "meetingID": "string",           // 会议ID（选填，不填则自动生成）
  "subject": "string",             // 会议主题（必填）
  "coverURL": "string",           // 封面URL（选填）
  "scheduledTime": 1234567890000,  // 预约时间戳（毫秒，必填）
  "description": "string",         // 会议描述（选填）
  "duration": 60,                  // 会议时长（分钟，选填）
  "estimatedCount": 100,           // 会议预估人数（选填）
  "enableMic": true,               // 是否开启连麦（选填，默认false）
  "enableComment": true,           // 是否开启评论（选填，默认false）
  "anchorUserIDs": ["user1", "user2"], // 主播用户ID列表（多选，选填）
  "ex": "string"                   // 扩展字段（选填）
}
```

**响应参数：**

```json
{
  "errCode": 0,
  "errMsg": "",
  "errDlt": "",
  "data": {
    "meetingInfo": {
      "meetingID": "string",           // 会议ID
      "subject": "string",              // 会议主题
      "coverURL": "string",            // 封面URL
      "scheduledTime": 1234567890000,  // 预约时间戳（毫秒）
      "status": 1,                     // 会议状态：1-已预约，2-进行中，3-已结束，4-已取消
      "creatorUserID": "string",       // 创建者用户ID
      "description": "string",         // 会议描述
      "duration": 60,                  // 会议时长（分钟）
      "estimatedCount": 100,           // 会议预估人数
      "enableMic": true,               // 是否开启连麦
      "enableComment": true,           // 是否开启评论
      "anchorUserIDs": ["user1", "user2"], // 主播用户ID列表（多选）
      "anchorUsers": [                // 主播用户信息列表
        {
          "userID": "user1",
          "nickname": "主播1",
          "faceURL": "https://example.com/avatar1.jpg"
        },
        {
          "userID": "user2",
          "nickname": "主播2",
          "faceURL": "https://example.com/avatar2.jpg"
        }
      ],
      "createTime": 1234567890000,     // 创建时间戳（毫秒）
      "updateTime": 1234567890000,     // 更新时间戳（毫秒）
      "ex": "string",                  // 扩展字段
      "groupID": "string"              // 关联的群聊ID
    },
    "groupID": "string"                // 创建的群聊ID
  }
}
```

**说明：**
- 创建会议时会自动创建一个群聊，群聊名称为"群聊-[会议主题]"
- 会议封面会作为群聊头像
- 如果有主播列表，第一个主播自动成为群主，其他主播成为管理员
- 如果没有主播列表，创建者自动成为群主

---

### 2. 更新会议

**接口地址：** `POST /meeting/update_meeting`

**请求参数：**

```json
{
  "meetingID": "string",           // 会议ID（必填）
  "subject": "string",             // 会议主题（选填）
  "coverURL": "string",           // 封面URL（选填）
  "scheduledTime": 1234567890000,  // 预约时间戳（毫秒，选填）
  "status": 2,                     // 会议状态：1-已预约，2-进行中，3-已结束，4-已取消（选填）
  "description": "string",         // 会议描述（选填）
  "duration": 60,                  // 会议时长（分钟，选填）
  "estimatedCount": 100,           // 会议预估人数（选填）
  "enableMic": true,               // 是否开启连麦（选填，使用指针以区分是否设置）
  "enableComment": true,            // 是否开启评论（选填，使用指针以区分是否设置）
  "anchorUserIDs": ["user1", "user2"], // 主播用户ID列表（多选，选填）
  "ex": "string"                   // 扩展字段（选填）
}
```

**响应参数：**

```json
{
  "errCode": 0,
  "errMsg": "",
  "errDlt": "",
  "data": {
    "meetingInfo": {
      "meetingID": "string",           // 会议ID
      "subject": "string",              // 会议主题
      "coverURL": "string",            // 封面URL
      "scheduledTime": 1234567890000,  // 预约时间戳（毫秒）
      "status": 2,                     // 会议状态：1-已预约，2-进行中，3-已结束，4-已取消
      "creatorUserID": "string",       // 创建者用户ID
      "description": "string",         // 会议描述
      "duration": 60,                  // 会议时长（分钟）
      "estimatedCount": 100,           // 会议预估人数
      "enableMic": true,               // 是否开启连麦
      "enableComment": true,           // 是否开启评论
      "anchorUserIDs": ["user1", "user2"], // 主播用户ID列表（多选）
      "anchorUsers": [                // 主播用户信息列表
        {
          "userID": "user1",
          "nickname": "主播1",
          "faceURL": "https://example.com/avatar1.jpg"
        },
        {
          "userID": "user2",
          "nickname": "主播2",
          "faceURL": "https://example.com/avatar2.jpg"
        }
      ],
      "createTime": 1234567890000,     // 创建时间戳（毫秒）
      "updateTime": 1234567890000,     // 更新时间戳（毫秒）
      "ex": "string",                  // 扩展字段
      "groupID": "string"              // 关联的群聊ID
    }
  }
}
```

**说明：**
- 可以单独更新任意字段，只传需要更新的字段即可
- 更新主题时会同步更新群聊名称
- 更新封面时会同步更新群聊头像
- 更新主播列表时，第一个主播会成为群主，其他主播会成为管理员
- 只有创建者可以更新会议

---

### 3. 获取会议列表

**接口地址：** `POST /meeting/get_meetings`

**请求参数：**

```json
{
  "creatorUserID": "string",        // 创建者用户ID（选填）
  "status": 1,                     // 会议状态（选填）：1-已预约，2-进行中，3-已结束，4-已取消
  "keyword": "string",              // 搜索关键词（选填，搜索主题和描述）
  "startTime": 1234567890000,       // 开始时间戳（毫秒，选填）
  "endTime": 1234567890000,         // 结束时间戳（毫秒，选填）
  "pagination": {
    "pageNumber": 1,                // 页码，从1开始（选填，默认1）
    "showNumber": 20                // 每页数量（选填，默认20）
  }
}
```

**响应参数：**

```json
{
  "errCode": 0,
  "errMsg": "",
  "errDlt": "",
  "data": {
    "total": 100,                   // 总数
    "meetings": [
      {
        "meetingID": "string",           // 会议ID
        "subject": "string",              // 会议主题
        "coverURL": "string",            // 封面URL
        "scheduledTime": 1234567890000,  // 预约时间戳（毫秒）
        "status": 1,                     // 会议状态：1-已预约，2-进行中，3-已结束，4-已取消
        "creatorUserID": "string",       // 创建者用户ID
        "description": "string",         // 会议描述
        "duration": 60,                  // 会议时长（分钟）
        "estimatedCount": 100,           // 会议预估人数
        "enableMic": true,               // 是否开启连麦
        "enableComment": true,           // 是否开启评论
        "anchorUserIDs": ["user1", "user2"], // 主播用户ID列表（多选）
        "anchorUsers": [                // 主播用户信息列表
          {
            "userID": "user1",
            "nickname": "主播1",
            "faceURL": "https://example.com/avatar1.jpg"
          },
          {
            "userID": "user2",
            "nickname": "主播2",
            "faceURL": "https://example.com/avatar2.jpg"
          }
        ],
        "createTime": 1234567890000,     // 创建时间戳（毫秒）
        "updateTime": 1234567890000,     // 更新时间戳（毫秒）
        "ex": "string",                  // 扩展字段
        "groupID": "string"              // 关联的群聊ID
      }
    ]
  }
}
```

**说明：**
- 支持多种查询条件，可以组合使用
- 查询优先级：creatorUserID > status > keyword > startTime/endTime > 全部
- 支持分页查询
- 返回的会议信息中包含主播的完整用户信息（用户ID、昵称、头像等）

---

### 4. 删除会议

**接口地址：** `POST /meeting/delete_meeting`

**请求参数：**

```json
{
  "meetingID": "string"             // 会议ID（必填）
}
```

**响应参数：**

```json
{
  "errCode": 0,
  "errMsg": "",
  "errDlt": "",
  "data": {}
}
```

**说明：**
- 只有创建者可以删除会议
- 删除会议不会删除关联的群聊

---

## 会议状态说明

- `1` - 已预约：会议已创建，等待开始
- `2` - 进行中：会议正在进行
- `3` - 已结束：会议已结束（用户端不可见）
- `4` - 已取消：会议已取消（用户端不可见）

**注意：** 用户端接口只能查看状态1（已预约）和2（进行中）的会议，状态3（已结束）和4（已取消）的会议对用户端不可见。

---

## 通用响应格式

所有接口都遵循统一的响应格式：

```json
{
  "errCode": 0,        // 错误码，0表示成功
  "errMsg": "",        // 错误消息
  "errDlt": "",        // 错误详情
  "data": {}           // 响应数据
}
```

---

## 用户端接口

### 5. 获取会议信息（用户端）

**接口地址：** `POST /meeting/get_meeting`

**请求参数：**

```json
{
  "meetingID": "string"  // 会议ID（必填）
}
```

**响应参数：**

```json
{
  "errCode": 0,
  "errMsg": "",
  "errDlt": "",
  "data": {
    "meetingInfo": {
      "meetingID": "string",           // 会议ID
      "subject": "string",              // 会议主题
      "coverURL": "string",            // 封面URL
      "scheduledTime": 1234567890000,  // 预约时间戳（毫秒）
      "status": 1,                     // 会议状态：1-已预约，2-进行中
      "description": "string",         // 会议描述
      "duration": 60,                  // 会议时长（分钟）
      "enableMic": true,               // 是否开启连麦
      "enableComment": true,           // 是否开启评论
      "anchorUsers": [                // 主播用户信息列表
        {
          "userID": "user1",
          "nickname": "主播1",
          "faceURL": "https://example.com/avatar1.jpg"
        },
        {
          "userID": "user2",
          "nickname": "主播2",
          "faceURL": "https://example.com/avatar2.jpg"
        }
      ],
      "groupID": "string"              // 关联的群聊ID
    }
  }
}
```

**说明：**
- 用户端接口只显示状态为1（已预约）和2（进行中）的会议
- 如果会议状态为3（已结束）或4（已取消），将返回错误
- 用户端接口不返回管理字段（创建者ID、扩展字段、创建时间、更新时间等）
- 返回的主播信息包含用户ID、昵称、头像等完整用户信息

---

### 6. 获取会议列表（用户端）

**接口地址：** `POST /meeting/get_meetings_public`

**请求参数：**

```json
{
  "status": 1,                     // 会议状态（选填）：1-已预约，2-进行中（只能查询这两个状态）
  "keyword": "string",              // 搜索关键词（选填，搜索主题和描述）
  "startTime": 1234567890000,       // 开始时间戳（毫秒，选填）
  "endTime": 1234567890000,         // 结束时间戳（毫秒，选填）
  "pagination": {
    "pageNumber": 1,                // 页码，从1开始（选填，默认1）
    "showNumber": 20                // 每页数量（选填，默认20）
  }
}
```

**响应参数：**

```json
{
  "errCode": 0,
  "errMsg": "",
  "errDlt": "",
  "data": {
    "total": 100,                   // 总数（只包含状态1和2的会议）
    "meetings": [
      {
        "meetingID": "string",           // 会议ID
        "subject": "string",              // 会议主题
        "coverURL": "string",            // 封面URL
        "scheduledTime": 1234567890000,  // 预约时间戳（毫秒）
        "status": 1,                     // 会议状态：1-已预约，2-进行中
        "description": "string",         // 会议描述
        "duration": 60,                  // 会议时长（分钟）
        "enableMic": true,               // 是否开启连麦
        "enableComment": true,           // 是否开启评论
        "anchorUsers": [                // 主播用户信息列表
          {
            "userID": "user1",
            "nickname": "主播1",
            "faceURL": "https://example.com/avatar1.jpg"
          },
          {
            "userID": "user2",
            "nickname": "主播2",
            "faceURL": "https://example.com/avatar2.jpg"
          }
        ],
        "groupID": "string"              // 关联的群聊ID
      }
    ]
  }
}
```

**说明：**
- 用户端接口只显示状态为1（已预约）和2（进行中）的会议
- 如果指定status参数，只能传入1或2，传入其他值将返回错误
- 如果不指定status，查询结果会自动过滤，只返回状态1和2的会议
- 用户端接口不支持按创建者查询
- 用户端接口不返回管理字段（创建者ID、扩展字段、创建时间、更新时间等）
- 返回的主播信息包含用户ID、昵称、头像等完整用户信息

---

## 注意事项

1. 所有接口都需要在请求头中携带 `token` 进行身份验证
2. 创建和更新会议时，预约时间不能早于当前时间
3. 创建会议时会自动创建关联的群聊，群聊名称为"群聊-[会议主题]"
4. 更新会议主题或封面时，会同步更新关联群聊的名称或头像
5. 只有会议创建者可以更新和删除会议
6. 用户端接口只提供查看功能，不包含创建、更新、删除等管理功能
7. 用户端接口返回的数据已过滤管理字段（创建者ID、扩展字段、创建时间、更新时间等）
8. 用户端接口只显示状态为1（已预约）和2（进行中）的会议，状态3（已结束）和4（已取消）的会议对用户端不可见
