123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317 |
- package service
- import (
- "context"
- "time"
- "go-common/app/interface/main/space/model"
- artmdl "go-common/app/interface/openplatform/article/model"
- accwar "go-common/app/service/main/account/api"
- blkmdl "go-common/app/service/main/member/model/block"
- relmdl "go-common/app/service/main/relation/model"
- upmdl "go-common/app/service/main/up/api/v1"
- "go-common/library/conf/env"
- "go-common/library/ecode"
- "go-common/library/log"
- "go-common/library/net/metadata"
- "go-common/library/sync/errgroup"
- )
- const (
- _devicePad = "pad"
- _platShopH5 = 1
- _shopGoodsOn = 1
- )
- // AppIndex app index info.
- func (s *Service) AppIndex(c context.Context, arg *model.AppIndexArg) (data *model.AppIndex, err error) {
- if env.DeployEnv == env.DeployEnvProd {
- if _, ok := s.BlacklistValue[arg.Vmid]; ok {
- err = ecode.NothingFound
- return
- }
- }
- var appInfo *model.AppAccInfo
- if appInfo, err = s.appAccInfo(c, arg.Mid, arg.Vmid, arg.Platform, arg.Device); err != nil {
- return
- }
- data = new(model.AppIndex)
- data.Info = appInfo
- group, errCtx := errgroup.WithContext(c)
- group.Go(func() error {
- data.Tab, _ = s.appTabInfo(errCtx, arg.Mid, arg.Vmid, arg.Device, arg.Platform)
- return nil
- })
- if arg.Device == _devicePad {
- group.Go(func() error {
- data.Archive, _ = s.UpArcs(errCtx, arg.Vmid, _samplePn, arg.Ps)
- return nil
- })
- }
- group.Go(func() error {
- dyListArg := &model.DyListArg{Mid: arg.Mid, Vmid: arg.Vmid, Qn: arg.Qn, Pn: _samplePn}
- data.Dynamic, _ = s.DynamicList(errCtx, dyListArg)
- return nil
- })
- group.Wait()
- if arg.Device == _devicePad {
- if data.Archive != nil && len(data.Archive.List) > 0 {
- data.Tab.Archive = true
- }
- }
- if data.Dynamic != nil && len(data.Dynamic.List) > 0 {
- data.Tab.Dynamic = true
- }
- return
- }
- // AppAccInfo get app account info.
- func (s *Service) appAccInfo(c context.Context, mid, vmid int64, platform, device string) (data *model.AppAccInfo, err error) {
- var (
- profile *accwar.ProfileStatReply
- ip = metadata.String(c, metadata.RemoteIP)
- )
- data = new(model.AppAccInfo)
- if profile, err = s.accClient.ProfileWithStat3(c, &accwar.MidReq{Mid: vmid}); err != nil {
- if ecode.Cause(err) == ecode.UserNotExist {
- err = ecode.NothingFound
- return
- }
- log.Error("s.accClient.ProfileWithStat3(%d) error(%v)", vmid, err)
- err = nil
- profile = model.DefaultProfileStat
- } else if profile == nil || profile.Profile == nil {
- profile = model.DefaultProfileStat
- }
- data.FromProfile(profile)
- if data.Mid == 0 {
- data.Mid = vmid
- }
- group, errCtx := errgroup.WithContext(c)
- data.Relation = struct{}{}
- data.BeRelation = struct{}{}
- if mid > 0 {
- if mid != vmid {
- group.Go(func() error {
- if relation, err := s.relation.Relation(errCtx, &relmdl.ArgRelation{Mid: mid, Fid: vmid, RealIP: ip}); err != nil {
- log.Error("s.relation.Relation(%d,%d,%s) error %v", mid, vmid, ip, err)
- } else if relation != nil {
- data.Relation = relation
- }
- return nil
- })
- group.Go(func() error {
- if relation, err := s.relation.Relation(errCtx, &relmdl.ArgRelation{Mid: vmid, Fid: mid, RealIP: ip}); err != nil {
- log.Error("s.relation.Relation(%d,%d,%s) error %v", vmid, mid, ip, err)
- } else if relation != nil {
- data.BeRelation = relation
- }
- return nil
- })
- } else {
- data.LevelInfo = profile.LevelInfo
- if data.Silence == _silenceForbid {
- group.Go(func() error {
- if i, err := s.member.BlockInfo(errCtx, &blkmdl.RPCArgInfo{MID: mid}); err != nil {
- log.Error("s.member.BlockInfo mid(%d) error(%v)", mid, err)
- data.Block = &model.AccBlock{Status: _accBlockDefault}
- } else {
- data.Block = &model.AccBlock{
- Status: int(i.BlockStatus),
- }
- if i.BlockStatus == blkmdl.BlockStatusLimit {
- if time.Now().Unix() >= i.EndTime {
- data.Block.IsDue = _accBlockDue
- }
- if status, err := s.dao.IsAnswered(errCtx, mid, i.StartTime); err == nil {
- data.Block.IsAnswered = status
- }
- }
- }
- return nil
- })
- }
- }
- }
- //get top photo
- group.Go(func() error {
- data.TopPhoto, _ = s.dao.TopPhoto(errCtx, mid, vmid, platform, device)
- return nil
- })
- //get live status
- group.Go(func() error {
- if live, err := s.dao.Live(errCtx, vmid, ""); err != nil || live == nil {
- log.Error("s.dao.Live error(%+v) live(%+v)", err, live)
- data.Live = struct{}{}
- } else {
- data.Live = live
- }
- return nil
- })
- //get live metal
- group.Go(func() error {
- if fansBadge, err := s.dao.LiveMetal(errCtx, vmid); err != nil {
- log.Error("s.dao.LiveMetal error(%+v)", err)
- } else {
- data.FansBadge = fansBadge
- }
- return nil
- })
- //get audio card
- group.Go(func() error {
- if card, err := s.dao.AudioCard(errCtx, vmid); err != nil {
- log.Error("s.dao.AudioCard error(%+v)", err)
- } else {
- if v, ok := card[vmid]; ok && v.Type == _audioCardOn && v.Status == 1 {
- data.Audio = 1
- }
- }
- return nil
- })
- //get elec info
- group.Go(func() error {
- if elec, err := s.dao.ElecInfo(errCtx, vmid, mid); err != nil || elec == nil {
- log.Error("appAccInfo s.dao.ElecInfo vmid:%d mid:%d error(%+v) elec(%+v)", vmid, mid, err, elec)
- data.Elec = struct{}{}
- } else {
- elec.Show = true
- data.Elec = elec
- }
- return nil
- })
- //get shop info
- group.Go(func() error {
- if shop, err := s.dao.ShopLink(errCtx, vmid, _platShopH5); err != nil || shop == nil {
- log.Error("s.dao.ShopInfo error(%+v) shop(%+v)", err, shop)
- data.Shop = struct{}{}
- } else {
- data.Shop = &model.ShopInfo{ID: shop.ShopID, Name: shop.Name, URL: shop.JumpURL}
- }
- return nil
- })
- //audio card
- group.Go(func() error {
- if cert, err := s.dao.AudioUpperCert(errCtx, vmid); err != nil {
- log.Error("s.dao.AudioUpperCert error(%+v)", err)
- } else if cert != nil && cert.Cert != nil && cert.Cert.Type != -1 && cert.Cert.Desc != "" {
- if data.OfficialInfo.Type == _officialNoType {
- data.OfficialInfo.Type = cert.Cert.Type
- }
- if data.OfficialInfo.Desc != "" {
- data.OfficialInfo.Desc = data.OfficialInfo.Desc + "、" + cert.Cert.Desc
- } else {
- data.OfficialInfo.Desc = cert.Cert.Desc
- }
- }
- return nil
- })
- //group count
- group.Go(func() error {
- if fansGroup, err := s.dao.GroupsCount(errCtx, mid, vmid); err != nil {
- log.Error("s.dao.GroupsCount mid(%d) vmid(%d) error(%v)", mid, vmid, err)
- } else {
- data.FansGroup = fansGroup
- }
- return nil
- })
- group.Wait()
- return
- }
- // AppTabInfo get app tab info.
- func (s *Service) appTabInfo(c context.Context, mid, vmid int64, device, platform string) (tab *model.AppTab, err error) {
- ip := metadata.String(c, metadata.RemoteIP)
- tab = new(model.AppTab)
- privacy := s.privacy(c, vmid)
- group, errCtx := errgroup.WithContext(c)
- // pad tab dy,arc value out this func
- if device != _devicePad {
- group.Go(func() error {
- if dyCnt, err := s.dao.DynamicCnt(errCtx, vmid); err != nil {
- log.Error("s.dao.DynamicCnt error(%+v)", err)
- } else if dyCnt > 0 {
- tab.Dynamic = true
- }
- return nil
- })
- group.Go(func() error {
- if shop, err := s.dao.ShopLink(errCtx, vmid, _platShopH5); err != nil {
- log.Error("s.dao.ShopInfo error(%+v)", err)
- } else if shop != nil && shop.ShowItemsTab == _shopGoodsOn {
- tab.Shop = true
- }
- return nil
- })
- group.Go(func() error {
- if reply, err := s.upClient.UpCount(c, &upmdl.UpCountReq{Mid: vmid}); err != nil {
- log.Error("s.arc.UpCount2 mid(%d) error(%v)", vmid, err)
- } else if reply.Count > 0 {
- tab.Archive = true
- }
- return nil
- })
- group.Go(func() error {
- if article, err := s.art.UpArtMetas(errCtx, &artmdl.ArgUpArts{Mid: vmid, Pn: 1, Ps: 10, RealIP: ip}); err != nil {
- log.Error("s.art.UpArtMetas(%d) error(%v)", vmid, err)
- } else if article != nil && len(article.Articles) > 0 {
- tab.Article = true
- }
- return nil
- })
- group.Go(func() error {
- if audioCnt, err := s.dao.AudioCnt(errCtx, vmid); err != nil {
- log.Error("s.dao.AudioCnt error(%+v)", err)
- } else if audioCnt > 0 {
- tab.Audio = true
- }
- return nil
- })
- group.Go(func() error {
- if albumCnt, err := s.dao.AlbumCount(errCtx, vmid); err == nil && albumCnt > 0 {
- tab.Album = true
- }
- return nil
- })
- if value, ok := privacy[model.PcyGame]; (ok && value == _defaultPrivacy) || mid == vmid {
- group.Go(func() error {
- if _, gameCnt, err := s.dao.AppPlayedGame(errCtx, vmid, platform, _samplePn, _samplePs); err == nil && gameCnt > 0 {
- tab.Game = true
- }
- return nil
- })
- }
- }
- if value, ok := privacy[model.PcyFavVideo]; (ok && value == _defaultPrivacy) || mid == vmid {
- group.Go(func() error {
- if fav, err := s.dao.FavFolder(errCtx, mid, vmid); err != nil {
- log.Error("s.dao.FavFolder error(%+v)", err)
- } else if len(fav) > 0 {
- for _, v := range fav {
- if v.CurCount > 0 {
- tab.Favorite = true
- break
- }
- }
- }
- return nil
- })
- }
- if value, ok := privacy[model.PcyBangumi]; (ok && value == _defaultPrivacy) || mid == vmid {
- group.Go(func() error {
- if _, cnt, err := s.dao.BangumiList(errCtx, vmid, _samplePn, _samplePs); err != nil {
- log.Error("s.dao.BangumiList mid(%d) error(%v)", vmid, err)
- } else if cnt > 0 {
- tab.Bangumi = true
- }
- return nil
- })
- }
- group.Wait()
- return
- }
- // AppTopPhoto get app top photo.
- func (s *Service) AppTopPhoto(c context.Context, mid, vmid int64, platform, device string) (imgURL string) {
- imgURL, _ = s.dao.TopPhoto(c, mid, vmid, platform, device)
- return
- }
|