123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- 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
- }
|