Files
2026-10-26 16:28:14 +08:00

93 lines
2.4 KiB
Go

package srv_search
import (
"context"
"strconv"
"strings"
"time"
"videoweb/pub/common/srvdef"
"videoweb/pub/esmanager"
"videoweb/pub/models/esmod"
"videoweb/pub/models/videoinformationmod"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo/options"
)
func getVideoEsData(ctx context.Context, minTime, endTime *time.Time, esIndex string) (esmanager.M, *srvdef.SrvErr) {
data, serr := getVideoData(ctx, minTime, endTime)
if serr != nil {
return nil, serr
}
return videoToEsData(data), nil
}
func getVideoData(ctx context.Context, minTime, endTime *time.Time) ([]*videoinformationmod.VideoInformation, *srvdef.SrvErr) {
pageNumber := 1
pageSize := 1000
rsl := make([]*videoinformationmod.VideoInformation, 0)
filter := bson.M{}
if minTime != nil && endTime != nil {
filter[videoinformationmod.FN.VideoInformation.UpdatedAt] = bson.M{
"$gte": minTime,
"$lte": endTime,
}
}
for {
opts := &options.FindOptions{}
opts.SetSort(bson.M{videoinformationmod.FN.VideoInformation.UpdatedAt: -1})
opts.SetSkip(int64(pageSize * (pageNumber - 1)))
opts.SetLimit(int64(pageSize))
data, serr := videoinformationmod.FindManyVideoInformations(ctx, filter, opts)
if serr != nil {
return nil, serr
}
rsl = append(rsl, data...)
if len(data) < pageSize {
break
}
pageNumber++
}
return rsl, nil
}
func videoToEsData(data []*videoinformationmod.VideoInformation) esmanager.M {
rsl := make(map[string]interface{}, len(data))
for _, v := range data {
esInfo := esmod.ESVideo{
Id: v.Id,
Title: v.Title,
MediaType: v.MediaType,
AddedTime: v.AddedTime,
CreatorName: v.CreatorName,
Keyworlds: "",
Desc: v.Desc,
Remark: v.Remark,
Status: v.Status,
IsHot: v.IsHot,
Sort: v.Sort,
WatchTimes: v.Real.WatchTimes,
ShowTimes: v.Real.ShowTimes,
Comments: v.Real.Comments,
UpdatedAt: v.UpdatedAt,
CreatedAt: v.CreatedAt,
Keyworld: v.Keyworld,
CreatorId: v.CreatorId,
FirstTag: v.FirstTag,
SecondTags: v.SecondTags,
CoverImg: v.CoverImg,
Nodes: v.Nodes,
Video: v.Video,
Tags: v.Tags,
Real: v.Real,
VideoCount: v.VideoCount,
IssuedBrand: v.IssuedBrand,
Bango: v.Bango,
IssuedAt: v.IssuedAt,
}
if v.Keyworld != nil && len(v.Keyworld) > 0 {
esInfo.Keyworlds = strings.Join(v.Keyworld, " ")
}
rsl[strconv.FormatInt(v.Id, 10)] = esInfo
}
return rsl
}