123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- package service
- import (
- "context"
- "go-common/app/interface/main/web-feed/dao"
- "go-common/app/interface/main/web-feed/model"
- artmdl "go-common/app/interface/openplatform/article/model"
- account "go-common/app/service/main/account/model"
- feedmdl "go-common/app/service/main/feed/model"
- "go-common/library/log"
- "go-common/library/net/metadata"
- )
- // Feed get feed of ups and bangumi.
- func (s *Service) Feed(c context.Context, mid int64, pn, ps int) (res []*model.Feed, err error) {
- var (
- feeds, newFeeds []*feedmdl.Feed
- upAids []int64
- accRes map[int64]*account.Card
- )
- arg := &feedmdl.ArgFeed{
- Mid: mid,
- Pn: pn,
- Ps: ps,
- RealIP: metadata.String(c, metadata.RemoteIP),
- }
- if feeds, err = s.feedRPC.WebFeed(c, arg); err != nil || len(feeds) == 0 {
- log.Error("s.feedRPC.WebFeed(%v) error(%v)", arg, err)
- if pn == 1 {
- res, err = s.dao.FeedCache(c, mid)
- log.Info("s.dao.FeedCache(%d) len(%d) error(%v)", mid, len(res), err)
- }
- return
- }
- for _, item := range feeds {
- if (item.Type == feedmdl.BangumiType) && (item.Bangumi == nil) {
- dao.PromError("bangumi为空")
- log.Error("s.feedRPC.WebFeed(%v) error(%v)", arg, err)
- continue
- }
- if (item.Type == feedmdl.ArchiveType) && (item.Archive == nil) {
- dao.PromError("archive为空")
- log.Error("s.feedRPC.WebFeed(%v) error(%v)", arg, err)
- continue
- }
- newFeeds = append(newFeeds, item)
- }
- feeds = newFeeds
- for _, item := range feeds {
- if item.Type != feedmdl.ArchiveType {
- continue
- }
- if item.Archive != nil {
- upAids = append(upAids, item.Archive.Author.Mid)
- }
- }
- accArg := &account.ArgMids{Mids: upAids}
- if accRes, err = s.accRPC.Cards3(c, accArg); err != nil {
- dao.PromError("rpc:accRPC.Infos2")
- log.Error("Feed s.accRPC.info(%v) error(%v)", arg, err)
- err = nil
- }
- for _, item := range feeds {
- tmp := model.Feed{Feed: item}
- if tmp.Type == feedmdl.ArchiveType && accRes != nil {
- if ai, ok := accRes[item.Archive.Author.Mid]; ok {
- tmp.OfficialVerify = &ai.Official
- }
- }
- res = append(res, &tmp)
- }
- if pn == 1 {
- s.cache.Save(func() {
- s.dao.SetFeedCache(context.TODO(), mid, res)
- })
- }
- return
- }
- // UnreadCount get unread count of feed
- func (s *Service) UnreadCount(c context.Context, mid int64) (count int, err error) {
- arg := &feedmdl.ArgMid{
- Mid: mid,
- RealIP: metadata.String(c, metadata.RemoteIP),
- }
- if count, err = s.feedRPC.WebUnreadCount(c, arg); err != nil {
- dao.PromError("rpc:feedRPC.WebUnreadCount")
- log.Error("s.feedRPC.UnreadCount(%v) error(%v)", arg, err)
- }
- return
- }
- // ArticleUnreadCount get unread count of feed
- func (s *Service) ArticleUnreadCount(c context.Context, mid int64) (count int, err error) {
- arg := &feedmdl.ArgMid{
- Mid: mid,
- RealIP: metadata.String(c, metadata.RemoteIP),
- }
- if count, err = s.feedRPC.ArticleUnreadCount(c, arg); err != nil {
- dao.PromError("feed:ArticleUnreadCount")
- log.Error("s.feedRPC.ArticleUnreadCount(%v) error(%v)", arg, err)
- }
- return
- }
- // ArticleFeed get feed of ups and bangumi.
- func (s *Service) ArticleFeed(c context.Context, mid int64, pn, ps int) (res []*artmdl.Meta, err error) {
- arg := &feedmdl.ArgFeed{
- Mid: mid,
- Pn: pn,
- Ps: ps,
- RealIP: metadata.String(c, metadata.RemoteIP),
- }
- if res, err = s.feedRPC.ArticleFeed(c, arg); err != nil {
- log.Error("s.feedRPC.ArticleFeed(%v) error(%v)", arg, err)
- return
- }
- var mids []int64
- var accRes map[int64]*account.Card
- for _, meta := range res {
- if meta.Author != nil {
- mids = append(mids, meta.Author.Mid)
- }
- }
- accArg := &account.ArgMids{
- Mids: mids,
- }
- if accRes, err = s.accRPC.Cards3(c, accArg); err != nil {
- dao.PromError("rpc:accRPC.Infos2")
- log.Error("Feed s.accRPC.info(%v) error(%v)", arg, err)
- err = nil
- return
- }
- for _, item := range res {
- if (item.Author == nil) || (accRes[item.Author.Mid] == nil) {
- continue
- }
- info := accRes[item.Author.Mid]
- item.Author = &artmdl.Author{
- Mid: item.Author.Mid,
- Name: info.Name,
- Face: info.Face,
- Pendant: artmdl.Pendant{
- Pid: int32(info.Pendant.Pid),
- Name: info.Pendant.Name,
- Image: info.Pendant.Image,
- Expire: int32(info.Pendant.Expire),
- },
- Nameplate: artmdl.Nameplate{
- Nid: info.Nameplate.Nid,
- Name: info.Nameplate.Name,
- Image: info.Nameplate.Image,
- ImageSmall: info.Nameplate.ImageSmall,
- Level: info.Nameplate.Level,
- Condition: info.Nameplate.Condition,
- },
- }
- if info.Official.Role == 0 {
- item.Author.OfficialVerify.Type = -1
- } else {
- if info.Official.Role <= 2 {
- item.Author.OfficialVerify.Type = 0
- } else {
- item.Author.OfficialVerify.Type = 1
- }
- item.Author.OfficialVerify.Desc = info.Official.Title
- }
- }
- return
- }
|