Files
huangguo_server/models/v/vidmod/ranking.go
T
rootandClaude Opus 5 8679200f41 Initial commit
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-15 13:57:10 +08:00

37 lines
1.1 KiB
Go

package vidmod
import (
"time"
"91porn-server/common/stderr"
"91porn-server/models/commod"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo/options"
)
const rankingQueryMaxTime = 3 * time.Second
// FindCumulativeRanking keeps the ranking usable when the Redis period rank is
// empty. It reuses persisted popularity counters and the existing compound
// index for a bounded fallback query.
func FindCumulativeRanking(newsType string, page commod.Page) ([]*VideoModel, bool, error) {
if newsType == "" || page.PageNumber == 0 || page.PageSize == 0 || page.PageSize > 100 {
return nil, false, stderr.ErrParamError
}
filter, sorts := cumulativeRankingQuery(newsType)
opts := options.Find().
SetSkip(page.Skip64()).
SetLimit(page.Limit64()).
SetSort(sorts).
SetMaxTime(rankingQueryMaxTime)
return FindList(filter, opts)
}
func cumulativeRankingQuery(newsType string) (bson.M, bson.D) {
return bson.M{
"newsType": newsType,
"status": bson.M{"$in": []int{CheckPass, Free}},
}, bson.D{{Key: "likeCount", Value: -1}, {Key: "reviewAt", Value: -1}}
}