You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

issue_comment.go 4.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. // Copyright 2020 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package convert
  4. import (
  5. "context"
  6. issues_model "code.gitea.io/gitea/models/issues"
  7. repo_model "code.gitea.io/gitea/models/repo"
  8. user_model "code.gitea.io/gitea/models/user"
  9. "code.gitea.io/gitea/modules/log"
  10. api "code.gitea.io/gitea/modules/structs"
  11. )
  12. // ToAPIComment converts a issues_model.Comment to the api.Comment format for API usage
  13. func ToAPIComment(ctx context.Context, repo *repo_model.Repository, c *issues_model.Comment) *api.Comment {
  14. return &api.Comment{
  15. ID: c.ID,
  16. Poster: ToUser(ctx, c.Poster, nil),
  17. HTMLURL: c.HTMLURL(),
  18. IssueURL: c.IssueURL(),
  19. PRURL: c.PRURL(),
  20. Body: c.Content,
  21. Attachments: ToAPIAttachments(repo, c.Attachments),
  22. Created: c.CreatedUnix.AsTime(),
  23. Updated: c.UpdatedUnix.AsTime(),
  24. }
  25. }
  26. // ToTimelineComment converts a issues_model.Comment to the api.TimelineComment format
  27. func ToTimelineComment(ctx context.Context, repo *repo_model.Repository, c *issues_model.Comment, doer *user_model.User) *api.TimelineComment {
  28. err := c.LoadMilestone(ctx)
  29. if err != nil {
  30. log.Error("LoadMilestone: %v", err)
  31. return nil
  32. }
  33. err = c.LoadAssigneeUserAndTeam()
  34. if err != nil {
  35. log.Error("LoadAssigneeUserAndTeam: %v", err)
  36. return nil
  37. }
  38. err = c.LoadResolveDoer()
  39. if err != nil {
  40. log.Error("LoadResolveDoer: %v", err)
  41. return nil
  42. }
  43. err = c.LoadDepIssueDetails()
  44. if err != nil {
  45. log.Error("LoadDepIssueDetails: %v", err)
  46. return nil
  47. }
  48. err = c.LoadTime()
  49. if err != nil {
  50. log.Error("LoadTime: %v", err)
  51. return nil
  52. }
  53. err = c.LoadLabel()
  54. if err != nil {
  55. log.Error("LoadLabel: %v", err)
  56. return nil
  57. }
  58. comment := &api.TimelineComment{
  59. ID: c.ID,
  60. Type: c.Type.String(),
  61. Poster: ToUser(ctx, c.Poster, nil),
  62. HTMLURL: c.HTMLURL(),
  63. IssueURL: c.IssueURL(),
  64. PRURL: c.PRURL(),
  65. Body: c.Content,
  66. Created: c.CreatedUnix.AsTime(),
  67. Updated: c.UpdatedUnix.AsTime(),
  68. OldProjectID: c.OldProjectID,
  69. ProjectID: c.ProjectID,
  70. OldTitle: c.OldTitle,
  71. NewTitle: c.NewTitle,
  72. OldRef: c.OldRef,
  73. NewRef: c.NewRef,
  74. RefAction: c.RefAction.String(),
  75. RefCommitSHA: c.CommitSHA,
  76. ReviewID: c.ReviewID,
  77. RemovedAssignee: c.RemovedAssignee,
  78. }
  79. if c.OldMilestone != nil {
  80. comment.OldMilestone = ToAPIMilestone(c.OldMilestone)
  81. }
  82. if c.Milestone != nil {
  83. comment.Milestone = ToAPIMilestone(c.Milestone)
  84. }
  85. if c.Time != nil {
  86. err = c.Time.LoadAttributes()
  87. if err != nil {
  88. log.Error("Time.LoadAttributes: %v", err)
  89. return nil
  90. }
  91. comment.TrackedTime = ToTrackedTime(ctx, c.Time)
  92. }
  93. if c.RefIssueID != 0 {
  94. issue, err := issues_model.GetIssueByID(ctx, c.RefIssueID)
  95. if err != nil {
  96. log.Error("GetIssueByID(%d): %v", c.RefIssueID, err)
  97. return nil
  98. }
  99. comment.RefIssue = ToAPIIssue(ctx, issue)
  100. }
  101. if c.RefCommentID != 0 {
  102. com, err := issues_model.GetCommentByID(ctx, c.RefCommentID)
  103. if err != nil {
  104. log.Error("GetCommentByID(%d): %v", c.RefCommentID, err)
  105. return nil
  106. }
  107. err = com.LoadPoster(ctx)
  108. if err != nil {
  109. log.Error("LoadPoster: %v", err)
  110. return nil
  111. }
  112. comment.RefComment = ToAPIComment(ctx, repo, com)
  113. }
  114. if c.Label != nil {
  115. var org *user_model.User
  116. var repo *repo_model.Repository
  117. if c.Label.BelongsToOrg() {
  118. var err error
  119. org, err = user_model.GetUserByID(ctx, c.Label.OrgID)
  120. if err != nil {
  121. log.Error("GetUserByID(%d): %v", c.Label.OrgID, err)
  122. return nil
  123. }
  124. }
  125. if c.Label.BelongsToRepo() {
  126. var err error
  127. repo, err = repo_model.GetRepositoryByID(ctx, c.Label.RepoID)
  128. if err != nil {
  129. log.Error("GetRepositoryByID(%d): %v", c.Label.RepoID, err)
  130. return nil
  131. }
  132. }
  133. comment.Label = ToLabel(c.Label, repo, org)
  134. }
  135. if c.Assignee != nil {
  136. comment.Assignee = ToUser(ctx, c.Assignee, nil)
  137. }
  138. if c.AssigneeTeam != nil {
  139. comment.AssigneeTeam, _ = ToTeam(ctx, c.AssigneeTeam)
  140. }
  141. if c.ResolveDoer != nil {
  142. comment.ResolveDoer = ToUser(ctx, c.ResolveDoer, nil)
  143. }
  144. if c.DependentIssue != nil {
  145. comment.DependentIssue = ToAPIIssue(ctx, c.DependentIssue)
  146. }
  147. return comment
  148. }