Skip to content

Commit 3d3e2ff

Browse files
committed
Add X-Total-Count header
1 parent 371926c commit 3d3e2ff

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

models/release.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,11 @@ func GetReleasesByRepoID(repoID int64, opts FindReleasesOptions) ([]*Release, er
215215
return rels, sess.Find(&rels)
216216
}
217217

218+
// CountReleasesByRepoID returns a number of releases matching FindReleaseOptions and RepoID.
219+
func CountReleasesByRepoID(repoID int64, opts FindReleasesOptions) (int64, error) {
220+
return x.Where(opts.toConds(repoID)).Count(new(Release))
221+
}
222+
218223
// GetLatestReleaseByRepoID returns the latest release for a repository
219224
func GetLatestReleaseByRepoID(repoID int64) (*Release, error) {
220225
cond := builder.NewCond().

routers/api/v1/repo/release.go

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
package repo
66

77
import (
8+
"fmt"
89
"net/http"
910

1011
"code.gitea.io/gitea/models"
@@ -112,13 +113,15 @@ func ListReleases(ctx *context.APIContext) {
112113
listOptions.PageSize = ctx.QueryInt("per_page")
113114
}
114115

115-
releases, err := models.GetReleasesByRepoID(ctx.Repo.Repository.ID, models.FindReleasesOptions{
116+
opts := models.FindReleasesOptions{
116117
ListOptions: listOptions,
117118
IncludeDrafts: ctx.Repo.AccessMode >= models.AccessModeWrite,
118119
IncludeTags: false,
119120
IsDraft: ctx.QueryOptionalBool("draft"),
120121
IsPreRelease: ctx.QueryOptionalBool("pre-release"),
121-
})
122+
}
123+
124+
releases, err := models.GetReleasesByRepoID(ctx.Repo.Repository.ID, opts)
122125
if err != nil {
123126
ctx.Error(http.StatusInternalServerError, "GetReleasesByRepoID", err)
124127
return
@@ -131,6 +134,16 @@ func ListReleases(ctx *context.APIContext) {
131134
}
132135
rels[i] = convert.ToRelease(release)
133136
}
137+
138+
filteredCount, err := models.CountReleasesByRepoID(ctx.Repo.Repository.ID, opts)
139+
if err != nil {
140+
ctx.InternalServerError(err)
141+
return
142+
}
143+
144+
ctx.SetLinkHeader(int(filteredCount), listOptions.PageSize)
145+
ctx.Header().Set("X-Total-Count", fmt.Sprint(filteredCount))
146+
ctx.Header().Set("Access-Control-Expose-Headers", "X-Total-Count, Link")
134147
ctx.JSON(http.StatusOK, rels)
135148
}
136149

0 commit comments

Comments
 (0)