label.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. package repo
  2. import (
  3. "gitote/gitote/models"
  4. "gitote/gitote/pkg/context"
  5. "github.com/Unknwon/com"
  6. api "gitlab.com/gitote/go-gitote-client"
  7. )
  8. func ListLabels(c *context.APIContext) {
  9. labels, err := models.GetLabelsByRepoID(c.Repo.Repository.ID)
  10. if err != nil {
  11. c.Error(500, "GetLabelsByRepoID", err)
  12. return
  13. }
  14. apiLabels := make([]*api.Label, len(labels))
  15. for i := range labels {
  16. apiLabels[i] = labels[i].APIFormat()
  17. }
  18. c.JSON(200, &apiLabels)
  19. }
  20. func GetLabel(c *context.APIContext) {
  21. var label *models.Label
  22. var err error
  23. idStr := c.Params(":id")
  24. if id := com.StrTo(idStr).MustInt64(); id > 0 {
  25. label, err = models.GetLabelOfRepoByID(c.Repo.Repository.ID, id)
  26. } else {
  27. label, err = models.GetLabelOfRepoByName(c.Repo.Repository.ID, idStr)
  28. }
  29. if err != nil {
  30. if models.IsErrLabelNotExist(err) {
  31. c.Status(404)
  32. } else {
  33. c.Error(500, "GetLabelByRepoID", err)
  34. }
  35. return
  36. }
  37. c.JSON(200, label.APIFormat())
  38. }
  39. func CreateLabel(c *context.APIContext, form api.CreateLabelOption) {
  40. if !c.Repo.IsWriter() {
  41. c.Status(403)
  42. return
  43. }
  44. label := &models.Label{
  45. Name: form.Name,
  46. Color: form.Color,
  47. RepoID: c.Repo.Repository.ID,
  48. }
  49. if err := models.NewLabels(label); err != nil {
  50. c.Error(500, "NewLabel", err)
  51. return
  52. }
  53. c.JSON(201, label.APIFormat())
  54. }
  55. func EditLabel(c *context.APIContext, form api.EditLabelOption) {
  56. if !c.Repo.IsWriter() {
  57. c.Status(403)
  58. return
  59. }
  60. label, err := models.GetLabelOfRepoByID(c.Repo.Repository.ID, c.ParamsInt64(":id"))
  61. if err != nil {
  62. if models.IsErrLabelNotExist(err) {
  63. c.Status(404)
  64. } else {
  65. c.Error(500, "GetLabelByRepoID", err)
  66. }
  67. return
  68. }
  69. if form.Name != nil {
  70. label.Name = *form.Name
  71. }
  72. if form.Color != nil {
  73. label.Color = *form.Color
  74. }
  75. if err := models.UpdateLabel(label); err != nil {
  76. c.Handle(500, "UpdateLabel", err)
  77. return
  78. }
  79. c.JSON(200, label.APIFormat())
  80. }
  81. func DeleteLabel(c *context.APIContext) {
  82. if !c.Repo.IsWriter() {
  83. c.Status(403)
  84. return
  85. }
  86. if err := models.DeleteLabel(c.Repo.Repository.ID, c.ParamsInt64(":id")); err != nil {
  87. c.Error(500, "DeleteLabel", err)
  88. return
  89. }
  90. c.Status(204)
  91. }