瀏覽代碼

api: support get releases endpoint (#6026)

Philidor Green 4 年之前
父節點
當前提交
470274204e
共有 3 個文件被更改,包括 30 次插入0 次删除
  1. 6 0
      internal/db/release.go
  2. 1 0
      internal/route/api/v1/api.go
  3. 23 0
      internal/route/api/v1/repo/repo.go

+ 6 - 0
internal/db/release.go

@@ -267,6 +267,12 @@ func GetPublishedReleasesByRepoID(repoID int64, matches ...string) ([]*Release,
 	return releases, sess.Find(&releases, new(Release))
 }
 
+// GetReleasesByRepoID returns a list of all releases (including drafts) of given repository.
+func GetReleasesByRepoID(repoID int64) ([]*Release, error) {
+	releases := make([]*Release, 0)
+	return releases, x.Where("repo_id = ?", repoID).Find(&releases)
+}
+
 // GetDraftReleasesByRepoID returns all draft releases of repository.
 func GetDraftReleasesByRepoID(repoID int64) ([]*Release, error) {
 	releases := make([]*Release, 0)

+ 1 - 0
internal/route/api/v1/api.go

@@ -245,6 +245,7 @@ func RegisterRoutes(m *macaron.Macaron) {
 			m.Get("/search", repo.Search)
 
 			m.Get("/:username/:reponame", repoAssignment(), repo.Get)
+			m.Get("/:username/:reponame/releases", repoAssignment(), repo.Releases)
 		})
 
 		m.Group("/repos", func() {

+ 23 - 0
internal/route/api/v1/repo/repo.go

@@ -403,3 +403,26 @@ func MirrorSync(c *context.APIContext) {
 	go db.MirrorQueue.Add(repo.ID)
 	c.Status(http.StatusAccepted)
 }
+
+func Releases(c *context.APIContext) {
+	_, repo := parseOwnerAndRepo(c)
+	releases, err := db.GetReleasesByRepoID(repo.ID)
+	if err != nil {
+		c.Error(err, "get releases by repository ID")
+		return
+	}
+	apiReleases := make([]*api.Release, 0, len(releases))
+	for _, r := range releases {
+		publisher, err := db.GetUserByID(r.PublisherID)
+		if err != nil {
+			c.Error(err, "get release publisher")
+			return
+		}
+		r.Publisher = publisher
+	}
+	for _, r := range releases {
+		apiReleases = append(apiReleases, r.APIFormat())
+	}
+
+	c.JSONSuccess(&apiReleases)
+}