label.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package repo
  2. import (
  3. "net/http"
  4. "strconv"
  5. api "github.com/gogs/go-gogs-client"
  6. "gogs.io/gogs/internal/context"
  7. "gogs.io/gogs/internal/database"
  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([]*api.Label, len(labels))
  16. for i := range labels {
  17. apiLabels[i] = labels[i].APIFormat()
  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(label.APIFormat())
  35. }
  36. func CreateLabel(c *context.APIContext, form api.CreateLabelOption) {
  37. label := &database.Label{
  38. Name: form.Name,
  39. Color: form.Color,
  40. RepoID: c.Repo.Repository.ID,
  41. }
  42. if err := database.NewLabels(label); err != nil {
  43. c.Error(err, "new labels")
  44. return
  45. }
  46. c.JSON(http.StatusCreated, label.APIFormat())
  47. }
  48. func EditLabel(c *context.APIContext, form api.EditLabelOption) {
  49. label, err := database.GetLabelOfRepoByID(c.Repo.Repository.ID, c.ParamsInt64(":id"))
  50. if err != nil {
  51. c.NotFoundOrError(err, "get label of repository by ID")
  52. return
  53. }
  54. if form.Name != nil {
  55. label.Name = *form.Name
  56. }
  57. if form.Color != nil {
  58. label.Color = *form.Color
  59. }
  60. if err := database.UpdateLabel(label); err != nil {
  61. c.Error(err, "update label")
  62. return
  63. }
  64. c.JSONSuccess(label.APIFormat())
  65. }
  66. func DeleteLabel(c *context.APIContext) {
  67. if err := database.DeleteLabel(c.Repo.Repository.ID, c.ParamsInt64(":id")); err != nil {
  68. c.Error(err, "delete label")
  69. return
  70. }
  71. c.NoContent()
  72. }