draft.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. package service
  2. import (
  3. "context"
  4. artmdl "go-common/app/interface/openplatform/article/model"
  5. "go-common/library/ecode"
  6. "go-common/library/log"
  7. )
  8. func (s Service) checkDraftAuthor(c context.Context, aid, mid int64) (d *artmdl.Draft, err error) {
  9. if d, err = s.dao.ArtDraft(c, mid, aid); err != nil {
  10. return
  11. }
  12. if d == nil {
  13. err = ecode.NothingFound
  14. return
  15. }
  16. if d.Author.Mid != mid {
  17. err = ecode.ArtCreationMIDErr
  18. }
  19. return
  20. }
  21. // ArtDraft get article draft by id.
  22. func (s *Service) ArtDraft(c context.Context, aid, mid int64) (res *artmdl.Draft, err error) {
  23. if err = s.checkPrivilege(c, mid); err != nil {
  24. return
  25. }
  26. if res, err = s.checkDraftAuthor(c, aid, mid); err != nil {
  27. return
  28. }
  29. if res.ListID > 0 {
  30. res.List, _ = s.dao.List(c, res.ListID)
  31. }
  32. return
  33. }
  34. // AddArtDraft add article draft .
  35. func (s *Service) AddArtDraft(c context.Context, a *artmdl.Draft) (id int64, err error) {
  36. log.Infov(c, log.KV("AddArtDraft", a))
  37. if err = s.checkPrivilege(c, a.Author.Mid); err != nil {
  38. return
  39. }
  40. a.Content = xssFilter(a.Content)
  41. if err = s.preDraftCheck(c, a); err != nil {
  42. return
  43. }
  44. if _, err = s.checkList(c, a.Author.Mid, a.ListID); err != nil {
  45. return
  46. }
  47. // if a.ListID > 0 {
  48. // var exist bool
  49. // for _, cid := range s.novelCIDs() {
  50. // if cid == a.Category.ID {
  51. // exist = true
  52. // break
  53. // }
  54. // }
  55. // if !exist {
  56. // a.ListID = 0
  57. // }
  58. // }
  59. if a.ID > 0 {
  60. if _, err = s.checkDraftAuthor(c, a.ID, a.Author.Mid); err != nil {
  61. return
  62. }
  63. _, err = s.dao.AddArtDraft(c, a)
  64. id = a.ID
  65. log.Info("update draft success mid(%d) aid(%d)", a.Author.Mid, a.ID)
  66. return
  67. }
  68. var total int
  69. if total, err = s.dao.CountUpperDraft(c, a.Author.Mid); err != nil {
  70. return
  71. }
  72. if total > s.c.Article.UpperDraftLimit {
  73. err = ecode.ArtCreationDraftFull
  74. return
  75. }
  76. id, err = s.dao.AddArtDraft(c, a)
  77. return
  78. }
  79. // DelArtDraft deletes article draft.
  80. func (s *Service) DelArtDraft(c context.Context, aid, mid int64) (err error) {
  81. if err = s.checkPrivilege(c, mid); err != nil {
  82. return
  83. }
  84. if _, err = s.checkDraftAuthor(c, aid, mid); err != nil {
  85. return
  86. }
  87. err = s.dao.DelArtDraft(c, mid, aid)
  88. return
  89. }
  90. // UpperDrafts batch get draft by mid.
  91. func (s *Service) UpperDrafts(c context.Context, mid int64, pn, ps int) (res *artmdl.Drafts, err error) {
  92. if err = s.checkPrivilege(c, mid); err != nil {
  93. return
  94. }
  95. var (
  96. total int
  97. ds []*artmdl.Draft
  98. start = (pn - 1) * ps
  99. page = &artmdl.ArtPage{Pn: pn, Ps: ps}
  100. )
  101. res = &artmdl.Drafts{Page: page}
  102. if total, err = s.dao.CountUpperDraft(c, mid); err != nil {
  103. return
  104. } else if total == 0 {
  105. return
  106. }
  107. page.Total = total
  108. if ds, err = s.dao.UpperDrafts(c, mid, start, ps); err != nil {
  109. return
  110. }
  111. for _, v := range ds {
  112. // 用户没选择分区,返回空分区信息
  113. if v.Category.ID == 0 {
  114. continue
  115. }
  116. var pid int64
  117. if pid, err = s.CategoryToRoot(v.Category.ID); err != nil {
  118. log.Error("s.CategoryToRoot(%d) error(%+v)", v.Category.ID, err)
  119. err = nil
  120. continue
  121. }
  122. v.Category = s.categoriesMap[pid]
  123. v.List, _ = s.dao.List(c, v.ListID)
  124. }
  125. res.Drafts = ds
  126. return
  127. }