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 }