# 上传一个卷

按小说 ID 和卷序号创建或覆盖卷标题。

`PUT /api/v2/volumes`

不带查询参数：

```json
{
  "novelId": 10,
  "order": 1,
  "title": "第一卷 启程"
}
```

| 请求键 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `novelId` | integer | 是 | 已存在的小说 ID。 |
| `order` | integer | 是 | 从 1 开始的小说内卷序号，与 `novelId` 共同定位卷。 |
| `title` | string | 是 | 去除首尾空白后不能为空。 |

以 `(novelId, order)` 新增或覆盖。不存在则创建，存在则只覆盖卷标题，保留卷 ID、创建时间和已有章节关联。
无论新增还是覆盖均返回 `200`；小说引用不存在返回 400。

PUT 和 GET 单条响应：

```json
{
  "id": 20,
  "novelId": 10,
  "order": 1,
  "title": "第一卷 启程",
  "createdAt": "2026-10-29T04:00:00Z",
  "updatedAt": "2026-10-29T04:00:00Z"
}
```

`id` 为数据库卷 ID，单章上传的 `volumeId` 使用此值；不是 `order`。
`createdAt`、`updatedAt` 为服务端时间，其他响应键与请求字段相同。
GET 列表为上述对象的数组。
