view.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. package view
  2. import (
  3. "context"
  4. "time"
  5. "go-common/app/interface/main/tv/model"
  6. upMdl "go-common/app/interface/main/tv/model/upper"
  7. "go-common/app/interface/main/tv/model/view"
  8. arcwar "go-common/app/service/main/archive/api"
  9. "go-common/app/service/main/archive/model/archive"
  10. "go-common/library/ecode"
  11. "go-common/library/log"
  12. )
  13. // View all view data.
  14. func (s *Service) View(c context.Context, mid, aid int64, ak, ip string, now time.Time) (v *view.View, isok bool, errMsg string, err error) {
  15. var (
  16. arcMeta *model.ArcCMS
  17. faved bool
  18. reginfo *arcwar.Tp
  19. )
  20. if arcMeta, isok, errMsg, err = s.ArcMsg(aid); err != nil { // arc auth msg, if not ok, we return the err msg
  21. log.Info("View ArcMsg Aid:%d, Err:%v", aid, err)
  22. return
  23. } else if !isok {
  24. return
  25. }
  26. if v, err = s.ViewPage(c, mid, aid, ak, ip, now); err != nil { // View page
  27. if err == ecode.AccessDenied || err == ecode.NothingFound {
  28. log.Warn("s.ViewPage() mid(%d) aid(%d) ak(%s) ip(%s) error(%v)",
  29. mid, aid, ak, ip, err)
  30. return
  31. }
  32. if err == ecode.TvAllDataAuditing { // the err is used to transport the message that all the data is being audited
  33. isok, errMsg = s.cmsDao.AuditingMsg()
  34. err = nil
  35. return
  36. }
  37. log.Error("s.ViewPage() mid(%d) aid(%d) ak(%s) ip(%s) error(%v)",
  38. mid, aid, ak, ip, err)
  39. return
  40. }
  41. if reginfo, err = s.arcDao.TypeInfo(int32(arcMeta.TypeID)); err != nil {
  42. log.Warn("s.arcDao.TypeInfo tid(%d) error(%v)", arcMeta.TypeID, err)
  43. }
  44. if reginfo != nil {
  45. v.PID = reginfo.Pid
  46. }
  47. s.arcMetaInterv(v, arcMeta) // cms interv
  48. s.initRelates(c, v, ip, now) // get relates
  49. v.ReqUser = &view.ReqUser{}
  50. if faved, err = s.favDao.InDefault(c, mid, aid); err != nil {
  51. log.Warn("s.favDao InDefault Mid %d, Aid %d, Err %v", mid, aid, err)
  52. }
  53. if faved {
  54. v.ReqUser.Favorite = 1
  55. }
  56. return
  57. }
  58. // arcMetaInterv replaces view's archive info by arc cms meta info
  59. func (s *Service) arcMetaInterv(v *view.View, arcMeta *model.ArcCMS) {
  60. if arcMeta == nil {
  61. return
  62. }
  63. if arcMeta.Title != "" {
  64. v.Static.Title = arcMeta.Title
  65. }
  66. if arcMeta.Cover != "" {
  67. v.Static.Pic = arcMeta.Cover
  68. }
  69. if arcMeta.Content != "" {
  70. v.Static.Desc = arcMeta.Content
  71. }
  72. // todo 分p的干预
  73. }
  74. // ViewPage view page data.
  75. func (s *Service) ViewPage(c context.Context, mid, aid int64, ak, ip string, now time.Time) (v *view.View, err error) {
  76. var (
  77. vs *view.Static
  78. vp *arcwar.ViewReply
  79. upper *upMdl.Upper
  80. )
  81. if vp, err = s.arcDao.GetView(c, aid); err != nil {
  82. log.Error("ViewPage getView Aid:%d, Err:%v", aid, err)
  83. return
  84. }
  85. if upper, err = s.upDao.LoadUpMeta(c, vp.Arc.Author.Mid); err != nil || !upper.CanShow() { // if upper can't be found or upper is not valid, hide it
  86. vp.Arc.Author.Face = ""
  87. vp.Arc.Author.Name = ""
  88. } else { // if upper is valid, use cms info to show
  89. vp.Arc.Author.Face = upper.CMSFace
  90. vp.Arc.Author.Name = upper.CMSName
  91. }
  92. vs = &view.Static{Arc: vp.Arc}
  93. if err = s.initPages(c, vs, vp.Pages); err != nil {
  94. log.Error("ViewPage initPages Aid %d, Err %v", aid, err)
  95. return
  96. }
  97. v = &view.View{Static: vs}
  98. if v.AttrVal(archive.AttrBitIsPGC) != archive.AttrYes {
  99. // check access
  100. if err = s.checkAceess(c, mid, v.Aid, int(v.State), int(v.Access), ak, ip); err != nil {
  101. // archive is ForbitFixed and Transcoding and StateForbitDistributing need analysis history body .
  102. if v.State != archive.StateForbidFixed {
  103. return
  104. }
  105. err = nil
  106. }
  107. if v.Access > 0 {
  108. v.Stat.View = 0
  109. }
  110. }
  111. if mid != 0 {
  112. v.History, _ = s.arcDao.Progress(ctx, v.Aid, mid)
  113. }
  114. return
  115. }