You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
139 lines
3.6 KiB
139 lines
3.6 KiB
package service |
|
|
|
import ( |
|
"context" |
|
"strconv" |
|
|
|
"go-common/app/interface/openplatform/article/dao" |
|
"go-common/app/interface/openplatform/article/model" |
|
account "go-common/app/service/main/account/model" |
|
"go-common/library/ecode" |
|
"go-common/library/log" |
|
|
|
"go-common/library/sync/errgroup" |
|
) |
|
|
|
// ViewInfo get view info |
|
func (s *Service) ViewInfo(c context.Context, mid, id int64, ip string, cheat *model.CheatInfo, plat int8, from string) (res *model.ViewInfo, err error) { |
|
var art *model.Meta |
|
group := &errgroup.Group{} |
|
if art, err = s.ArticleMeta(c, id); (err != nil) || (art == nil) || (!art.IsNormal()) { |
|
err = ecode.NothingFound |
|
return |
|
} |
|
res = &model.ViewInfo{ |
|
Title: art.Title, |
|
BannerURL: art.BannerURL, |
|
Mid: art.Author.Mid, |
|
ImageURLs: art.ImageURLs, |
|
OriginImageURLs: art.OriginImageURLs, |
|
ShowLaterWatch: s.setting.ShowLaterWatch, |
|
ShowSmallWindow: s.setting.ShowSmallWindow, |
|
} |
|
res.Shareable = !art.AttrVal(model.AttrBitNoDistribute) |
|
if mid > 0 { |
|
res.IsAuthor, _, _ = s.IsAuthor(c, mid) |
|
group.Go(func() error { |
|
res.Like, _ = s.isLike(c, mid, id) |
|
return nil |
|
}) |
|
group.Go(func() error { |
|
if art.Author != nil { |
|
res.Attention, _ = s.isAttention(c, mid, art.Author.Mid) |
|
} |
|
return nil |
|
}) |
|
group.Go(func() error { |
|
res.Favorite, _ = s.IsFav(c, mid, id) |
|
return nil |
|
}) |
|
group.Go(func() error { |
|
res.Coin, _ = s.Coin(c, mid, id, ip) |
|
return nil |
|
}) |
|
} |
|
group.Go(func() error { |
|
if stat, e := s.stat(c, id); (e == nil) && (stat != nil) { |
|
res.Stats = *stat |
|
res.Stats.Dynamic, _ = s.dao.DynamicCount(c, id) |
|
} |
|
return nil |
|
}) |
|
group.Go(func() error { |
|
var lid int64 |
|
lists, _ := s.dao.ArtsList(c, []int64{id}) |
|
if lists[id] != nil { |
|
res.InList = true |
|
lid = lists[id].ID |
|
} |
|
if mid > 0 { |
|
s.AddHistory(c, mid, id, lid, ip, plat, from) |
|
} |
|
return nil |
|
}) |
|
group.Go(func() error { |
|
info, _ := s.authorDetail(c, art.Author.Mid) |
|
if info != nil { |
|
res.AuthorName = info.Name |
|
} |
|
return nil |
|
}) |
|
cache.Save(func() { |
|
if mid == 0 || from == "articleSlide" { |
|
return |
|
} |
|
if info, _ := s.accountInfo(context.TODO(), mid); info != nil { |
|
cheat.Lv = strconv.FormatInt(int64(info.Level), 10) |
|
} |
|
s.dao.PubView(context.TODO(), mid, id, ip, cheat) |
|
}) |
|
group.Wait() |
|
return |
|
} |
|
|
|
func (s *Service) isAttention(c context.Context, mid, up int64) (ok bool, err error) { |
|
arg := account.ArgRelation{Mid: mid, Owner: up} |
|
relation, err := s.accountRPC.Relation3(c, &arg) |
|
if err != nil { |
|
dao.PromError("view:获取关注列表") |
|
log.Error("s.accountRPC.Relation2(%+v) err: %+v", arg, err) |
|
return |
|
} |
|
ok = relation.Following |
|
return |
|
} |
|
|
|
func (s *Service) isAttentions(c context.Context, mid int64, ups []int64) (res map[int64]bool, err error) { |
|
arg := account.ArgRelations{Mid: mid, Owners: ups} |
|
relations, err := s.accountRPC.Relations3(c, &arg) |
|
if err != nil { |
|
dao.PromError("view:批量获取关注列表") |
|
log.Error("s.accountRPC.Relations3(%+v) err: %+v", arg, err) |
|
return |
|
} |
|
res = make(map[int64]bool) |
|
for id, r := range relations { |
|
res[id] = r.Following |
|
} |
|
return |
|
} |
|
|
|
func (s *Service) isBlacks(c context.Context, mid int64, ups []int64) (res map[int64]struct{}, err error) { |
|
arg := account.ArgMid{Mid: mid} |
|
res, err = s.accountRPC.Blacks3(c, &arg) |
|
if err != nil { |
|
dao.PromError("view:获取黑名单列表") |
|
log.Error("s.accountRPC.Blacks3(%+v) err: %+v", arg, err) |
|
return |
|
} |
|
return |
|
} |
|
|
|
func (s *Service) checkArticle(c context.Context, id int64) (err error) { |
|
var art *model.Meta |
|
if art, err = s.ArticleMeta(c, id); (err != nil) || (art == nil) { |
|
err = ecode.NothingFound |
|
return |
|
} |
|
return |
|
}
|
|
|