package playletser import ( "fmt" "net/url" "strconv" "videoweb/app/service/upstream" "videoweb/pub/common/log" "github.com/gin-gonic/gin" ) const operateListPath = "/api/app/playlet/operate/list" type OperateListQuery struct { OperateType int FilterType int PageNum int PageSize int } func (q *OperateListQuery) Normalize() { if q.OperateType < 1 || q.OperateType > 2 { q.OperateType = 1 } if q.FilterType < 1 || q.FilterType > 3 { q.FilterType = 1 } if q.PageNum <= 0 { q.PageNum = 1 } if q.PageSize <= 0 { q.PageSize = 40 } if q.PageSize > 100 { q.PageSize = 100 } } // FetchOperateList 按运营类型和筛选类型查询已上架短剧。 func FetchOperateList(c *gin.Context, q OperateListQuery) (*PlayletOperateListResp, error) { q.Normalize() params := url.Values{} params.Set("operateType", strconv.Itoa(q.OperateType)) params.Set("filterType", strconv.Itoa(q.FilterType)) params.Set("pageNum", strconv.Itoa(q.PageNum)) params.Set("pageSize", strconv.Itoa(q.PageSize)) var env APIEnvelope[PlayletOperateListResp] if err := upstream.GetPublicJSON(c, operateListPath+"?"+params.Encode(), &env); err != nil { return nil, err } if env.Code != 200 { return nil, fmt.Errorf("playlet operate list code=%d msg=%s tip=%s", env.Code, env.Msg, env.Tip) } return &env.Data, nil } // FetchOperateListOrEmpty 为 SSR 页面提供容错,接口异常时仍渲染完整页面骨架。 func FetchOperateListOrEmpty(c *gin.Context, q OperateListQuery) *PlayletOperateListResp { q.Normalize() data, err := FetchOperateList(c, q) if err != nil { log.Error("fetch playlet operate list failed", log.E(err)) return &PlayletOperateListResp{ OperateType: q.OperateType, FilterType: q.FilterType, PageNum: q.PageNum, PageSize: q.PageSize, } } if data == nil { return &PlayletOperateListResp{ OperateType: q.OperateType, FilterType: q.FilterType, PageNum: q.PageNum, PageSize: q.PageSize, } } return data }