@@ -0,0 +1,55 @@
|
||||
package vidtonesearcher
|
||||
|
||||
import (
|
||||
"91porn-server/app/service/searcher"
|
||||
"91porn-server/common/log"
|
||||
"91porn-server/models/v/tonerecomod"
|
||||
"91porn-server/models/v/vidmod"
|
||||
)
|
||||
|
||||
type freeAreaSearcher struct {
|
||||
uid uint64
|
||||
}
|
||||
|
||||
func newFreeAreaSearcher(uid uint64) searcher.Searcher {
|
||||
return &freeAreaSearcher{
|
||||
uid: uid,
|
||||
}
|
||||
}
|
||||
|
||||
// Search Search
|
||||
func (f *freeAreaSearcher) Search(unuse searcher.KeyWorder, opt searcher.Opter) (result searcher.Resulter, err error) {
|
||||
limitEx1 := opt.Limit() + 1
|
||||
vidList, err := vidmod.GetFreeVidList(opt.Sort(), opt.Skip(), limitEx1)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if len(vidList) == 0 {
|
||||
return &Result{
|
||||
&Resp{
|
||||
Theme: tonerecomod.FreeArea,
|
||||
List: []VideoRes{},
|
||||
PayCount: &zero,
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
hasNext := false
|
||||
if len(vidList) > int(opt.Limit()) {
|
||||
hasNext = true
|
||||
vidList = vidList[:opt.Limit()]
|
||||
}
|
||||
videoInfoList, err := searcher.GetVideoResList(f.uid, vidList)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
log.Info("freeArea search result", log.Any("totalVideoCount", len(vidList)), log.Any("respVideoCount", len(videoInfoList)))
|
||||
freeAreaPlayCount := GetToneValue().FreeAreaPlayCount
|
||||
return &Result{
|
||||
&Resp{
|
||||
List: videoInfoList,
|
||||
Theme: tonerecomod.FreeArea,
|
||||
PlayCount: &freeAreaPlayCount,
|
||||
HasNext: hasNext,
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
package vidtonesearcher
|
||||
|
||||
import (
|
||||
"91porn-server/app/service/searcher"
|
||||
"91porn-server/common/log"
|
||||
"91porn-server/models/s/statvidtotalmod"
|
||||
"91porn-server/models/v/tonerecomod"
|
||||
"91porn-server/models/v/vidmod"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
)
|
||||
|
||||
type ObjectID = primitive.ObjectID
|
||||
|
||||
type VideoSy = searcher.VideoInfo
|
||||
|
||||
// VidToneSearcher VidToneSearcher
|
||||
type goldCoinAreaSearcher struct {
|
||||
uid uint64
|
||||
}
|
||||
|
||||
var zero = int64(0)
|
||||
|
||||
// newGoldCoinAreaSearcher newGoldCoinAreaSearcher
|
||||
func newGoldCoinAreaSearcher(uid uint64) searcher.Searcher {
|
||||
return &goldCoinAreaSearcher{
|
||||
uid: uid,
|
||||
}
|
||||
}
|
||||
|
||||
// Search Search
|
||||
func (g *goldCoinAreaSearcher) Search(unuse searcher.KeyWorder, opt searcher.Opter) (result searcher.Resulter, err error) {
|
||||
limitEx1 := opt.Limit() + 1
|
||||
vidList, err := vidmod.GetPayVidList(opt.Sort(), opt.Skip(), limitEx1)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if len(vidList) == 0 {
|
||||
return &Result{
|
||||
&Resp{
|
||||
Theme: tonerecomod.GoldCoinArea,
|
||||
List: []VideoRes{},
|
||||
PayCount: &zero,
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
hasNext := false
|
||||
if len(vidList) > int(opt.Limit()) {
|
||||
hasNext = true
|
||||
vidList = vidList[:opt.Limit()]
|
||||
}
|
||||
videoInfoList, err := searcher.GetVideoResList(g.uid, vidList)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
log.Info("goldCoinArea search result", log.Any("totalVideoCount", len(vidList)), log.Any("respVideoCount", len(videoInfoList)))
|
||||
payCountMap, err := statvidtotalmod.GetPayCountMap(vidList)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
videoInfoPCList := make([]VideoRes, 0, len(videoInfoList))
|
||||
for _, info := range videoInfoList {
|
||||
if info.VideoInfo.ID == nil {
|
||||
continue
|
||||
}
|
||||
id := *info.VideoInfo.ID
|
||||
payCount := int(payCountMap[id])
|
||||
info.VideoInfo.PayCount = &payCount
|
||||
videoInfoPCList = append(videoInfoPCList, info)
|
||||
}
|
||||
goldCoinAreaPayCount := GetToneValue().GoldCoinAreaPayCount
|
||||
return &Result{
|
||||
&Resp{
|
||||
List: videoInfoPCList,
|
||||
Theme: tonerecomod.GoldCoinArea,
|
||||
PayCount: &goldCoinAreaPayCount,
|
||||
HasNext: hasNext,
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
package vidtonesearcher
|
||||
|
||||
import (
|
||||
"91porn-server/app/service/searcher"
|
||||
"91porn-server/models/v/tonerecomod"
|
||||
"91porn-server/models/v/vidmod"
|
||||
)
|
||||
|
||||
// latestUpload latestUpload
|
||||
type latestUploadSearcher struct {
|
||||
uid uint64
|
||||
}
|
||||
|
||||
// latestUpload latestUpload
|
||||
func newLatestUploadSearcher(uid uint64) searcher.Searcher {
|
||||
return &latestUploadSearcher{
|
||||
uid: uid,
|
||||
}
|
||||
}
|
||||
|
||||
// Search Search
|
||||
func (l *latestUploadSearcher) Search(unuse searcher.KeyWorder, opt searcher.Opter) (result searcher.Resulter, err error) {
|
||||
limit := opt.Limit()
|
||||
skip := opt.Skip()
|
||||
limitEx1 := limit + 1
|
||||
vidList, err := vidmod.VIDListByCreatedAt(skip, limitEx1)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if len(vidList) == 0 {
|
||||
return &Result{
|
||||
&Resp{
|
||||
Theme: tonerecomod.LatestUpload,
|
||||
List: []VideoRes{},
|
||||
PlayCount: &zero,
|
||||
HasNext: false,
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
hasNext := false
|
||||
if len(vidList) > int(limit) {
|
||||
hasNext = true
|
||||
vidList = vidList[:opt.Limit()]
|
||||
}
|
||||
videoResList, err := searcher.GetVideoResList(l.uid, vidList)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
latestUploadPlayCount := GetToneValue().LatestUploadPlayCount
|
||||
return &Result{
|
||||
&Resp{
|
||||
List: videoResList,
|
||||
Theme: tonerecomod.LatestUpload,
|
||||
PlayCount: &latestUploadPlayCount,
|
||||
HasNext: hasNext,
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
package vidtonesearcher
|
||||
|
||||
import (
|
||||
"91porn-server/app/service/searcher"
|
||||
"91porn-server/models/v/tonerecomod"
|
||||
"91porn-server/models/v/vidmod"
|
||||
)
|
||||
|
||||
// mostCommentsSearcher mostCommentsSearcher
|
||||
type mostCommentsSearcher struct {
|
||||
uid uint64
|
||||
}
|
||||
|
||||
// newMostCommentsSearcher newMostCommentsSearcher
|
||||
func newMostCommentsSearcher(uid uint64) searcher.Searcher {
|
||||
return &mostCommentsSearcher{
|
||||
uid: uid,
|
||||
}
|
||||
}
|
||||
|
||||
// Search Search
|
||||
func (g *mostCommentsSearcher) Search(unuse searcher.KeyWorder, opt searcher.Opter) (result searcher.Resulter, err error) {
|
||||
limit := opt.Limit()
|
||||
limitEx1 := limit + 1
|
||||
vidList, err := vidmod.VIDListSortByFakeCommentCount(opt.Skip(), limitEx1)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if len(vidList) == 0 {
|
||||
return &Result{
|
||||
&Resp{
|
||||
Theme: tonerecomod.MostComments,
|
||||
List: []VideoRes{},
|
||||
PlayCount: &zero,
|
||||
HasNext: false,
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
hasNext := false
|
||||
if len(vidList) > int(limit) {
|
||||
hasNext = true
|
||||
vidList = vidList[:opt.Limit()]
|
||||
}
|
||||
videoResList, err := searcher.GetVideoResList(g.uid, vidList)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
mostCommentsPlayCount := GetToneValue().MostCommentsPlayCount
|
||||
return &Result{
|
||||
&Resp{
|
||||
List: videoResList,
|
||||
Theme: tonerecomod.MostComments,
|
||||
PlayCount: &mostCommentsPlayCount,
|
||||
HasNext: hasNext,
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
package vidtonesearcher
|
||||
|
||||
import (
|
||||
"91porn-server/app/service/searcher"
|
||||
"91porn-server/models/v/tonerecomod"
|
||||
"91porn-server/models/v/vidmod"
|
||||
)
|
||||
|
||||
// latestUpload latestUpload
|
||||
type mostLikesSearcher struct {
|
||||
uid uint64
|
||||
}
|
||||
|
||||
// latestUpload latestUpload
|
||||
func newMostLikesSearcher(uid uint64) searcher.Searcher {
|
||||
return &mostLikesSearcher{
|
||||
uid: uid,
|
||||
}
|
||||
}
|
||||
|
||||
// Search Search
|
||||
func (g *mostLikesSearcher) Search(unuse searcher.KeyWorder, opt searcher.Opter) (result searcher.Resulter, err error) {
|
||||
limit := opt.Limit()
|
||||
limitEx1 := limit + 1
|
||||
vidList, err := vidmod.VIDListByFakeLikeCount(opt.Skip(), limitEx1)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if len(vidList) == 0 {
|
||||
return &Result{
|
||||
&Resp{
|
||||
Theme: tonerecomod.MostLikes,
|
||||
List: []VideoRes{},
|
||||
PlayCount: &zero,
|
||||
HasNext: false,
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
hasNext := false
|
||||
if len(vidList) > int(limit) {
|
||||
hasNext = true
|
||||
vidList = vidList[:opt.Limit()]
|
||||
}
|
||||
videoResList, err := searcher.GetVideoResList(g.uid, vidList)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
mostLikesPlayCount := GetToneValue().MostLikesPlayCount
|
||||
return &Result{
|
||||
&Resp{
|
||||
List: videoResList,
|
||||
Theme: tonerecomod.MostLikes,
|
||||
PlayCount: &mostLikesPlayCount,
|
||||
HasNext: hasNext,
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
package vidtonesearcher
|
||||
|
||||
import (
|
||||
"91porn-server/app/service/searcher"
|
||||
"91porn-server/models/v/tonerecomod"
|
||||
"91porn-server/models/v/vidmod"
|
||||
)
|
||||
|
||||
// VidToneSearcher VidToneSearcher
|
||||
type officialRecomSearcher struct {
|
||||
uid uint64
|
||||
}
|
||||
|
||||
// officialRecomSearcher officialRecomSearcher
|
||||
func newOfficialRecomSearcher(uid uint64) searcher.Searcher {
|
||||
return &officialRecomSearcher{
|
||||
uid: uid,
|
||||
}
|
||||
}
|
||||
|
||||
// Search Search
|
||||
func (g *officialRecomSearcher) Search(unuse searcher.KeyWorder, opt searcher.Opter) (result searcher.Resulter, err error) {
|
||||
limitEx1 := opt.Limit() + 1
|
||||
vidList, err := vidmod.VIDListToneOfficialRecom(opt.Skip(), limitEx1)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if len(vidList) == 0 {
|
||||
return &Result{
|
||||
&Resp{
|
||||
Theme: tonerecomod.OfficialRecom,
|
||||
List: []VideoRes{},
|
||||
PlayCount: &zero,
|
||||
HasNext: false,
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
hasNext := false
|
||||
if len(vidList) > int(opt.Limit()) {
|
||||
hasNext = true
|
||||
vidList = vidList[:opt.Limit()]
|
||||
}
|
||||
videoResList, err := searcher.GetVideoResList(g.uid, vidList)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
officialRecomPlayCount := GetToneValue().OfficialRecomPlayCount
|
||||
return &Result{
|
||||
&Resp{
|
||||
List: videoResList,
|
||||
Theme: tonerecomod.OfficialRecom,
|
||||
PlayCount: &officialRecomPlayCount,
|
||||
HasNext: hasNext,
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
package vidtonesearcher
|
||||
|
||||
import (
|
||||
"91porn-server/app/service/searcher"
|
||||
"91porn-server/models/v/tonerecomod"
|
||||
"91porn-server/models/v/vidmod"
|
||||
)
|
||||
|
||||
// playAtMostSearcher playAtMostSearcher
|
||||
type playAtMostSearcher struct {
|
||||
uid uint64
|
||||
}
|
||||
|
||||
// newPlayAtMostSearcher newPlayAtMostSearcher
|
||||
func newPlayAtMostSearcher(uid uint64) searcher.Searcher {
|
||||
return &playAtMostSearcher{
|
||||
uid: uid,
|
||||
}
|
||||
}
|
||||
|
||||
// Search Search
|
||||
func (g *playAtMostSearcher) Search(unuse searcher.KeyWorder, opt searcher.Opter) (result searcher.Resulter, err error) {
|
||||
limit := opt.Limit()
|
||||
limitEx1 := limit + 1
|
||||
vidList, err := vidmod.VIDListByFakePlayCount(opt.Skip(), limitEx1)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if len(vidList) == 0 {
|
||||
return &Result{
|
||||
&Resp{
|
||||
Theme: tonerecomod.PlayAtMost,
|
||||
List: []VideoRes{},
|
||||
PlayCount: &zero,
|
||||
HasNext: false,
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
hasNext := false
|
||||
if len(vidList) > int(limit) {
|
||||
hasNext = true
|
||||
vidList = vidList[:opt.Limit()]
|
||||
}
|
||||
videoResList, err := searcher.GetVideoResList(g.uid, vidList)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
playAtMostPlayCount := GetToneValue().PlayAtMostPlayCount
|
||||
return &Result{
|
||||
&Resp{
|
||||
List: videoResList,
|
||||
Theme: tonerecomod.PlayAtMost,
|
||||
PlayCount: &playAtMostPlayCount,
|
||||
HasNext: hasNext,
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
package vidtonesearcher
|
||||
|
||||
import (
|
||||
"91porn-server/app/service/searcher"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
)
|
||||
|
||||
// M M
|
||||
type M = bson.M
|
||||
|
||||
// A A
|
||||
type A = bson.A
|
||||
|
||||
type VideoRes = searcher.VideoRes
|
||||
|
||||
type Resp struct {
|
||||
List []VideoRes `json:"list"`
|
||||
Theme string `json:"theme"`
|
||||
PlayCount *int64 `json:"playCount,omitempty"`
|
||||
PayCount *int64 `json:"payCount,omitempty"`
|
||||
HasNext bool `json:"hasNext"`
|
||||
}
|
||||
|
||||
type Result struct {
|
||||
dat *Resp
|
||||
}
|
||||
|
||||
const MaxVideoCount = 400
|
||||
|
||||
func (*Result) Types() searcher.ResultTypes {
|
||||
return searcher.VidToneSearchResult
|
||||
}
|
||||
|
||||
func (r *Result) Data() interface{} {
|
||||
return r.dat
|
||||
}
|
||||
|
||||
func (r *Result) Count() int64 {
|
||||
if r.dat == nil {
|
||||
return 0
|
||||
}
|
||||
return 1
|
||||
}
|
||||
|
||||
func (r *Result) HasNext() bool {
|
||||
if r.dat == nil {
|
||||
return false
|
||||
}
|
||||
return r.dat.HasNext
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
package vidtonesearcher
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"91porn-server/app/appg"
|
||||
"91porn-server/app/service/searcher"
|
||||
"91porn-server/common/constant/redisconst"
|
||||
"91porn-server/common/log"
|
||||
"91porn-server/models/v/tonemod"
|
||||
"91porn-server/models/v/tonerecomod"
|
||||
)
|
||||
|
||||
type ToneValue = tonemod.ToneValue
|
||||
|
||||
// VidToneSearcher VidToneSearcher
|
||||
type VidToneSearcher struct {
|
||||
uid uint64
|
||||
theme tonerecomod.ThemeType
|
||||
}
|
||||
|
||||
// NewVidToneSearcher NewVidToneSearcher
|
||||
func NewVidToneSearcher(theme tonerecomod.ThemeType, uid uint64) searcher.Searcher {
|
||||
return &VidToneSearcher{
|
||||
uid: uid,
|
||||
theme: theme,
|
||||
}
|
||||
}
|
||||
|
||||
// Realm Realm
|
||||
func (searcher *VidToneSearcher) Theme() string {
|
||||
return searcher.theme
|
||||
}
|
||||
|
||||
// Search Search
|
||||
func (v *VidToneSearcher) Search(keyword searcher.KeyWorder, opt searcher.Opter) (result searcher.Resulter, err error) {
|
||||
switch v.theme {
|
||||
case tonerecomod.OfficialRecom:
|
||||
return newOfficialRecomSearcher(v.uid).Search(nil, opt)
|
||||
case tonerecomod.GoldCoinArea:
|
||||
return newGoldCoinAreaSearcher(v.uid).Search(nil, opt)
|
||||
case tonerecomod.LatestUpload:
|
||||
return newLatestUploadSearcher(v.uid).Search(nil, opt)
|
||||
case tonerecomod.MostLikes:
|
||||
return newMostLikesSearcher(v.uid).Search(nil, opt)
|
||||
case tonerecomod.PlayAtMost:
|
||||
return newPlayAtMostSearcher(v.uid).Search(nil, opt)
|
||||
case tonerecomod.MostComments:
|
||||
return newMostCommentsSearcher(v.uid).Search(nil, opt)
|
||||
case tonerecomod.FreeArea:
|
||||
return newFreeAreaSearcher(v.uid).Search(nil, opt)
|
||||
default:
|
||||
return nil, fmt.Errorf("search vidtonesearcher invalid theme: %s", v.theme)
|
||||
}
|
||||
}
|
||||
|
||||
func GetToneValue() ToneValue {
|
||||
var toneValue ToneValue
|
||||
redisKey := redisconst.ToneKey()
|
||||
if err := appg.Redis.Scan(redisKey, &toneValue); err != nil {
|
||||
log.Warn("search vidtonesearcher GetToneValue Scan error", log.E(err))
|
||||
}
|
||||
return toneValue
|
||||
}
|
||||
Reference in New Issue
Block a user