69 lines
1.9 KiB
Go
69 lines
1.9 KiB
Go
package dao
|
||
|
||
import (
|
||
"context"
|
||
"go-common/app/service/bbq/common"
|
||
video "go-common/app/service/bbq/video/api/grpc/v1"
|
||
"go-common/library/ecode"
|
||
"go-common/library/log"
|
||
)
|
||
|
||
// BatchVideoInfo .
|
||
func (d *Dao) BatchVideoInfo(c context.Context, svids []int64) (res map[int64]*video.VideoInfo, err error) {
|
||
res = make(map[int64]*video.VideoInfo)
|
||
|
||
videoReq := &video.ListVideoInfoRequest{SvIDs: svids}
|
||
reply, err := d.videoClient.ListVideoInfo(c, videoReq)
|
||
if err != nil {
|
||
log.Errorw(c, "log", "call video service list vidoe info fail", "req", videoReq.String())
|
||
return
|
||
}
|
||
|
||
for _, videoInfo := range reply.List {
|
||
res[videoInfo.VideoBase.Svid] = videoInfo
|
||
}
|
||
log.V(10).Infow(c, "log", "batch video base", "video_info", res)
|
||
|
||
return
|
||
}
|
||
|
||
// VideoBase 获取单个svid的VideoBase,不存在则会返回error
|
||
func (d *Dao) VideoBase(c context.Context, mid, svid int64) (res *video.VideoBase, err error) {
|
||
videoInfos, err := d.BatchVideoInfo(c, []int64{svid})
|
||
if err != nil {
|
||
log.Warnw(c, "log", "batch fetch video info fail", "mid", mid, "svid", svid)
|
||
return
|
||
}
|
||
if len(videoInfos) == 0 {
|
||
err = ecode.VideoUnExists
|
||
log.Warnw(c, "log", "get empty video base", "mid", mid, "svid", svid)
|
||
return
|
||
}
|
||
videoInfo, exists := videoInfos[svid]
|
||
if !exists {
|
||
err = ecode.VideoUnExists
|
||
log.Infow(c, "log", "get empty video base", "mid", mid, "svid", svid)
|
||
return
|
||
}
|
||
|
||
res = videoInfo.VideoBase
|
||
if res.State == common.VideoStPassReviewReject {
|
||
log.Infow(c, "log", "video state in audit", "mid", mid, "svid", svid, "video_base", res)
|
||
err = ecode.VideoInAudit
|
||
return
|
||
}
|
||
if !common.IsSvStateAvailable(res.State) {
|
||
err = ecode.VideoUnReachable
|
||
log.Infow(c, "log", "video state not available", "mid", mid, "svid", svid, "video_base", res)
|
||
return
|
||
}
|
||
|
||
if res.State == common.VideoStPassReviewReject && mid != res.Mid {
|
||
err = ecode.VideoUnReachable
|
||
log.Infow(c, "log", "video state only owner available", "mid", mid, "svid", svid, "video_base", res)
|
||
return
|
||
}
|
||
|
||
return
|
||
}
|