update
This commit is contained in:
@ -6,6 +6,7 @@ import (
|
||||
"strings"
|
||||
|
||||
"fashionapi/internal/dto"
|
||||
"fashionapi/internal/middleware"
|
||||
"fashionapi/internal/pkg/hashid"
|
||||
"fashionapi/internal/pkg/response"
|
||||
"fashionapi/internal/service"
|
||||
@ -38,7 +39,22 @@ func NewArticleHandler(articles service.ArticleService) *ArticleHandler {
|
||||
//
|
||||
// 每篇附带前 ArticleFixedImages=6 张缩略图(服务端固定,不进参数)。
|
||||
func (h *ArticleHandler) List(c *gin.Context) {
|
||||
h.respondRunways(c, h.parseListQuery(c))
|
||||
q := h.parseListQuery(c)
|
||||
q.Normalize()
|
||||
list, total, err := h.articles.List(c.Request.Context(), q)
|
||||
if err != nil {
|
||||
fail(c, err)
|
||||
return
|
||||
}
|
||||
// 列表首屏对游客完全公开(翻页门槛由 PublicFirstPageAuth 兜底),不做预览截断——
|
||||
// 「未登录限制」已转移到详情页:每篇图集最多看 PreviewLimit 张图片,列表照常展示全部专辑。
|
||||
response.Page(c, http.StatusOK, list, total, q.Size)
|
||||
}
|
||||
|
||||
// isAnon 判断请求是否未携带有效登录态(供列表接口做未登录预览截断)。
|
||||
func isAnon(c *gin.Context) bool {
|
||||
_, ok := middleware.UserIDFrom(c)
|
||||
return !ok
|
||||
}
|
||||
|
||||
// parseListQuery 从 query string 解析走秀列表的筛选条件。
|
||||
@ -62,17 +78,6 @@ func (h *ArticleHandler) parseListQuery(c *gin.Context) dto.ArticleQuery {
|
||||
return q
|
||||
}
|
||||
|
||||
// respondRunways 统一执行列表查询并回包(分页)。
|
||||
func (h *ArticleHandler) respondRunways(c *gin.Context, q dto.ArticleQuery) {
|
||||
q.Normalize()
|
||||
list, total, err := h.articles.List(c.Request.Context(), q)
|
||||
if err != nil {
|
||||
fail(c, err)
|
||||
return
|
||||
}
|
||||
response.Page(c, http.StatusOK, list, total, q.Size)
|
||||
}
|
||||
|
||||
// Detail 走秀详情(含完整图片集)。
|
||||
//
|
||||
// GET /api/public/runways/:id
|
||||
@ -94,5 +99,15 @@ func (h *ArticleHandler) Detail(c *gin.Context) {
|
||||
fail(c, err)
|
||||
return
|
||||
}
|
||||
response.Data(c, http.StatusOK, detail)
|
||||
|
||||
// 未登录:图片集仅返回预览上限(PreviewLimit)张,并打 preview=true,
|
||||
// 前端据此在详情页展示「登录查看全部图片」门禁;已登录(带有效 Bearer)返回完整图片集。
|
||||
anon := isAnon(c)
|
||||
preview := false
|
||||
imageTotal := len(detail.Images)
|
||||
if anon && imageTotal > dto.PreviewLimit {
|
||||
detail.Images = detail.Images[:dto.PreviewLimit]
|
||||
preview = true
|
||||
}
|
||||
response.DataPreview(c, http.StatusOK, detail, preview, imageTotal)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user