98 lines
3.0 KiB
Go
98 lines
3.0 KiB
Go
package vidser
|
|
|
|
import (
|
|
"91porn-server/app/service/vidhelpser"
|
|
"91porn-server/common/cachev2"
|
|
"91porn-server/common/constant/redisconst"
|
|
"91porn-server/common/log"
|
|
"91porn-server/models/v/discount_area_mod"
|
|
"91porn-server/models/v/discount_area_video_mod"
|
|
"91porn-server/models/v/vidmod"
|
|
"fmt"
|
|
"go.mongodb.org/mongo-driver/bson/primitive"
|
|
"time"
|
|
)
|
|
|
|
// GetDiscountArea 获取折扣专区
|
|
func GetDiscountArea() (list []discount_area_mod.DiscountArea, err error) {
|
|
_, err = cachev2.Classes().CacheTime(redisconst.DiscountAreaExpire).AutoListKey(redisconst.DiscountArea).ResBind(&list).Cache(discount_area_mod.GetAllDiscountArea)
|
|
if err != nil {
|
|
log.Error(fmt.Sprintf("cachev2 discount_area_mod.GetAllDiscountArea err:%v", err))
|
|
return
|
|
}
|
|
return list, nil
|
|
}
|
|
|
|
// GetDiscountAreaVideos 获取折扣专区下的视频
|
|
func GetDiscountAreaVideos(uid uint64, req *DiscountVideoReq) (data *DiscountVideoResp, err error) {
|
|
data = &DiscountVideoResp{
|
|
List: []*vidmod.VideoInfo{},
|
|
}
|
|
var videos []*vidmod.VideoModel
|
|
key := fmt.Sprintf("DiscountAreaVideoList:%v:%v:%v:%v", req.DiscountId, req.SortType, req.PageSize, req.PageNumber)
|
|
_, err = cachev2.Classes().CacheTime(2*time.Minute).AutoListKey(key).ResBind(&videos).Cache(discountAreaVideos, req)
|
|
if err != nil {
|
|
log.Error(fmt.Sprintf("cachev2 discountAreaVideos err:%v", err))
|
|
return
|
|
}
|
|
|
|
if len(videos) == 0 {
|
|
log.Warn(fmt.Sprintf("discountAreaVideos is null, discountAreaId:%v", req.DiscountId))
|
|
return data, nil
|
|
}
|
|
if len(videos) > int(req.PageSize) {
|
|
data.HasNext = true
|
|
videos = videos[:req.PageSize]
|
|
}
|
|
videoList := vidhelpser.EncodeVideoInfo(uid, videos)
|
|
data.List = videoList
|
|
return
|
|
}
|
|
|
|
// 获取折扣专区视频列表
|
|
func discountAreaVideos(req *DiscountVideoReq) (list []*vidmod.VideoModel, err error) {
|
|
// 按照排序类型查询方式不同
|
|
switch req.SortType {
|
|
case 2:
|
|
//按照最热查询
|
|
list, err = vidmod.GetVideoListByCond(req.Filter(), req.Options())
|
|
default:
|
|
list, err = newDiscountAreaVideos(req)
|
|
return
|
|
}
|
|
if err != nil {
|
|
log.Error(fmt.Sprintf("discountAreaVideos err:%v", err))
|
|
return
|
|
}
|
|
return
|
|
}
|
|
|
|
func newDiscountAreaVideos(req *DiscountVideoReq) (res []*vidmod.VideoModel, err error) {
|
|
// 按照最新添加到折扣专区的顺序排
|
|
discountAreaVideoList, _, err := discount_area_video_mod.GetListByCond(req.Filter(), req.Options())
|
|
if err != nil {
|
|
log.Error(fmt.Sprintf("discount_area_video_mod.GetListByCond err:%v", err))
|
|
return
|
|
}
|
|
vids := []primitive.ObjectID{}
|
|
for _, v := range discountAreaVideoList {
|
|
vids = append(vids, v.VideoID)
|
|
}
|
|
// 获取视频
|
|
list, err := vidmod.GetVideoListByIDsNoStatus(vids)
|
|
if err != nil {
|
|
log.Error(fmt.Sprintf("vidmod.GetVideoListByIDs err:%v", err))
|
|
return
|
|
}
|
|
// 按照原来的顺序返回(不要使用sort包排序。按照时间排序,会出现问题)
|
|
videoMap := make(map[primitive.ObjectID]*vidmod.VideoModel)
|
|
for _, v := range list {
|
|
videoMap[v.ID] = v
|
|
}
|
|
for _, v := range discountAreaVideoList {
|
|
video := videoMap[v.VideoID]
|
|
res = append(res, video)
|
|
}
|
|
return
|
|
}
|