Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
85 lines
3.0 KiB
Go
85 lines
3.0 KiB
Go
package playletser
|
|
|
|
import (
|
|
"fmt"
|
|
"net/url"
|
|
"strconv"
|
|
"videoweb/app/service/authser"
|
|
"videoweb/app/service/upstream"
|
|
"videoweb/pub/common/log"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
const chapterCollectListPath = "/api/app/playlet/chapter/collect/list"
|
|
|
|
// PlayletChapterCollectData 对应 swagger proto.PlayletChapterCollectData
|
|
type PlayletChapterCollectData struct {
|
|
ChapterID int64 `json:"chapterId"`
|
|
ChapterTitle string `json:"chapterTitle"`
|
|
PlayletID int64 `json:"playletId"`
|
|
PlayletSlug string `json:"playletSlug"`
|
|
PlayletTitle string `json:"playletTitle"`
|
|
PlayletCover string `json:"playletCover"`
|
|
CurrentEpisode int `json:"currentEpisode"`
|
|
TotalEpisode int `json:"totalEpisode"`
|
|
UpdateStatus int `json:"updateStatus"`
|
|
CountBrowse int64 `json:"countBrowse"`
|
|
CountCollect int64 `json:"countCollect"`
|
|
CountLike int64 `json:"countLike"`
|
|
IsCollect int `json:"isCollect"`
|
|
CollectedAt string `json:"collectedAt"`
|
|
MediaTime int `json:"mediaTime"`
|
|
PayType int `json:"payType"`
|
|
SingleCoins int `json:"singleCoins"`
|
|
VideoURL string `json:"videoUrl"`
|
|
}
|
|
|
|
// PlayletChapterCollectListResp 对应 swagger proto.PlayletChapterCollectListResp
|
|
type PlayletChapterCollectListResp struct {
|
|
List []PlayletChapterCollectData `json:"list"`
|
|
PageNum int `json:"pageNum"`
|
|
PageSize int `json:"pageSize"`
|
|
TotalCount int64 `json:"totalCount"`
|
|
}
|
|
|
|
// FetchChapterCollectList 拉取当前用户剧集收藏列表。
|
|
// 第二个返回值为上游业务 code(网络错误时为 0)。
|
|
func FetchChapterCollectList(c *gin.Context, q CollectListQuery) (*PlayletChapterCollectListResp, int, error) {
|
|
q.Normalize()
|
|
params := url.Values{}
|
|
params.Set("pageNum", strconv.Itoa(q.PageNum))
|
|
params.Set("pageSize", strconv.Itoa(q.PageSize))
|
|
|
|
var env APIEnvelope[PlayletChapterCollectListResp]
|
|
if err := upstream.GetJSON(c, chapterCollectListPath+"?"+params.Encode(), &env); err != nil {
|
|
return nil, 0, err
|
|
}
|
|
if env.Code != 200 {
|
|
return nil, env.Code, fmt.Errorf("playlet chapter collect list code=%d msg=%s", env.Code, env.Msg)
|
|
}
|
|
return &env.Data, env.Code, nil
|
|
}
|
|
|
|
// FetchChapterCollectListOrEmpty 失败时返回空列表;游客会话失效时尝试重登后重试一次。
|
|
func FetchChapterCollectListOrEmpty(c *gin.Context, q CollectListQuery) *PlayletChapterCollectListResp {
|
|
data, code, err := FetchChapterCollectList(c, q)
|
|
if err == nil {
|
|
if data == nil {
|
|
return &PlayletChapterCollectListResp{PageNum: q.PageNum, PageSize: q.PageSize}
|
|
}
|
|
return data
|
|
}
|
|
if retry, _ := authser.OnSessionExpired(c, code); retry {
|
|
data, _, err = FetchChapterCollectList(c, q)
|
|
if err == nil {
|
|
if data == nil {
|
|
return &PlayletChapterCollectListResp{PageNum: q.PageNum, PageSize: q.PageSize}
|
|
}
|
|
return data
|
|
}
|
|
}
|
|
log.Error("fetch playlet chapter collect list failed", log.E(err))
|
|
return &PlayletChapterCollectListResp{PageNum: q.PageNum, PageSize: q.PageSize}
|
|
}
|