Initial commit

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-15 13:57:10 +08:00
co-authored by Claude Opus 5
commit 8679200f41
1897 changed files with 257900 additions and 0 deletions
@@ -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)
}