Skip to content

Pages(消息页)

消息页是楼层里面的分页容器。一个楼层可以有多页——比如重新生成后新的一页和旧的一页各是不同的页。

每页下面可以有多条消息。同一个 floor_id + page_no 上,只有一个页是当前激活的。

什么时候需要看这页

  • 你要创建新消息页
  • 你要切换激活页
  • 你要查看或修改某个页的属性

一个简单例子

bash
# 查看某个楼层下的消息页
curl "http://localhost:3000/pages?floor_id=floor_001"

# 激活某个页
curl -X PATCH http://localhost:3000/pages/page_001/activate

先理解几个词

这里的意思
page_no页序号,input 页通常是 0,output 页通常是 1
page_kind页类型:input(输入页)、output(输出页)、mixed(混合页)
activate把当前这个页设为同一 floor + page_no 下的唯一激活页

这不是“同一楼层只能有一个 active page”。因此:

  • page_no = 0 的 input 页和 page_no = 1 的 output 页可以同时处于 active 状态
  • PATCH /pages/:id/activate 只会切换目标页所在的同一 (floor_id, page_no) 槽位
  • POST /pagesPATCH /pages/:id 不再接受公开的 is_active 写入

Page 对象

字段类型说明
idstring消息页 ID
floor_idstring所属楼层 ID
page_nointeger页序号
page_kindstring类型:input / output / mixed
is_activeboolean是否为当前激活页
versioninteger版本号
checksumstring | null内容校验和
created_atinteger创建时间
updated_atinteger更新时间

创建消息页

http
POST /pages

请求体

字段类型必填说明
floor_idstring所属楼层 ID
page_nointeger页序号
page_kindstring类型:input / output / mixed
versioninteger版本号
checksumstring校验和

说明

  • 公开请求体不再接受 is_active
  • 如果旧客户端仍发送 is_active,会收到 400 validation_error
  • active 版本的选择由内部服务处理,而不是由公开写接口直接控制

响应 201

返回 { "data": Page }

错误

状态码code说明
400validation_error请求体校验失败,包括仍发送 is_active
404not_found所属 floor 不存在
409page_conflict重复 (floor_id, page_no, version),或命中同一 (floor_id, page_no) 的 active 槽位唯一约束

列出消息页

http
GET /pages

查询参数

参数类型说明
floor_idstring按楼层过滤
page_kindstring按类型过滤
is_activeboolean按激活状态过滤
sort_bystringcreated_at(默认)/ updated_at / page_no / version
sort_orderstringasc / desc
limitinteger每页条数,默认 50
offsetinteger偏移量,默认 0

响应 200

返回 { "data": Page[], "meta": ListMeta }

获取消息页详情

http
GET /pages/:id

更新消息页

http
PATCH /pages/:id

说明

  • 公开请求体不再接受 is_active
  • 如果需要切换当前激活版本,必须使用 PATCH /pages/:id/activate
  • 旧客户端如果继续发送 is_active,会收到 400 validation_error

错误

状态码code说明
400validation_error请求体校验失败
404not_found消息页不存在
409page_conflict更新后会命中页版本唯一性或 active 槽位唯一性约束

删除消息页

http
DELETE /pages/:id

激活消息页

http
PATCH /pages/:id/activate

将指定消息页设为当前激活页。

语义

  • 这个端点是事务化的
  • 它只会切换目标页所在的同一 (floor_id, page_no) 槽位
  • 它不会清空同一楼层中其他 page_no 槽位的 active 页
  • page_kind = "input" 的页不允许通过这个端点激活
  • committed 楼层中,公开 page 变更只保留这个受约束的激活路径

响应 200

返回激活后的 Page 对象。

错误

状态码code说明
400validation_error目标页不允许激活,例如 page_kind = "input"
404not_found消息页不存在,或不属于当前账号
409conflict激活事务中的约束冲突

批量删除消息页

http
POST /pages/batch/delete

批量硬删除消息页。每次最多 100 条,不允许重复 ID。

请求体

字段类型必填说明
idsstring[]消息页 ID 数组,1-100 条,不允许重复

请求示例

json
{
  "ids": ["page_001", "page_002", "page_missing"]
}

响应 200

json
{
  "data": {
    "results": [
      { "index": 0, "id": "page_001", "action": "deleted" },
      { "index": 1, "id": "page_002", "action": "deleted" },
      { "index": 2, "id": "page_missing", "action": "not_found" }
    ],
    "meta": { "total": 3, "deleted": 2, "not_found": 1 }
  }
}

错误

状态码说明
400请求体校验失败、ids 为空或超过 100 条、存在重复 ID