123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- package service
- import (
- "context"
- "go-common/app/interface/main/space/model"
- favmdl "go-common/app/service/main/favorite/model"
- "go-common/library/log"
- "go-common/library/net/metadata"
- "go-common/library/sync/errgroup"
- )
- const (
- _typeFavAlbum = 2
- _typeFavMovie = 2
- )
- var _emptyArcFavFolder = make([]*favmdl.VideoFolder, 0)
- // FavNav get fav info.
- func (s *Service) FavNav(c context.Context, mid int64, vmid int64) (res *model.FavNav, err error) {
- var (
- folder []*favmdl.VideoFolder
- plData, topicData, artData *favmdl.Favorites
- albumCount, movieCount int
- folErr, plErr, topicErr, artErr, albumErr, movieErr error
- ip = metadata.String(c, metadata.RemoteIP)
- )
- group, errCtx := errgroup.WithContext(c)
- res = new(model.FavNav)
- // video fav folder
- if mid == vmid || s.privacyCheck(c, vmid, model.PcyFavVideo) == nil {
- group.Go(func() error {
- if folder, folErr = s.dao.FavFolder(errCtx, mid, vmid); folErr != nil {
- log.Error("s.dao.FavFolder(%d) error(%v)", vmid, folErr)
- } else {
- res.Archive = folder
- }
- return nil
- })
- }
- // playlist
- group.Go(func() error {
- arg := &favmdl.ArgFavs{Type: favmdl.TypePlayList, Mid: vmid, Pn: _samplePn, Ps: _samplePs, RealIP: ip}
- if plData, plErr = s.fav.Favorites(errCtx, arg); plErr != nil {
- log.Error("s.fav.Favorites TypePlayVideo (%d) error(%v)", vmid, plErr)
- } else if plData != nil {
- res.Playlist = plData.Page.Count
- }
- return nil
- })
- // topic
- group.Go(func() error {
- arg := &favmdl.ArgFavs{Type: favmdl.TypeTopic, Mid: vmid, Pn: _samplePn, Ps: _samplePs, RealIP: ip}
- if topicData, topicErr = s.fav.Favorites(errCtx, arg); topicErr != nil {
- log.Error("s.fav.Favorites TypeTopic (%d) error(%v)", vmid, topicErr)
- } else if topicData != nil {
- res.Topic = topicData.Page.Count
- }
- return nil
- })
- // article
- group.Go(func() error {
- arg := &favmdl.ArgFavs{Type: favmdl.Article, Mid: vmid, Pn: _samplePn, Ps: _samplePs, RealIP: ip}
- if artData, artErr = s.fav.Favorites(errCtx, arg); artErr != nil {
- log.Error("s.fav.Favorites Article (%d) error(%v)", vmid, artErr)
- } else if artData != nil {
- res.Article = artData.Page.Count
- }
- return nil
- })
- // album
- group.Go(func() error {
- if albumCount, albumErr = s.dao.LiveFavCount(errCtx, vmid, _typeFavAlbum); albumErr != nil {
- log.Error("s.dao.LiveFavCount(%d,%d) error(%v)", vmid, _typeFavAlbum, albumErr)
- } else if albumCount > 0 {
- res.Album = albumCount
- }
- return nil
- })
- // movie
- if mid > 0 {
- group.Go(func() error {
- if movieCount, movieErr = s.dao.MovieFavCount(errCtx, mid, _typeFavMovie); movieErr != nil {
- log.Error("s.dao.MovieFavCount(%d,%d) error(%v)", vmid, _typeFavMovie, movieErr)
- } else if movieCount > 0 {
- res.Movie = movieCount
- }
- return nil
- })
- }
- group.Wait()
- if len(res.Archive) == 0 {
- res.Archive = _emptyArcFavFolder
- }
- return
- }
- // FavArchive get favorite archive.
- func (s *Service) FavArchive(c context.Context, mid int64, arg *model.FavArcArg) (res *favmdl.SearchArchive, err error) {
- if mid != arg.Vmid {
- if err = s.privacyCheck(c, arg.Vmid, model.PcyFavVideo); err != nil {
- return
- }
- }
- return s.dao.FavArchive(c, mid, arg)
- }
|