108 lines
3.2 KiB
Go
108 lines
3.2 KiB
Go
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)
|
|
}
|