init: web_hgdjc_server
This commit is contained in:
@@ -0,0 +1,101 @@
|
||||
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.PlayName, 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
|
||||
}
|
||||
Reference in New Issue
Block a user