milestone.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. // Copyright 2015 The Gogs Authors. All rights reserved.
  2. // Copyright 2018 Gitote. All rights reserved.
  3. //
  4. // This source code is licensed under the MIT license found in the
  5. // LICENSE file in the root directory of this source tree.
  6. package repo
  7. import (
  8. "gitote/gitote/models"
  9. "gitote/gitote/pkg/context"
  10. "time"
  11. api "gitlab.com/gitote/go-gitote-client"
  12. )
  13. func ListMilestones(c *context.APIContext) {
  14. milestones, err := models.GetMilestonesByRepoID(c.Repo.Repository.ID)
  15. if err != nil {
  16. c.Error(500, "GetMilestonesByRepoID", err)
  17. return
  18. }
  19. apiMilestones := make([]*api.Milestone, len(milestones))
  20. for i := range milestones {
  21. apiMilestones[i] = milestones[i].APIFormat()
  22. }
  23. c.JSON(200, &apiMilestones)
  24. }
  25. func GetMilestone(c *context.APIContext) {
  26. milestone, err := models.GetMilestoneByRepoID(c.Repo.Repository.ID, c.ParamsInt64(":id"))
  27. if err != nil {
  28. if models.IsErrMilestoneNotExist(err) {
  29. c.Status(404)
  30. } else {
  31. c.Error(500, "GetMilestoneByRepoID", err)
  32. }
  33. return
  34. }
  35. c.JSON(200, milestone.APIFormat())
  36. }
  37. func CreateMilestone(c *context.APIContext, form api.CreateMilestoneOption) {
  38. if form.Deadline == nil {
  39. defaultDeadline, _ := time.ParseInLocation("2006-01-02", "9999-12-31", time.Local)
  40. form.Deadline = &defaultDeadline
  41. }
  42. milestone := &models.Milestone{
  43. RepoID: c.Repo.Repository.ID,
  44. Name: form.Title,
  45. Content: form.Description,
  46. Deadline: *form.Deadline,
  47. }
  48. if err := models.NewMilestone(milestone); err != nil {
  49. c.Error(500, "NewMilestone", err)
  50. return
  51. }
  52. c.JSON(201, milestone.APIFormat())
  53. }
  54. func EditMilestone(c *context.APIContext, form api.EditMilestoneOption) {
  55. milestone, err := models.GetMilestoneByRepoID(c.Repo.Repository.ID, c.ParamsInt64(":id"))
  56. if err != nil {
  57. if models.IsErrMilestoneNotExist(err) {
  58. c.Status(404)
  59. } else {
  60. c.Error(500, "GetMilestoneByRepoID", err)
  61. }
  62. return
  63. }
  64. if len(form.Title) > 0 {
  65. milestone.Name = form.Title
  66. }
  67. if form.Description != nil {
  68. milestone.Content = *form.Description
  69. }
  70. if form.Deadline != nil && !form.Deadline.IsZero() {
  71. milestone.Deadline = *form.Deadline
  72. }
  73. if form.State != nil {
  74. if err = milestone.ChangeStatus(api.STATE_CLOSED == api.StateType(*form.State)); err != nil {
  75. c.Error(500, "ChangeStatus", err)
  76. return
  77. }
  78. } else if err = models.UpdateMilestone(milestone); err != nil {
  79. c.Handle(500, "UpdateMilestone", err)
  80. return
  81. }
  82. c.JSON(200, milestone.APIFormat())
  83. }
  84. func DeleteMilestone(c *context.APIContext) {
  85. if err := models.DeleteMilestoneOfRepoByID(c.Repo.Repository.ID, c.ParamsInt64(":id")); err != nil {
  86. c.Error(500, "DeleteMilestoneByRepoID", err)
  87. return
  88. }
  89. c.Status(204)
  90. }