This commit is contained in:
toom1996
2026-09-13 21:38:32 +08:00
parent 580697f17a
commit 0185ecd0df
6 changed files with 60 additions and 8 deletions

View File

@ -17,11 +17,12 @@ import (
// ArticleHandler 对外公开的文章接口。
type ArticleHandler struct {
articles service.ArticleService
favs service.FavoriteService
}
// NewArticleHandler 创建文章 handler。
func NewArticleHandler(articles service.ArticleService) *ArticleHandler {
return &ArticleHandler{articles: articles}
func NewArticleHandler(articles service.ArticleService, favs service.FavoriteService) *ArticleHandler {
return &ArticleHandler{articles: articles, favs: favs}
}
// List 走秀列表(分页 + 单值筛选 + 排序)。
@ -109,5 +110,29 @@ func (h *ArticleHandler) Detail(c *gin.Context) {
detail.Images = detail.Images[:dto.PreviewLimit]
preview = true
}
// 已登录:把当前用户对该图集(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 = append(ids, detail.UID)
for _, im := range detail.Images {
if im.ID != "" {
ids = append(ids, im.ID)
}
}
if hit, err := h.favs.Check(c.Request.Context(), uid, ids); err == nil {
set := make(map[string]bool, len(hit))
for _, id := range hit {
set[id] = true
}
detail.Favorited = set[detail.UID]
for i := range detail.Images {
detail.Images[i].Favorited = set[detail.Images[i].ID]
}
}
}
response.DataPreview(c, http.StatusOK, detail, preview, imageTotal)
}