repo_label.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. package v1
  2. import (
  3. "net/http"
  4. "strconv"
  5. "gogs.io/gogs/internal/context"
  6. "gogs.io/gogs/internal/database"
  7. "gogs.io/gogs/internal/route/api/v1/types"
  8. )
  9. func listLabels(c *context.APIContext) {
  10. labels, err := database.GetLabelsByRepoID(c.Repo.Repository.ID)
  11. if err != nil {
  12. c.Error(err, "get labels by repository ID")
  13. return
  14. }
  15. apiLabels := make([]*types.IssueLabel, len(labels))
  16. for i := range labels {
  17. apiLabels[i] = toIssueLabel(labels[i])
  18. }
  19. c.JSONSuccess(&apiLabels)
  20. }
  21. func getLabel(c *context.APIContext) {
  22. var label *database.Label
  23. var err error
  24. idStr := c.Params(":id")
  25. if id, _ := strconv.ParseInt(idStr, 10, 64); id > 0 {
  26. label, err = database.GetLabelOfRepoByID(c.Repo.Repository.ID, id)
  27. } else {
  28. label, err = database.GetLabelOfRepoByName(c.Repo.Repository.ID, idStr)
  29. }
  30. if err != nil {
  31. c.NotFoundOrError(err, "get label")
  32. return
  33. }
  34. c.JSONSuccess(toIssueLabel(label))
  35. }
  36. type createLabelRequest struct {
  37. Name string `json:"name" binding:"Required"`
  38. Color string `json:"color" binding:"Required;Size(7)"`
  39. }
  40. func createLabel(c *context.APIContext, form createLabelRequest) {
  41. label := &database.Label{
  42. Name: form.Name,
  43. Color: form.Color,
  44. RepoID: c.Repo.Repository.ID,
  45. }
  46. if err := database.NewLabels(label); err != nil {
  47. c.Error(err, "new labels")
  48. return
  49. }
  50. c.JSON(http.StatusCreated, toIssueLabel(label))
  51. }
  52. type editLabelRequest struct {
  53. Name *string `json:"name"`
  54. Color *string `json:"color"`
  55. }
  56. func editLabel(c *context.APIContext, form editLabelRequest) {
  57. label, err := database.GetLabelOfRepoByID(c.Repo.Repository.ID, c.ParamsInt64(":id"))
  58. if err != nil {
  59. c.NotFoundOrError(err, "get label of repository by ID")
  60. return
  61. }
  62. if form.Name != nil {
  63. label.Name = *form.Name
  64. }
  65. if form.Color != nil {
  66. label.Color = *form.Color
  67. }
  68. if err := database.UpdateLabel(label); err != nil {
  69. c.Error(err, "update label")
  70. return
  71. }
  72. c.JSONSuccess(toIssueLabel(label))
  73. }
  74. func deleteLabel(c *context.APIContext) {
  75. if err := database.DeleteLabel(c.Repo.Repository.ID, c.ParamsInt64(":id")); err != nil {
  76. c.Error(err, "delete label")
  77. return
  78. }
  79. c.NoContent()
  80. }