update
This commit is contained in:
@ -101,8 +101,9 @@ func (h *ArticleHandler) Detail(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 未登录:图片集仅返回预览上限(PreviewLimit)张,并打 preview=true,
|
||||
// 前端据此在详情页展示「登录查看全部图片」门禁;已登录(带有效 Bearer)返回完整图片集。
|
||||
// 未登录:主图只返回预览上限(PreviewLimit)张并打 preview=true,前端据此展示
|
||||
// 「登录查看全部图片」门禁。细节图(Detail 子数组)不额外剥离 —— 游客也能看前几张主图的细节,
|
||||
// 体验更完整;而第 PreviewLimit 张之后的主图连同其细节图会被整组截断丢弃,故无法借此绕过门禁。
|
||||
anon := isAnon(c)
|
||||
preview := false
|
||||
imageTotal := len(detail.Images)
|
||||
@ -111,16 +112,21 @@ func (h *ArticleHandler) Detail(c *gin.Context) {
|
||||
preview = true
|
||||
}
|
||||
|
||||
// 已登录:把当前用户对该图集(gallery 级)与每张图片(image 级)的收藏态随详情返回,
|
||||
// 前端无需再单独调 /me/favorites/checks。gallery uid(r=)与图片 id(i=)前缀不同,
|
||||
// 混传 FilterExisting 不影响查询;匿名请求不查(保持公开接口无用户态、可缓存)。
|
||||
// 已登录:把当前用户对该图集(gallery 级)与每张图片(image 级,含细节图)的收藏态
|
||||
// 随详情返回,前端无需再单独调 /me/favorites/checks。gallery uid(r=)与图片 id(i=)
|
||||
// 前缀不同,混传 FilterExisting 不影响查询;匿名请求不查(保持公开接口无用户态、可缓存)。
|
||||
if uid, ok := middleware.UserIDFrom(c); ok {
|
||||
ids := make([]string, 0, len(detail.Images)+1)
|
||||
ids := make([]string, 0, len(detail.Images)*2+1)
|
||||
ids = append(ids, detail.UID)
|
||||
for _, im := range detail.Images {
|
||||
if im.ID != "" {
|
||||
ids = append(ids, im.ID)
|
||||
}
|
||||
for _, kid := range im.Detail {
|
||||
if kid.ID != "" {
|
||||
ids = append(ids, kid.ID)
|
||||
}
|
||||
}
|
||||
}
|
||||
if hit, err := h.favs.Check(c.Request.Context(), uid, ids); err == nil {
|
||||
set := make(map[string]bool, len(hit))
|
||||
@ -130,6 +136,9 @@ func (h *ArticleHandler) Detail(c *gin.Context) {
|
||||
detail.Favorited = set[detail.UID]
|
||||
for i := range detail.Images {
|
||||
detail.Images[i].Favorited = set[detail.Images[i].ID]
|
||||
for j := range detail.Images[i].Detail {
|
||||
detail.Images[i].Detail[j].Favorited = set[detail.Images[i].Detail[j].ID]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user