fav.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. package service
  2. import (
  3. "context"
  4. "go-common/app/interface/main/space/model"
  5. favmdl "go-common/app/service/main/favorite/model"
  6. "go-common/library/log"
  7. "go-common/library/net/metadata"
  8. "go-common/library/sync/errgroup"
  9. )
  10. const (
  11. _typeFavAlbum = 2
  12. _typeFavMovie = 2
  13. )
  14. var _emptyArcFavFolder = make([]*favmdl.VideoFolder, 0)
  15. // FavNav get fav info.
  16. func (s *Service) FavNav(c context.Context, mid int64, vmid int64) (res *model.FavNav, err error) {
  17. var (
  18. folder []*favmdl.VideoFolder
  19. plData, topicData, artData *favmdl.Favorites
  20. albumCount, movieCount int
  21. folErr, plErr, topicErr, artErr, albumErr, movieErr error
  22. ip = metadata.String(c, metadata.RemoteIP)
  23. )
  24. group, errCtx := errgroup.WithContext(c)
  25. res = new(model.FavNav)
  26. // video fav folder
  27. if mid == vmid || s.privacyCheck(c, vmid, model.PcyFavVideo) == nil {
  28. group.Go(func() error {
  29. if folder, folErr = s.dao.FavFolder(errCtx, mid, vmid); folErr != nil {
  30. log.Error("s.dao.FavFolder(%d) error(%v)", vmid, folErr)
  31. } else {
  32. res.Archive = folder
  33. }
  34. return nil
  35. })
  36. }
  37. // playlist
  38. group.Go(func() error {
  39. arg := &favmdl.ArgFavs{Type: favmdl.TypePlayList, Mid: vmid, Pn: _samplePn, Ps: _samplePs, RealIP: ip}
  40. if plData, plErr = s.fav.Favorites(errCtx, arg); plErr != nil {
  41. log.Error("s.fav.Favorites TypePlayVideo (%d) error(%v)", vmid, plErr)
  42. } else if plData != nil {
  43. res.Playlist = plData.Page.Count
  44. }
  45. return nil
  46. })
  47. // topic
  48. group.Go(func() error {
  49. arg := &favmdl.ArgFavs{Type: favmdl.TypeTopic, Mid: vmid, Pn: _samplePn, Ps: _samplePs, RealIP: ip}
  50. if topicData, topicErr = s.fav.Favorites(errCtx, arg); topicErr != nil {
  51. log.Error("s.fav.Favorites TypeTopic (%d) error(%v)", vmid, topicErr)
  52. } else if topicData != nil {
  53. res.Topic = topicData.Page.Count
  54. }
  55. return nil
  56. })
  57. // article
  58. group.Go(func() error {
  59. arg := &favmdl.ArgFavs{Type: favmdl.Article, Mid: vmid, Pn: _samplePn, Ps: _samplePs, RealIP: ip}
  60. if artData, artErr = s.fav.Favorites(errCtx, arg); artErr != nil {
  61. log.Error("s.fav.Favorites Article (%d) error(%v)", vmid, artErr)
  62. } else if artData != nil {
  63. res.Article = artData.Page.Count
  64. }
  65. return nil
  66. })
  67. // album
  68. group.Go(func() error {
  69. if albumCount, albumErr = s.dao.LiveFavCount(errCtx, vmid, _typeFavAlbum); albumErr != nil {
  70. log.Error("s.dao.LiveFavCount(%d,%d) error(%v)", vmid, _typeFavAlbum, albumErr)
  71. } else if albumCount > 0 {
  72. res.Album = albumCount
  73. }
  74. return nil
  75. })
  76. // movie
  77. if mid > 0 {
  78. group.Go(func() error {
  79. if movieCount, movieErr = s.dao.MovieFavCount(errCtx, mid, _typeFavMovie); movieErr != nil {
  80. log.Error("s.dao.MovieFavCount(%d,%d) error(%v)", vmid, _typeFavMovie, movieErr)
  81. } else if movieCount > 0 {
  82. res.Movie = movieCount
  83. }
  84. return nil
  85. })
  86. }
  87. group.Wait()
  88. if len(res.Archive) == 0 {
  89. res.Archive = _emptyArcFavFolder
  90. }
  91. return
  92. }
  93. // FavArchive get favorite archive.
  94. func (s *Service) FavArchive(c context.Context, mid int64, arg *model.FavArcArg) (res *favmdl.SearchArchive, err error) {
  95. if mid != arg.Vmid {
  96. if err = s.privacyCheck(c, arg.Vmid, model.PcyFavVideo); err != nil {
  97. return
  98. }
  99. }
  100. return s.dao.FavArchive(c, mid, arg)
  101. }