Files
huangguo_server/app/service/vidser/media_library.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

155 lines
4.3 KiB
Go

package vidser
import (
"91porn-server/app/service/mediaser"
"91porn-server/common/constant"
"91porn-server/common/elastic"
"91porn-server/common/log"
"91porn-server/models/v/mediamod"
"fmt"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo/options"
"time"
)
func (in *LibraryElasticSearchRequest) MediaLibrarySearch() (AppElasticSearchLibraryResponse, error) {
resp := AppElasticSearchLibraryResponse{}
from := int64((in.PageNumber - 1) * (in.PageSize))
size := int64(in.PageSize + 1)
must := elastic.A{
{"term": elastic.M{"mediaType.keyword": HandleMediaCanvasType(in.Keyword.Canvas.Key)}},
}
if in.Keyword.Tags.ID != "" {
tag := elastic.M{"term": elastic.M{"tags.keyword": in.Keyword.Tags.ID}}
must = append(must, tag)
}
timeType := HandleMediaTimeType(in.Keyword.TimeType.Key)
must = append(must, timeType...)
payType := HandleMediaPayType(in.Keyword.PaymentType.Key)
must = append(must, payType...)
short := HandleMediaShort(in.Keyword.OrderBy.Key)
// 根据数据结构组装数据
query := elastic.M{
"query": elastic.M{
"bool": elastic.M{
"must": must,
},
},
"sort": short,
"from": from,
"size": size,
}
res, err := mediamod.SearchByCondWithTotal(query)
if err != nil {
return resp, nil
}
if uint64(len(res.Hits)) > in.PageSize {
res.Hits = res.Hits[:in.PageSize]
resp.HasNext = true
}
mIds := make([]primitive.ObjectID, len(res.Hits))
for i, v := range res.Hits {
if !v.Source.ID.IsZero() {
mIds[i] = v.Source.ID
}
}
// 漫画、动漫、文字小说、有声小说
filter := bson.M{"_id": bson.M{"$in": mIds}, "status": 1}
op := options.Find().SetSort(bson.D{{Key: "sectionSort", Value: -1}, {Key: "createdAt", Value: -1}})
mediaBases, err := mediamod.QueryMediaByCond(filter, op)
if err != nil {
log.Error(fmt.Sprintf("mediaLibrarySearch mediamod.QueryMediaByCond err:%v", err))
return resp, err
}
if len(mediaBases) == 0 {
log.Warn("mediaLibrarySearch no video info")
return resp, nil
}
ret := mediaser.FillMedias(mediaBases, in.UID, true)
resp.AllMediaList = ret
resp.Total = res.Total.Value
return resp, nil
}
func HandleMediaTimeType(key string) elastic.A {
var timeTypeValue = elastic.A{}
now := time.Now()
switch key {
case "1":
timeTypeValue = append(timeTypeValue,
elastic.M{"range": elastic.M{"createdAt": elastic.M{"gt": now.AddDate(0, -1, 0)}}},
)
case "2":
timeTypeValue = append(timeTypeValue,
elastic.M{"range": elastic.M{"createdAt": elastic.M{"gt": now.AddDate(0, -3, 0), "lt": now.AddDate(0, -1, 0)}}},
)
case "3":
timeTypeValue = append(timeTypeValue,
elastic.M{"range": elastic.M{"createdAt": elastic.M{"gt": now.AddDate(0, -6, 0), "lt": now.AddDate(0, -3, 0)}}},
)
case "4":
timeTypeValue = append(timeTypeValue,
elastic.M{"range": elastic.M{"createdAt": elastic.M{"gt": now.AddDate(-5, 0, 0), "lt": now.AddDate(0, -6, 0)}}},
)
default:
timeTypeValue = append(timeTypeValue,
elastic.M{"range": elastic.M{"createdAt": elastic.M{"gt": now.AddDate(-3, -2, 0)}}},
)
}
return timeTypeValue
}
func HandleMediaPayType(key string) elastic.A {
var payTypeValue = elastic.A{}
switch key {
case "free":
payTypeValue = append(payTypeValue,
elastic.M{"term": elastic.M{"permission": 2}},
)
case "vip":
payTypeValue = append(payTypeValue,
elastic.M{"term": elastic.M{"permission": 0}},
)
case "point":
payTypeValue = append(payTypeValue,
elastic.M{"term": elastic.M{"permission": 1}},
)
default:
payTypeValue = append(payTypeValue, elastic.M{"terms": elastic.M{"permission": []int{0, 1, 2}}})
}
return payTypeValue
}
func HandleMediaShort(key string) elastic.A {
var payTypeValue elastic.A
switch key {
case "playNum":
payTypeValue = elastic.A{{"countBrowse": elastic.M{"order": "desc"}}}
case "love":
payTypeValue = elastic.A{{"countCollect": elastic.M{"order": "desc"}}}
case "new":
payTypeValue = elastic.A{{"createdAt": elastic.M{"order": "desc"}}}
default:
payTypeValue = elastic.A{{"countBrowse": elastic.M{"order": "desc"}}, {"createdAt": elastic.M{"order": "desc"}}}
}
return payTypeValue
}
func HandleMediaCanvasType(key string) string {
var moduleTypeValue string
switch key {
case constant.Cartoon, constant.Comics:
moduleTypeValue = key
default:
moduleTypeValue = constant.Text
}
return moduleTypeValue
}