update
This commit is contained in:
@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user