diff options
-rw-r--r-- | internal/db/release.go | 6 | ||||
-rw-r--r-- | internal/route/api/v1/api.go | 1 | ||||
-rw-r--r-- | internal/route/api/v1/repo/repo.go | 23 |
3 files changed, 30 insertions, 0 deletions
diff --git a/internal/db/release.go b/internal/db/release.go index 71a72dae..7ec558b8 100644 --- a/internal/db/release.go +++ b/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) diff --git a/internal/route/api/v1/api.go b/internal/route/api/v1/api.go index b56d640b..01f23d42 100644 --- a/internal/route/api/v1/api.go +++ b/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() { diff --git a/internal/route/api/v1/repo/repo.go b/internal/route/api/v1/repo/repo.go index e198dffc..71b94d75 100644 --- a/internal/route/api/v1/repo/repo.go +++ b/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) +} |