This commit is contained in:
toom1996
2026-09-15 19:59:39 +08:00
parent 0185ecd0df
commit 5e4803b97f
3 changed files with 43 additions and 39 deletions

View File

@ -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]
}
}
}
}