You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.9 KiB
68 lines
1.9 KiB
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 |
|
}
|
|
|