issue_label.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. package repo
  2. import (
  3. "gitote/gitote/models"
  4. "gitote/gitote/models/errors"
  5. "gitote/gitote/pkg/context"
  6. api "gitlab.com/gitote/go-gitote-client"
  7. )
  8. func ListIssueLabels(c *context.APIContext) {
  9. issue, err := models.GetIssueByIndex(c.Repo.Repository.ID, c.ParamsInt64(":index"))
  10. if err != nil {
  11. if errors.IsIssueNotExist(err) {
  12. c.Status(404)
  13. } else {
  14. c.Error(500, "GetIssueByIndex", err)
  15. }
  16. return
  17. }
  18. apiLabels := make([]*api.Label, len(issue.Labels))
  19. for i := range issue.Labels {
  20. apiLabels[i] = issue.Labels[i].APIFormat()
  21. }
  22. c.JSON(200, &apiLabels)
  23. }
  24. func AddIssueLabels(c *context.APIContext, form api.IssueLabelsOption) {
  25. if !c.Repo.IsWriter() {
  26. c.Status(403)
  27. return
  28. }
  29. issue, err := models.GetIssueByIndex(c.Repo.Repository.ID, c.ParamsInt64(":index"))
  30. if err != nil {
  31. if errors.IsIssueNotExist(err) {
  32. c.Status(404)
  33. } else {
  34. c.Error(500, "GetIssueByIndex", err)
  35. }
  36. return
  37. }
  38. labels, err := models.GetLabelsInRepoByIDs(c.Repo.Repository.ID, form.Labels)
  39. if err != nil {
  40. c.Error(500, "GetLabelsInRepoByIDs", err)
  41. return
  42. }
  43. if err = issue.AddLabels(c.User, labels); err != nil {
  44. c.Error(500, "AddLabels", err)
  45. return
  46. }
  47. labels, err = models.GetLabelsByIssueID(issue.ID)
  48. if err != nil {
  49. c.Error(500, "GetLabelsByIssueID", err)
  50. return
  51. }
  52. apiLabels := make([]*api.Label, len(labels))
  53. for i := range labels {
  54. apiLabels[i] = issue.Labels[i].APIFormat()
  55. }
  56. c.JSON(200, &apiLabels)
  57. }
  58. func DeleteIssueLabel(c *context.APIContext) {
  59. if !c.Repo.IsWriter() {
  60. c.Status(403)
  61. return
  62. }
  63. issue, err := models.GetIssueByIndex(c.Repo.Repository.ID, c.ParamsInt64(":index"))
  64. if err != nil {
  65. if errors.IsIssueNotExist(err) {
  66. c.Status(404)
  67. } else {
  68. c.Error(500, "GetIssueByIndex", err)
  69. }
  70. return
  71. }
  72. label, err := models.GetLabelOfRepoByID(c.Repo.Repository.ID, c.ParamsInt64(":id"))
  73. if err != nil {
  74. if models.IsErrLabelNotExist(err) {
  75. c.Error(422, "", err)
  76. } else {
  77. c.Error(500, "GetLabelInRepoByID", err)
  78. }
  79. return
  80. }
  81. if err := models.DeleteIssueLabel(issue, label); err != nil {
  82. c.Error(500, "DeleteIssueLabel", err)
  83. return
  84. }
  85. c.Status(204)
  86. }
  87. func ReplaceIssueLabels(c *context.APIContext, form api.IssueLabelsOption) {
  88. if !c.Repo.IsWriter() {
  89. c.Status(403)
  90. return
  91. }
  92. issue, err := models.GetIssueByIndex(c.Repo.Repository.ID, c.ParamsInt64(":index"))
  93. if err != nil {
  94. if errors.IsIssueNotExist(err) {
  95. c.Status(404)
  96. } else {
  97. c.Error(500, "GetIssueByIndex", err)
  98. }
  99. return
  100. }
  101. labels, err := models.GetLabelsInRepoByIDs(c.Repo.Repository.ID, form.Labels)
  102. if err != nil {
  103. c.Error(500, "GetLabelsInRepoByIDs", err)
  104. return
  105. }
  106. if err := issue.ReplaceLabels(labels); err != nil {
  107. c.Error(500, "ReplaceLabels", err)
  108. return
  109. }
  110. labels, err = models.GetLabelsByIssueID(issue.ID)
  111. if err != nil {
  112. c.Error(500, "GetLabelsByIssueID", err)
  113. return
  114. }
  115. apiLabels := make([]*api.Label, len(labels))
  116. for i := range labels {
  117. apiLabels[i] = issue.Labels[i].APIFormat()
  118. }
  119. c.JSON(200, &apiLabels)
  120. }
  121. func ClearIssueLabels(c *context.APIContext) {
  122. if !c.Repo.IsWriter() {
  123. c.Status(403)
  124. return
  125. }
  126. issue, err := models.GetIssueByIndex(c.Repo.Repository.ID, c.ParamsInt64(":index"))
  127. if err != nil {
  128. if errors.IsIssueNotExist(err) {
  129. c.Status(404)
  130. } else {
  131. c.Error(500, "GetIssueByIndex", err)
  132. }
  133. return
  134. }
  135. if err := issue.ClearLabels(c.User); err != nil {
  136. c.Error(500, "ClearLabels", err)
  137. return
  138. }
  139. c.Status(204)
  140. }