1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- package web
- import (
- "context"
- tagmdl "go-common/app/interface/main/tag/model"
- "go-common/app/interface/main/web-goblin/model/web"
- "go-common/app/service/main/archive/api"
- "go-common/app/service/main/archive/model/archive"
- "go-common/library/log"
- "go-common/library/net/metadata"
- "go-common/library/sync/errgroup"
- )
- const (
- _chRqCnt = 40
- _chDisplayID = 1
- _chTypeArc = 3
- _chFrom = 1
- )
- var _emptyArcs = make([]*api.Arc, 0)
- // Channel .
- func (s *Service) Channel(c context.Context, id, mid int64, buvid string) (channel *web.Channel, err error) {
- var (
- aids []int64
- arcs map[int64]*api.Arc
- tagErr error
- )
- ip := metadata.String(c, metadata.RemoteIP)
- channel = new(web.Channel)
- if cards, ok := s.channelCards[id]; ok {
- for _, card := range cards {
- aids = append(aids, card.Value)
- }
- }
- group, errCtx := errgroup.WithContext(c)
- group.Go(func() error {
- arg := &tagmdl.ArgChannelResource{
- Tid: id,
- Mid: mid,
- RequestCNT: int32(_chRqCnt),
- DisplayID: _chDisplayID,
- Type: _chTypeArc,
- Buvid: buvid,
- From: _chFrom,
- RealIP: ip,
- }
- if channelResource, chErr := s.tag.ChannelResources(errCtx, arg); chErr != nil {
- log.Error("Channel s.tag.Resources error(%v)", chErr)
- } else if channelResource != nil {
- aids = append(aids, channelResource.Oids...)
- }
- return nil
- })
- group.Go(func() error {
- if channel.Tag, tagErr = s.tag.InfoByID(errCtx, &tagmdl.ArgID{ID: id, Mid: mid}); tagErr != nil {
- log.Error("Channel s.tag.InfoByID(%d, %d) error(%v)", id, mid, err)
- return tagErr
- }
- return nil
- })
- if err = group.Wait(); err != nil {
- return
- }
- if len(aids) == 0 {
- channel.Archives = _emptyArcs
- return
- }
- if arcs, err = s.arc.Archives3(c, &archive.ArgAids2{Aids: aids, RealIP: ip}); err != nil {
- log.Error("Channel s.arc.Archives3(%v) error(%v)", aids, err)
- err = nil
- channel.Archives = _emptyArcs
- return
- }
- for _, aid := range aids {
- if arc, ok := arcs[aid]; ok && arc.IsNormal() {
- channel.Archives = append(channel.Archives, arc)
- }
- }
- if len(channel.Archives) > _chRqCnt {
- channel.Archives = channel.Archives[:_chRqCnt]
- }
- return
- }
|