Files
谢宇宁andClaude Opus 5.5 3639d2184a Initial commit
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 14:47:17 +07:00

80 lines
1.7 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package playletser
import (
"fmt"
"net/url"
"strconv"
"videoweb/app/service/upstream"
"videoweb/pub/common/log"
"github.com/gin-gonic/gin"
)
const (
rankPath = "/api/app/playlet/rank"
defaultRankPageSize = 30
// 排行榜 sortOrder:1-热播榜,2-新剧榜,3-追剧榜
rankSortHot = 1
rankSortNew = 2
rankSortBinge = 3
)
// RankQuery 排行榜查询参数。
type RankQuery struct {
PageNum int
PageSize int
SortOrder int
}
// Normalize 校正分页与榜单类型。
func (q *RankQuery) Normalize() {
if q.PageNum <= 0 {
q.PageNum = 1
}
if q.PageSize <= 0 {
q.PageSize = defaultRankPageSize
}
if q.PageSize > 50 {
q.PageSize = 50
}
switch q.SortOrder {
case rankSortNew, rankSortBinge:
default:
q.SortOrder = rankSortHot
}
}
// FetchRank 分页查询短剧排行榜。
func FetchRank(c *gin.Context, q RankQuery) (*PlayletVideoResp, error) {
q.Normalize()
params := url.Values{}
params.Set("pageNum", strconv.Itoa(q.PageNum))
params.Set("pageSize", strconv.Itoa(q.PageSize))
params.Set("sortOrder", strconv.Itoa(q.SortOrder))
var env APIEnvelope[PlayletVideoResp]
if err := upstream.GetPublicJSON(c, rankPath+"?"+params.Encode(), &env); err != nil {
return nil, err
}
if env.Code != 200 {
return nil, fmt.Errorf("playlet rank code=%d msg=%s", env.Code, env.Msg)
}
return &env.Data, nil
}
// FetchRankOrEmpty 失败时返回空榜单。
func FetchRankOrEmpty(c *gin.Context, q RankQuery) *PlayletVideoResp {
data, err := FetchRank(c, q)
if err != nil {
log.Error("fetch playlet rank failed", log.E(err))
return &PlayletVideoResp{PageNum: q.PageNum, PageSize: q.PageSize}
}
if data == nil {
return &PlayletVideoResp{PageNum: q.PageNum, PageSize: q.PageSize}
}
data.SeoInfo.Normalize()
return data
}