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.
 
 
 

166 lines
5.3 KiB

package common
import "go-common/library/xstr"
/*
https://www.tapd.cn/66539426/prong/stories/view/1166539426001102539
state:
视频的状态有以下几种,如何选取合适的状态是该部分的关键
我们拆出了两个层次:业务层&详情层,先通过业务层获取svid,再从详情层获取svid的详情
详情层:根据svid获取相应的视频base信息、play信息、user信息等
业务层:根据不同的业务,设置相应的state集合,根据state去获取相应的svid(当然这里也有两种业务层区分,在于从其他服务获取svid(这里还需要做个后过滤,保证视频展示是正确的),还是在video-c中获取)
也就是说,state的选出在于业务层而不是详情层,需要业务层自己去保护,而详情层在这里仅仅做一次较宽松的保证(也就是完全不可见视频的过滤,如下架状态)
仅自己可见的状态说明:该状态可能在同一个业务场景出现主客态区分
个人空间:根据是否主客态选择select的state
通知中心:选择所有可见视频,再根据当前视频是否属于自己可见进行过滤
//点赞列表:暂时不区分主客态
业务说明:
个人空间页:作品列表区分主客态
关注页:除自己可见外的所有状态
搜索:
推荐feed页:
通知中心,含详情中转页:
评论
点赞
分享
*/
//视频状态集合
const (
//VideoStRecommend 精选,在APP端加权露出
VideoStRecommend = 5
//VideoStHighGrade 优质,回查被选为优质,在APP端普通露出
VideoStHighGrade = 4
//VideoStCanPlay 回查可放出,在APP端普通露出
VideoStCanPlay = 3
//VideoStCheckBack 待冷启动回查,在APP端部分区域露出
VideoStCheckBack = 2
//VideoStPassReview 新鲜,安全审核通过,在APP端普通露出
VideoStPassReview = 1
//VideoStPendingPassReview 新鲜,未安全审核,在APP端普通露出
VideoStPendingPassReview = 0
//VideoStPassReviewReject 待安全审核,在APP端仅自见
VideoStPassReviewReject = -1
//VideoStCheckBackPatialPlay 回查不放出,在APP部分放出
VideoStCheckBackPatialPlay = -2
//VideoInActive 安全审核不通过,在APP端不可见,待物理删除
VideoInActive = -3
//VideoDeleted Up主删除,在APP端不可见,待物理删除
VideoDeleted = -4
)
//SvAllOutState APP全部可露出状态
var SvAllOutState = []int16{
VideoStPendingPassReview,
VideoStPassReview,
VideoStCanPlay,
VideoStHighGrade,
VideoStRecommend,
}
/*
以下用于最后根据svid获取详情时的过滤,用于那些从其他服务获取svid的业务:推荐页、搜索页、点赞列表等
*/
// IsSvStateAvailable 广义上是否可见,包含用户自见state,用于获取详情,当前和owner available一致
func IsSvStateAvailable(state int64) (available bool) {
return IsSvStateOwnerAvailable(state)
}
// IsSvStateGuestAvailable 客态可见的视频状态
func IsSvStateGuestAvailable(state int64) (available bool) {
_, available = svGuestAvailableState[state]
return
}
// IsSvStateOwnerAvailable 主态可见的视频状态
func IsSvStateOwnerAvailable(state int64) (available bool) {
if state == VideoStPassReviewReject {
return true
}
return IsSvStateGuestAvailable(state)
}
// IsRecommendSvStateAvailable 推荐页中的状态过滤
func IsRecommendSvStateAvailable(state int64) (available bool) {
_, available = svRecommendAvailableState[state]
return
}
// IsSearchSvStateAvailable 搜索页中的状态过滤
func IsSearchSvStateAvailable(state int64) (available bool) {
// 暂时复用推荐
return IsRecommendSvStateAvailable(state)
}
// IsTopicSvStateAvailable 话题页中的状态过滤
func IsTopicSvStateAvailable(state int64) (available bool) {
// 暂时复用推荐
return IsRecommendSvStateAvailable(state)
}
var svGuestAvailableState = map[int64]bool{
VideoStCheckBackPatialPlay: true,
VideoStPendingPassReview: true,
VideoStPassReview: true,
VideoStCanPlay: true,
VideoStHighGrade: true,
VideoStRecommend: true,
VideoStCheckBack: true,
}
var svRecommendAvailableState = map[int64]bool{
VideoStPendingPassReview: true,
VideoStPassReview: true,
VideoStCanPlay: true,
VideoStHighGrade: true,
VideoStRecommend: true,
}
/*
以下用于业务逻辑在select语句中state in,用于video-c服务中自己进行选取svid的业务,如:关注页、个人空间页
*/
// FeedStates .
var FeedStates = xstr.JoinInts(svFeedOutStates)
// SpaceOwnerStates .
var SpaceOwnerStates = xstr.JoinInts(svSpaceOwnerOutStates)
// SpaceFanStates .
var SpaceFanStates = xstr.JoinInts(svSpaceFanOutStates)
// svFeedOutStates .
var svFeedOutStates = []int64{
VideoStCheckBackPatialPlay,
VideoStPendingPassReview,
VideoStPassReview,
VideoStCanPlay,
VideoStHighGrade,
VideoStRecommend,
VideoStCheckBack,
}
// svSpaceOwnerOutStates .
var svSpaceOwnerOutStates = []int64{
VideoStPassReviewReject,
VideoStCheckBackPatialPlay,
VideoStPendingPassReview,
VideoStPassReview,
VideoStCanPlay,
VideoStHighGrade,
VideoStRecommend,
VideoStCheckBack,
}
// svSpaceFanOutStates .
var svSpaceFanOutStates = []int64{
VideoStCheckBackPatialPlay,
VideoStPendingPassReview,
VideoStPassReview,
VideoStCanPlay,
VideoStHighGrade,
VideoStRecommend,
VideoStCheckBack,
}