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
+148
View File
@@ -0,0 +1,148 @@
package searchlogmod
import (
"fmt"
"time"
"91porn-server/common/constant"
"91porn-server/common/db"
"91porn-server/common/log"
"91porn-server/models"
"91porn-server/models/commod"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
)
var mdb *db.MongoDB
const table = models.SearchLog
func coll(t *db.MongoTool) *db.MongoTool {
if t == nil {
return mdb.Coll(table)
}
return t.Coll(table)
}
// InitIndex 初始化索引
func initIndex() {
many := []mongo.IndexModel{
{
Keys: bson.D{{Key: "createdAt", Value: -1}},
},
{
Keys: bson.D{{Key: "uid", Value: 1}},
},
{
Keys: bson.D{{Key: "realm", Value: 1}}, //不会新建 realm 索引
},
{
Keys: bson.D{{Key: "realm", Value: 1}, {Key: "keyword", Value: 1}}, //不会新建 realm 索引
},
}
if _, err := coll(nil).CreateIndex(many); err != nil {
panic(fmt.Sprintf("%s model set index err ==>[%+v]", table, err))
}
}
// FindHotSearch 根据搜索量获取热搜排行榜
func FindHotSearch(realm constant.RealmType, page commod.Page) ([]SearchCount, error) {
p := []M{
{
"$match": M{"realm": realm},
},
{
"$group": M{"_id": "$keyword", "count": M{"$sum": 1}},
},
{
"$match": M{"_id": M{"$ne": ""}},
},
{
"$sort": bson.D{{Key: "count", Value: -1}},
},
{
"$skip": (page.PageNumber - 1) * page.PageSize,
},
{
"$limit": page.PageSize,
},
}
data := make([]SearchCount, 0, page.PageSize)
if err := coll(nil).Aggregate(&data, p); err != nil {
log.ZapLog.Error(fmt.Sprintf("models record SearchLog FindSearchCountVid fail error:%+v:", err))
return nil, err
}
return data, nil
}
// InsertMany InsertMany
func InsertMany(uid uint64, realm constant.RealmType, keyWords []string) error {
now := time.Now()
searchLogDoc := make([]SearchLogDoc, 0, len(keyWords))
for _, keyword := range keyWords {
if keyword == "" {
continue
}
searchLogDoc = append(searchLogDoc, SearchLogDoc{
Realm: realm,
UID: uid,
Keyword: keyword,
CreatedAt: now,
})
}
if len(searchLogDoc) == 0 {
return nil
}
if _, err := coll(nil).InsertMany(&searchLogDoc); err != nil {
log.ZapLog.Error("SearchLog InsertMany error", log.E(err))
return err
}
return nil
}
func GetKeywordCountMapByTime(start time.Time, end time.Time, realm constant.RealmType) (map[string]int64, error) {
pipeline := []M{
{
"$match": M{
"createdAt": M{
"$gte": start,
"$lt": end,
},
"realm": realm,
},
},
{
"$sortByCount": "$keyword",
},
}
list := []struct {
Keyword string `bson:"_id"`
Count int64 `bson:"count"`
}{}
if err := coll(nil).Aggregate(&list, pipeline); err != nil {
return nil, fmt.Errorf("GetKeywordCountMapByTime err: %s", err.Error())
}
m := make(map[string]int64, len(list))
for _, v := range list {
m[v.Keyword] = v.Count
}
return m, nil
}
// 根据时间段获取搜索日志
func GetSearchLogByTimeRange(start time.Time, end time.Time) (data []SearchLog, err error) {
var query = bson.M{
"createdAt": bson.M{"$gte": start, "$lt": end},
}
if err = coll(nil).Find(&data, query); err != nil {
log.Error("models SearchLog model GetSearchLogByTimeRange error", log.E(err))
return
}
return
}
func DeleteBeforeCreatedAt(t *db.MongoTool, tm time.Time) error {
_, err := coll(t).DeleteMany(bson.M{"createdAt": bson.M{"$lt": tm}})
return err
}