You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

milestone.go 5.7 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  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. "time"
  7. api "code.gitea.io/sdk/gitea"
  8. "code.gitea.io/gitea/models"
  9. "code.gitea.io/gitea/modules/context"
  10. "code.gitea.io/gitea/modules/util"
  11. )
  12. // ListMilestones list all the milestones for a repository
  13. func ListMilestones(ctx *context.APIContext) {
  14. // swagger:operation GET /repos/{owner}/{repo}/milestones/{id} issue issueGetMilestone
  15. // ---
  16. // summary: Get a milestone
  17. // produces:
  18. // - application/json
  19. // responses:
  20. // "200":
  21. // "$ref": "#/responses/Milestone"
  22. milestones, err := models.GetMilestonesByRepoID(ctx.Repo.Repository.ID)
  23. if err != nil {
  24. ctx.Error(500, "GetMilestonesByRepoID", err)
  25. return
  26. }
  27. apiMilestones := make([]*api.Milestone, len(milestones))
  28. for i := range milestones {
  29. apiMilestones[i] = milestones[i].APIFormat()
  30. }
  31. ctx.JSON(200, &apiMilestones)
  32. }
  33. // GetMilestone get a milestone for a repository
  34. func GetMilestone(ctx *context.APIContext) {
  35. // swagger:operation GET /repos/{owner}/{repo}/milestones issue issueGetMilestones
  36. // ---
  37. // summary: Get all of a repository's milestones
  38. // produces:
  39. // - application/json
  40. // parameters:
  41. // - name: owner
  42. // in: path
  43. // description: owner of the repo
  44. // type: string
  45. // required: true
  46. // - name: repo
  47. // in: path
  48. // description: name of the repo
  49. // type: string
  50. // required: true
  51. // parameters:
  52. // - name: owner
  53. // in: path
  54. // description: owner of the repo
  55. // type: string
  56. // required: true
  57. // - name: repo
  58. // in: path
  59. // description: name of the repo
  60. // type: string
  61. // required: true
  62. // - name: id
  63. // in: path
  64. // description: id of the milestone to get
  65. // type: integer
  66. // required: true
  67. // responses:
  68. // "200":
  69. // "$ref": "#/responses/MilestoneList"
  70. milestone, err := models.GetMilestoneByRepoID(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id"))
  71. if err != nil {
  72. if models.IsErrMilestoneNotExist(err) {
  73. ctx.Status(404)
  74. } else {
  75. ctx.Error(500, "GetMilestoneByRepoID", err)
  76. }
  77. return
  78. }
  79. ctx.JSON(200, milestone.APIFormat())
  80. }
  81. // CreateMilestone create a milestone for a repository
  82. func CreateMilestone(ctx *context.APIContext, form api.CreateMilestoneOption) {
  83. // swagger:operation POST /repos/{owner}/{repo}/milestones issue issueCreateMilestone
  84. // ---
  85. // summary: Create a milestone
  86. // consumes:
  87. // - application/json
  88. // produces:
  89. // - application/json
  90. // parameters:
  91. // - name: owner
  92. // in: path
  93. // description: owner of the repo
  94. // type: string
  95. // required: true
  96. // - name: repo
  97. // in: path
  98. // description: name of the repo
  99. // type: string
  100. // required: true
  101. // - name: body
  102. // in: body
  103. // schema:
  104. // "$ref": "#/definitions/CreateMilestoneOption"
  105. // responses:
  106. // "201":
  107. // "$ref": "#/responses/Milestone"
  108. if form.Deadline == nil {
  109. defaultDeadline, _ := time.ParseInLocation("2006-01-02", "9999-12-31", time.Local)
  110. form.Deadline = &defaultDeadline
  111. }
  112. milestone := &models.Milestone{
  113. RepoID: ctx.Repo.Repository.ID,
  114. Name: form.Title,
  115. Content: form.Description,
  116. DeadlineUnix: util.TimeStamp(form.Deadline.Unix()),
  117. }
  118. if err := models.NewMilestone(milestone); err != nil {
  119. ctx.Error(500, "NewMilestone", err)
  120. return
  121. }
  122. ctx.JSON(201, milestone.APIFormat())
  123. }
  124. // EditMilestone modify a milestone for a repository
  125. func EditMilestone(ctx *context.APIContext, form api.EditMilestoneOption) {
  126. // swagger:operation PATCH /repos/{owner}/{repo}/milestones/{id} issue issueEditMilestone
  127. // ---
  128. // summary: Update a milestone
  129. // consumes:
  130. // - application/json
  131. // produces:
  132. // - application/json
  133. // parameters:
  134. // - name: owner
  135. // in: path
  136. // description: owner of the repo
  137. // type: string
  138. // required: true
  139. // - name: repo
  140. // in: path
  141. // description: name of the repo
  142. // type: string
  143. // required: true
  144. // - name: body
  145. // in: body
  146. // schema:
  147. // "$ref": "#/definitions/EditMilestoneOption"
  148. // responses:
  149. // "200":
  150. // "$ref": "#/responses/Milestone"
  151. milestone, err := models.GetMilestoneByRepoID(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id"))
  152. if err != nil {
  153. if models.IsErrMilestoneNotExist(err) {
  154. ctx.Status(404)
  155. } else {
  156. ctx.Error(500, "GetMilestoneByRepoID", err)
  157. }
  158. return
  159. }
  160. if len(form.Title) > 0 {
  161. milestone.Name = form.Title
  162. }
  163. if form.Description != nil {
  164. milestone.Content = *form.Description
  165. }
  166. if form.Deadline != nil && !form.Deadline.IsZero() {
  167. milestone.DeadlineUnix = util.TimeStamp(form.Deadline.Unix())
  168. }
  169. if err := models.UpdateMilestone(milestone); err != nil {
  170. ctx.Handle(500, "UpdateMilestone", err)
  171. return
  172. }
  173. ctx.JSON(200, milestone.APIFormat())
  174. }
  175. // DeleteMilestone delete a milestone for a repository
  176. func DeleteMilestone(ctx *context.APIContext) {
  177. // swagger:operation DELETE /repos/{owner}/{repo}/milestones/{id} issue issueDeleteMilestone
  178. // ---
  179. // summary: Delete a milestone
  180. // parameters:
  181. // - name: owner
  182. // in: path
  183. // description: owner of the repo
  184. // type: string
  185. // required: true
  186. // - name: repo
  187. // in: path
  188. // description: name of the repo
  189. // type: string
  190. // required: true
  191. // - name: body
  192. // in: path
  193. // description: id of the milestone to delete
  194. // type: integer
  195. // required: true
  196. // responses:
  197. // "204":
  198. // "$ref": "#/responses/empty"
  199. if err := models.DeleteMilestoneByRepoID(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id")); err != nil {
  200. ctx.Error(500, "DeleteMilestoneByRepoID", err)
  201. return
  202. }
  203. ctx.Status(204)
  204. }