label.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. // Copyright 2016 The Gogs Authors. All rights reserved.
  2. // Use of this source code is governed by a MIT-style
  3. // license that can be found in the LICENSE file.
  4. package repo
  5. import (
  6. api "github.com/gogits/go-gogs-client"
  7. "github.com/gogits/gogs/models"
  8. "github.com/gogits/gogs/modules/context"
  9. "github.com/gogits/gogs/modules/log"
  10. "github.com/gogits/gogs/routers/api/v1/convert"
  11. )
  12. func ListLabels(ctx *context.APIContext) {
  13. labels, err := models.GetLabelsByRepoID(ctx.Repo.Repository.ID)
  14. if err != nil {
  15. ctx.Error(500, "Labels", err)
  16. return
  17. }
  18. apiLabels := make([]*api.Label, len(labels))
  19. for i := range labels {
  20. apiLabels[i] = convert.ToLabel(labels[i])
  21. }
  22. ctx.JSON(200, &apiLabels)
  23. }
  24. func GetLabel(ctx *context.APIContext) {
  25. label, err := models.GetLabelByID(ctx.ParamsInt64(":id"))
  26. if err != nil {
  27. if models.IsErrLabelNotExist(err) {
  28. ctx.Status(404)
  29. } else {
  30. ctx.Error(500, "GetLabelByID", err)
  31. }
  32. return
  33. }
  34. ctx.JSON(200, convert.ToLabel(label))
  35. }
  36. func CreateLabel(ctx *context.APIContext, form api.LabelOption) {
  37. if !ctx.Repo.IsWriter() {
  38. ctx.Status(403)
  39. return
  40. }
  41. label := &models.Label{
  42. Name: form.Name,
  43. Color: form.Color,
  44. RepoID: ctx.Repo.Repository.ID,
  45. }
  46. err := models.NewLabel(label)
  47. if err != nil {
  48. ctx.Error(500, "NewLabel", err)
  49. return
  50. }
  51. label, err = models.GetLabelByID(label.ID)
  52. if err != nil {
  53. ctx.Error(500, "GetLabelByID", err)
  54. return
  55. }
  56. ctx.JSON(201, convert.ToLabel(label))
  57. }
  58. func EditLabel(ctx *context.APIContext, form api.LabelOption) {
  59. if !ctx.Repo.IsWriter() {
  60. ctx.Status(403)
  61. return
  62. }
  63. label, err := models.GetLabelByID(ctx.ParamsInt64(":id"))
  64. if err != nil {
  65. if models.IsErrLabelNotExist(err) {
  66. ctx.Status(404)
  67. } else {
  68. ctx.Error(500, "GetLabelByID", err)
  69. }
  70. return
  71. }
  72. if len(form.Name) > 0 {
  73. label.Name = form.Name
  74. }
  75. if len(form.Color) > 0 {
  76. label.Color = form.Color
  77. }
  78. if err := models.UpdateLabel(label); err != nil {
  79. ctx.Handle(500, "UpdateLabel", err)
  80. return
  81. }
  82. ctx.JSON(200, convert.ToLabel(label))
  83. }
  84. func DeleteLabel(ctx *context.APIContext) {
  85. if !ctx.Repo.IsWriter() {
  86. ctx.Status(403)
  87. return
  88. }
  89. label, err := models.GetLabelByID(ctx.ParamsInt64(":id"))
  90. if err != nil {
  91. if models.IsErrLabelNotExist(err) {
  92. ctx.Status(404)
  93. } else {
  94. ctx.Error(500, "GetLabelByID", err)
  95. }
  96. return
  97. }
  98. if err := models.DeleteLabel(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id")); err != nil {
  99. ctx.Error(500, "DeleteLabel", err)
  100. return
  101. }
  102. log.Trace("Label deleted: %s %s", label.ID, label.Name)
  103. ctx.Status(204)
  104. }