iyear / pure-live-core

✨ Make Live Pure Again
https://github.com/iyear/pure-live-core
GNU Affero General Public License v3.0
1.18k stars 142 forks source link

[BUG] /api/v1/live/room_infos 无法处理 ID 为 0 的请求 #22

Closed biggerxiong closed 2 years ago

biggerxiong commented 2 years ago

该接口的请求为

var req []*struct {
    ID   uint64 `form:"id" binding:"required" json:"id"`
    Plat string  `form:"plat" binding:"required,max=15" json:"plat"`
    Room string  `form:"room" binding:"required" json:"room"`
}

当请求的 ID 为 0 时,会报 参数错误,请求数据如下

[{"id":0,"plat":"douyu","room":"16101"},{"id":1,"plat":"douyu","room":"96291"}]

响应如下

{
    "code": -2,
    "msg": "invalid params: [0]: Key: 'ID' Error:Field validation for 'ID' failed on the 'required' tag"
}

前端如果将收藏列表的下标作为 id,则 id 会出现为 0 的情况

而 gin 在接收请求参数时,无法处理默认值的情况

建议把请求参数改为(ID 改为指针类型)

var req []*struct {
    ID   *uint64 `form:"id" binding:"required" json:"id"`
    Plat string `form:"plat" binding:"required,max=15" json:"plat"`
    Room string `form:"room" binding:"required" json:"room"`
}
iyear commented 2 years ago

这个id是想前端传入收藏项的id的,收藏项id是从1开始递增的

iyear commented 2 years ago

如果只是0的原因的话把required去了就可以了

biggerxiong commented 2 years ago

可是之前加 id 这个字段,不是为了让前端更好定位元素位置,省去一重遍历吗 #17

我理解的是:前端把收藏列表中的下标加到 ID 中,这样拿到数据后直接通过 ID 定位到下标

如果传入收藏项的 ID,对于每一项,是不是也需要多一次遍历去找对应的收藏项 ID

iyear commented 2 years ago

在前端demo中的table key是收藏项id,而且不建议前端使用下标定位元素,不便于维护顺序,使用全局唯一的收藏项id更清晰

可以看一下现在前端的实现,就是直接读出来的

iyear commented 2 years ago

required后续还是会去除的,主要是考虑到将此接口作为工具类的使用者可能会传入0值,同时会将id设为string类型方便任意传入