204 lines
6.3 KiB
Go
204 lines
6.3 KiB
Go
package dramactrl
|
|
|
|
import (
|
|
"errors"
|
|
"time"
|
|
|
|
"91porn-server/app/service/dramaser"
|
|
"91porn-server/app/service/m3u8ticket"
|
|
"91porn-server/common"
|
|
"91porn-server/common/stderr"
|
|
"91porn-server/models/v/walletmod"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
// ChannelConfig doc
|
|
// @Summary 短剧频道配置
|
|
// @Tags 移动端-短剧
|
|
// @Success 200 {object} dramaser.ChannelConfig
|
|
// @Router /api/app/media/drama/channel/config [get]
|
|
func ChannelConfig(ctx *gin.Context) {
|
|
if _, err := common.GetUID(ctx); err != nil {
|
|
common.ServeJSON(ctx, stderr.ErrNoToken, err)
|
|
return
|
|
}
|
|
data, err := dramaser.GetChannelConfig(time.Now())
|
|
if err != nil {
|
|
common.ServeJSON(ctx, stderr.ErrDbQueryError, err)
|
|
return
|
|
}
|
|
common.ServeJSON(ctx, stderr.Success, data)
|
|
}
|
|
|
|
// Feed doc
|
|
// @Summary AI短剧沉浸式推荐Feed
|
|
// @Tags 移动端-短剧
|
|
// @Param q query dramaser.FeedRequest true "请求参数"
|
|
// @Success 200 {object} dramaser.FeedResponse
|
|
// @Router /api/app/media/drama/feed [get]
|
|
func Feed(ctx *gin.Context) {
|
|
uid, err := common.GetUID(ctx)
|
|
if err != nil {
|
|
common.ServeJSON(ctx, stderr.ErrNoToken, err)
|
|
return
|
|
}
|
|
var req dramaser.FeedRequest
|
|
if err = ctx.ShouldBindQuery(&req); err != nil {
|
|
common.ServeJSON(ctx, stderr.ErrParamError, err)
|
|
return
|
|
}
|
|
data, err := dramaser.GetFeed(ctx.Request.Context(), uid, req.PageSize, time.Now())
|
|
if err != nil {
|
|
common.ServeJSON(ctx, stderr.ErrDbQueryError, err)
|
|
return
|
|
}
|
|
for i := range data.List {
|
|
m3u8ticket.SignURL(ctx, uid, &data.List[i].Content.VideoUrl, true, false)
|
|
m3u8ticket.SignURL(ctx, uid, &data.List[i].Content.H265Url, true, false)
|
|
m3u8ticket.SignURL(ctx, uid, &data.List[i].Content.AudioUrl, true, false)
|
|
m3u8ticket.SignURL(ctx, uid, &data.List[i].Content.PreviewVideoUrl, false, true)
|
|
m3u8ticket.SignURL(ctx, uid, &data.List[i].Content.PreviewH265Url, false, true)
|
|
}
|
|
common.ServeJSON(ctx, stderr.Success, data)
|
|
}
|
|
|
|
// List doc
|
|
// @Summary 热门短剧双列列表
|
|
// @Tags 移动端-短剧
|
|
// @Param q query dramaser.ListRequest true "请求参数"
|
|
// @Success 200 {object} dramaser.ListResponse
|
|
// @Router /api/app/media/drama/list [get]
|
|
func List(ctx *gin.Context) {
|
|
uid, err := common.GetUID(ctx)
|
|
if err != nil {
|
|
common.ServeJSON(ctx, stderr.ErrNoToken, err)
|
|
return
|
|
}
|
|
var req dramaser.ListRequest
|
|
if err = ctx.ShouldBindQuery(&req); err != nil {
|
|
common.ServeJSON(ctx, stderr.ErrParamError, err)
|
|
return
|
|
}
|
|
data, err := dramaser.GetList(uid, req)
|
|
if err != nil {
|
|
common.ServeJSON(ctx, stderr.ErrDbQueryError, err)
|
|
return
|
|
}
|
|
common.ServeJSON(ctx, stderr.Success, data)
|
|
}
|
|
|
|
// Topics doc
|
|
// @Summary 短剧专题列表
|
|
// @Tags 移动端-短剧
|
|
// @Success 200 {object} dramaser.TopicListResponse
|
|
// @Router /api/app/media/drama/topics [get]
|
|
func Topics(ctx *gin.Context) {
|
|
if _, err := common.GetUID(ctx); err != nil {
|
|
common.ServeJSON(ctx, stderr.ErrNoToken, err)
|
|
return
|
|
}
|
|
data, err := dramaser.GetTopics(time.Now())
|
|
if err != nil {
|
|
common.ServeJSON(ctx, stderr.ErrDbQueryError, err)
|
|
return
|
|
}
|
|
common.ServeJSON(ctx, stderr.Success, data)
|
|
}
|
|
|
|
// TopicWorks doc
|
|
// @Summary 短剧专题作品
|
|
// @Tags 移动端-短剧
|
|
// @Param q query dramaser.TopicWorksRequest true "请求参数"
|
|
// @Success 200 {object} dramaser.TopicWorksResponse
|
|
// @Router /api/app/media/drama/topic/works [get]
|
|
func TopicWorks(ctx *gin.Context) {
|
|
uid, err := common.GetUID(ctx)
|
|
if err != nil {
|
|
common.ServeJSON(ctx, stderr.ErrNoToken, err)
|
|
return
|
|
}
|
|
var req dramaser.TopicWorksRequest
|
|
if err = ctx.ShouldBindQuery(&req); err != nil {
|
|
common.ServeJSON(ctx, stderr.ErrParamError, err)
|
|
return
|
|
}
|
|
data, err := dramaser.GetTopicWorks(uid, req, time.Now())
|
|
if err != nil {
|
|
common.ServeJSON(ctx, stderr.ErrDbQueryError, err)
|
|
return
|
|
}
|
|
common.ServeJSON(ctx, stderr.Success, data)
|
|
}
|
|
|
|
// DownloadAuthorize doc
|
|
// @Summary 申请短剧单集下载并扣除下载次数
|
|
// @Tags 移动端-短剧
|
|
// @Param X-Request-ID header string true "幂等请求ID"
|
|
// @Param body body dramaser.DownloadAuthorizeRequest true "请求参数"
|
|
// @Success 200 {object} dramaser.DownloadAuthorizeResponse
|
|
// @Router /api/app/media/drama/download/authorize [post]
|
|
func DownloadAuthorize(ctx *gin.Context) {
|
|
uid, err := common.GetUID(ctx)
|
|
if err != nil {
|
|
common.ServeJSON(ctx, stderr.ErrNoToken, err)
|
|
return
|
|
}
|
|
var req dramaser.DownloadAuthorizeRequest
|
|
if err = ctx.ShouldBindJSON(&req); err != nil {
|
|
common.ServeJSON(ctx, stderr.ErrParamError, err)
|
|
return
|
|
}
|
|
data, err := dramaser.AuthorizeDownload(ctx.Request.Context(), uid, ctx.GetHeader("X-Request-ID"), req, time.Now())
|
|
if err != nil {
|
|
serveDownloadAuthorizeError(ctx, err)
|
|
return
|
|
}
|
|
m3u8ticket.SignURL(ctx, uid, &data.DownloadURL, true, false)
|
|
m3u8ticket.SignURL(ctx, uid, &data.H265DownloadURL, true, false)
|
|
common.ServeJSON(ctx, stderr.Success, data)
|
|
}
|
|
|
|
func serveDownloadAuthorizeError(ctx *gin.Context, err error) {
|
|
switch {
|
|
case errors.Is(err, dramaser.ErrDramaEntitlementRequired):
|
|
common.ServeJsonWithExtra(ctx, stderr.ErrAccessForbid,
|
|
gin.H{"reason": "DRAMA_ENTITLEMENT_REQUIRED"}, gin.H{"msg": "", "tip": ""})
|
|
case errors.Is(err, walletmod.ErrDownloadCountNotEnough):
|
|
common.ServeJsonWithExtra(ctx, stderr.DownloadCountIsNotEnough,
|
|
gin.H{"reason": "DOWNLOAD_COUNT_NOT_ENOUGH", "remainingDownloadCount": 0}, gin.H{"msg": "", "tip": ""})
|
|
case errors.Is(err, walletmod.ErrDownloadRequestConflict):
|
|
common.ServeJSON(ctx, stderr.ErrInvalidRequest, err)
|
|
case errors.Is(err, dramaser.ErrDownloadResourceInvalid):
|
|
common.ServeJSON(ctx, stderr.ErrParamError, err)
|
|
default:
|
|
common.ServeJSON(ctx, stderr.ErrDbUpdateError, err)
|
|
}
|
|
}
|
|
|
|
// SaveEvents doc
|
|
// @Summary 批量上报短剧一期埋点
|
|
// @Tags 移动端-短剧
|
|
// @Param X-Request-ID header string true "幂等请求ID"
|
|
// @Param body body dramaser.EventsRequest true "请求参数"
|
|
// @Success 200 {object} dramaser.EventsResponse
|
|
// @Router /api/app/media/drama/events [post]
|
|
func SaveEvents(ctx *gin.Context) {
|
|
uid, err := common.GetUID(ctx)
|
|
if err != nil {
|
|
common.ServeJSON(ctx, stderr.ErrNoToken, err)
|
|
return
|
|
}
|
|
var req dramaser.EventsRequest
|
|
if err = ctx.ShouldBindJSON(&req); err != nil {
|
|
common.ServeJSON(ctx, stderr.ErrParamError, err)
|
|
return
|
|
}
|
|
data, err := dramaser.SaveEvents(uid, ctx.GetHeader("X-Request-ID"), req)
|
|
if err != nil {
|
|
common.ServeJSON(ctx, stderr.ErrParamError, err)
|
|
return
|
|
}
|
|
common.ServeJSON(ctx, stderr.Success, data)
|
|
}
|