101 lines
3.2 KiB
Go
101 lines
3.2 KiB
Go
package playletcache
|
|
|
|
import (
|
|
"context"
|
|
"videoweb/pub/common/log"
|
|
"videoweb/pub/models/playletmod"
|
|
|
|
"go.mongodb.org/mongo-driver/bson"
|
|
"go.mongodb.org/mongo-driver/mongo/options"
|
|
)
|
|
|
|
const GuessLikeLimit = 15
|
|
|
|
var guessLikeProjection = bson.D{
|
|
{Key: playletmod.FN.Playlet.Id, Value: 1},
|
|
{Key: playletmod.FN.Playlet.Status, Value: 1},
|
|
{Key: playletmod.FN.Playlet.IsFeatured, Value: 1},
|
|
{Key: playletmod.FN.Playlet.IsRecommend, Value: 1},
|
|
{Key: playletmod.FN.Playlet.ShowOnBanner, Value: 1},
|
|
{Key: playletmod.FN.Playlet.Banner, Value: 1},
|
|
{Key: playletmod.FN.Playlet.OnlineAt, Value: 1},
|
|
{Key: playletmod.FN.Playlet.MediaCreatedAt, Value: 1},
|
|
{Key: playletmod.FN.Playlet.MediaUpdatedAt, Value: 1},
|
|
{Key: playletmod.FN.Playlet.ThemeIds, Value: 1},
|
|
{Key: playletmod.FN.Playlet.Title, Value: 1},
|
|
{Key: playletmod.FN.Playlet.Description, Value: 1},
|
|
{Key: playletmod.FN.Playlet.Slug, Value: 1},
|
|
{Key: playletmod.FN.Playlet.Desc, Value: 1},
|
|
{Key: playletmod.FN.Playlet.Anchor, Value: 1},
|
|
{Key: playletmod.FN.Playlet.Cover, Value: 1},
|
|
{Key: playletmod.FN.Playlet.CompressedCover, Value: 1},
|
|
{Key: playletmod.FN.Playlet.TagIds, Value: 1},
|
|
{Key: playletmod.FN.Playlet.TotalEpisode, Value: 1},
|
|
{Key: playletmod.FN.Playlet.UpdateStatus, Value: 1},
|
|
{Key: playletmod.FN.Playlet.CountBrowse, Value: 1},
|
|
{Key: playletmod.FN.Playlet.HeatValue, Value: 1},
|
|
{Key: playletmod.FN.Playlet.CountCollect, Value: 1},
|
|
{Key: playletmod.FN.Playlet.CountLike, Value: 1},
|
|
{Key: playletmod.FN.Playlet.VirtualCountLike, Value: 1},
|
|
{Key: playletmod.FN.Playlet.IsOriginal, Value: 1},
|
|
{Key: playletmod.FN.Playlet.OperateType, Value: 1},
|
|
{Key: playletmod.FN.Playlet.CreatedAt, Value: 1},
|
|
{Key: playletmod.FN.Playlet.UpdatedAt, Value: 1},
|
|
{Key: "seoInfo", Value: 1},
|
|
}
|
|
|
|
func updateGuessLikeCache(ctx context.Context) {
|
|
list, err := playletmod.FindManyPlaylet(ctx, bson.M{
|
|
playletmod.FN.Playlet.Status: playletmod.StatusUp,
|
|
}, options.Find().
|
|
SetProjection(guessLikeProjection).
|
|
SetSort(bson.D{
|
|
{Key: playletmod.FN.Playlet.CountCollect, Value: -1},
|
|
{Key: playletmod.FN.Playlet.Id, Value: -1},
|
|
}).
|
|
SetLimit(GuessLikeLimit))
|
|
if err != nil {
|
|
log.Warn("playletcache.updateGuessLikeCache failed", log.E(err))
|
|
return
|
|
}
|
|
temp := make([]*playletmod.Playlet, 0, len(list))
|
|
for _, item := range list {
|
|
if cloned := clonePlaylet(item); cloned != nil {
|
|
temp = append(temp, cloned)
|
|
}
|
|
}
|
|
cache.lock.Lock()
|
|
cache.guessLike = temp
|
|
cache.lock.Unlock()
|
|
}
|
|
|
|
// ListGuessLike 返回收藏量最多的上架短剧,最多15部。
|
|
func ListGuessLike() []*playletmod.Playlet {
|
|
cache.lock.RLock()
|
|
defer cache.lock.RUnlock()
|
|
if len(cache.guessLike) == 0 {
|
|
return make([]*playletmod.Playlet, 0)
|
|
}
|
|
result := make([]*playletmod.Playlet, 0, len(cache.guessLike))
|
|
for _, item := range cache.guessLike {
|
|
if cloned := clonePlaylet(item); cloned != nil {
|
|
result = append(result, cloned)
|
|
}
|
|
}
|
|
return result
|
|
}
|
|
|
|
func clonePlaylet(item *playletmod.Playlet) *playletmod.Playlet {
|
|
if item == nil || item.Id <= 0 {
|
|
return nil
|
|
}
|
|
cp := *item
|
|
if item.ThemeIds != nil {
|
|
cp.ThemeIds = append([]int64(nil), item.ThemeIds...)
|
|
}
|
|
if item.TagIds != nil {
|
|
cp.TagIds = append([]int64(nil), item.TagIds...)
|
|
}
|
|
return &cp
|
|
}
|