123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- package service
- import (
- "context"
- "time"
- "go-common/app/interface/openplatform/article/dao"
- artmdl "go-common/app/interface/openplatform/article/model"
- "go-common/library/log"
- xtime "go-common/library/time"
- )
- // UpdateSortCache update sort cache
- func (s *Service) UpdateSortCache(c context.Context, aid int64, changed [][2]int64, ip string) (err error) {
- var meta *artmdl.Meta
- if meta, err = s.ArticleMeta(c, aid); (err != nil) || (meta == nil) {
- return
- }
- cids := []int64{meta.Category.ID, meta.Category.ParentID}
- var exist bool
- for _, cid := range cids {
- for _, ch := range changed {
- field := int(ch[0])
- value := ch[1]
- if exist, err = s.dao.ExpireSortCache(c, cid, field); err != nil {
- dao.PromError("sort:更新文章排序缓存")
- return
- }
- if exist && s.shouldAddSort(meta.PublishTime, field) {
- if err = s.dao.AddSortCache(c, cid, field, aid, value); err != nil {
- return
- }
- }
- }
- }
- return
- }
- func (s *Service) shouldAddSort(t xtime.Time, field int) bool {
- if (field != artmdl.FieldLike) && (field != artmdl.FieldReply) && (field != artmdl.FieldFav) && (field != artmdl.FieldView) {
- return true
- }
- limitTime := time.Now().Unix() - s.sortLimitTime
- return int64(t) > limitTime
- }
- func (s *Service) delArtSortCache(c context.Context, aid int64) (err error) {
- var (
- root, cid int64
- )
- if root, cid, err = s.RootCategory(c, aid); err != nil {
- dao.PromError("sort:删除文章缓存查找分类")
- log.Error("s.RootCategory(%d,%d) error(%+v)", aid, cid, err)
- return
- }
- cids := []int64{root, cid, _recommendCategory}
- err = s.delArtSortCacheFromCid(c, aid, cids...)
- return
- }
- func (s *Service) delArtSortCacheFromCid(c context.Context, aid int64, cids ...int64) (err error) {
- for _, cid := range cids {
- for _, field := range artmdl.SortFields {
- if err = s.dao.DelSortCache(c, cid, field, aid); err != nil {
- return
- }
- }
- }
- return
- }
- func (s *Service) addArtSortCache(c context.Context, art *artmdl.Meta) (err error) {
- if art == nil {
- return
- }
- cids := []int64{art.Category.ID, _recommendCategory}
- var oldRoot int64
- if oldRoot, err = s.CategoryToRoot(art.Category.ID); err != nil {
- dao.PromError("sort:增加文章缓存查找分类")
- log.Error("s.CategoryToRoot(%d,%d) error(%+v)", art.ID, art.Category.ID, err)
- err = nil
- } else {
- cids = append(cids, oldRoot)
- }
- if art.Stats == nil {
- if stat, e := s.stat(c, art.ID); (e == nil) && (stat != nil) {
- art.Stats = stat
- } else {
- art.Stats = new(artmdl.Stats)
- }
- }
- var exist bool
- for _, cid := range cids {
- for _, field := range artmdl.SortFields {
- if exist, err = s.dao.ExpireSortCache(c, cid, field); err != nil {
- dao.PromError("sort:增加最新文章")
- return
- }
- if !exist || !s.shouldAddSort(art.PublishTime, field) {
- continue
- }
- var value int64
- switch field {
- case artmdl.FieldNew:
- value = int64(art.PublishTime)
- case artmdl.FieldLike:
- value = art.Stats.Like
- case artmdl.FieldReply:
- value = art.Stats.Reply
- case artmdl.FieldFav:
- value = art.Stats.Favorite
- case artmdl.FieldView:
- value = art.Stats.View
- default:
- dao.PromError("sort:新增最新文章-排序分类错误")
- log.Error("addArtSortCache sort field error: %v", field)
- }
- if err = s.dao.AddSortCache(c, cid, field, art.ID, value); err != nil {
- dao.PromError("sort:新增最新文章")
- }
- }
- }
- return
- }
|