@@ -0,0 +1,117 @@
|
||||
package vidhotsearcher
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"91porn-server/app/service/searcher"
|
||||
"91porn-server/common/log"
|
||||
"91porn-server/models/s/statvidmod"
|
||||
"91porn-server/models/v/vidmod"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
)
|
||||
|
||||
type ObjectID = primitive.ObjectID
|
||||
|
||||
// VidHotSearcher VidHotSearcher
|
||||
type VidHotSearcher struct {
|
||||
uid uint64
|
||||
typ ResultType
|
||||
}
|
||||
|
||||
// NewVidHotSearcher NewVidHotSearcher
|
||||
func NewVidHotSearcher(uid uint64) searcher.Searcher {
|
||||
return &VidHotSearcher{
|
||||
uid: uid,
|
||||
typ: Video,
|
||||
}
|
||||
}
|
||||
|
||||
// NewRichVidHotSearcher NewRichVidHotSearcher
|
||||
func NewRichVidHotSearcher(uid uint64) searcher.Searcher {
|
||||
return &VidHotSearcher{
|
||||
uid: uid,
|
||||
typ: RichVido,
|
||||
}
|
||||
}
|
||||
|
||||
// Search Search
|
||||
func (v *VidHotSearcher) Search(unuse searcher.KeyWorder, opt searcher.Opter) (result searcher.Resulter, err error) {
|
||||
var (
|
||||
vidList []ObjectID
|
||||
countMap map[ObjectID]int64
|
||||
)
|
||||
limitEx := opt.Limit() + 1
|
||||
if isEarlyMorning1AM(time.Now()) {
|
||||
vidList, err = vidmod.VIDListByCreatedAt(opt.Skip(), limitEx)
|
||||
} else {
|
||||
vidList, countMap, err = statvidmod.GetDailyPlayCountGroup(opt.Skip(), limitEx)
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if len(vidList) == 0 {
|
||||
return &Result{
|
||||
dat: []VideoRes{},
|
||||
richDat: []RichVidRes{},
|
||||
typ: v.typ,
|
||||
hasNext: false,
|
||||
}, nil
|
||||
}
|
||||
hasNext := false
|
||||
if len(vidList) > int(opt.Limit()) {
|
||||
vidList = vidList[:opt.Limit()]
|
||||
hasNext = true
|
||||
}
|
||||
if v.typ == Video {
|
||||
videoResList, err := searcher.GetVideoResList(v.uid, vidList)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
setVideoResListPayCount(videoResList, countMap)
|
||||
return &Result{
|
||||
dat: videoResList,
|
||||
typ: v.typ,
|
||||
hasNext: hasNext,
|
||||
}, nil
|
||||
} else {
|
||||
richVideoResList, err := searcher.GetRichVideoResList(v.uid, vidList)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
setRichVideoResListPayCount(richVideoResList, countMap)
|
||||
return &Result{
|
||||
richDat: richVideoResList,
|
||||
typ: v.typ,
|
||||
hasNext: hasNext,
|
||||
}, nil
|
||||
}
|
||||
}
|
||||
|
||||
func setVideoResListPayCount(list []VideoRes, countMap map[ObjectID]int64) {
|
||||
for i := 0; i < len(list); i++ {
|
||||
video := list[i]
|
||||
vid := *video.VideoInfo.ID
|
||||
playCount := int(countMap[vid])
|
||||
video.PlayCount = &playCount
|
||||
list[i] = video
|
||||
}
|
||||
}
|
||||
|
||||
func setRichVideoResListPayCount(list []RichVidRes, countMap map[ObjectID]int64) {
|
||||
for i := 0; i < len(list); i++ {
|
||||
video := list[i]
|
||||
vid := *video.VideoInfo.ID
|
||||
playCount := int(countMap[vid])
|
||||
video.PlayCount = &playCount
|
||||
list[i] = video
|
||||
}
|
||||
}
|
||||
|
||||
//1:00 - 1:10
|
||||
func isEarlyMorning1AM(cur time.Time) bool {
|
||||
start := time.Date(cur.Year(), cur.Month(), cur.Day(), 1, 0, 0, 0, cur.Location())
|
||||
end := time.Date(cur.Year(), cur.Month(), cur.Day(), 1, 10, 0, 0, cur.Location())
|
||||
log.Info("vidhotsearcher isEarlyMorning1AM", log.Any("start", start.String()), log.Any("end", end.String()), log.Any("cur", cur.String()))
|
||||
return cur.After(start) && cur.Before(end)
|
||||
}
|
||||
Reference in New Issue
Block a user