1
1
mirror of https://github.com/go-gitea/gitea synced 2025-07-23 02:38:35 +00:00

[API] generalize list header (#16551)

* Add info about list endpoints to CONTRIBUTING.md

* Let all list endpoints return X-Total-Count header 

* Add TODOs for GetCombinedCommitStatusByRef

* Fix models/issue_stopwatch.go

* Rrefactor models.ListDeployKeys

* Introduce helper func and use them for SetLinkHeader related func
This commit is contained in:
6543
2021-08-12 14:43:08 +02:00
committed by GitHub
parent ca13e1d56c
commit 2289580bb7
88 changed files with 637 additions and 329 deletions

View File

@@ -40,16 +40,29 @@ func ListHooks(ctx *context.APIContext) {
// "200":
// "$ref": "#/responses/HookList"
org := ctx.Org.Organization
orgHooks, err := models.GetWebhooksByOrgID(org.ID, utils.GetListOptions(ctx))
opts := &models.ListWebhookOptions{
ListOptions: utils.GetListOptions(ctx),
OrgID: ctx.Org.Organization.ID,
}
count, err := models.CountWebhooksByOpts(opts)
if err != nil {
ctx.Error(http.StatusInternalServerError, "GetWebhooksByOrgID", err)
ctx.InternalServerError(err)
return
}
orgHooks, err := models.ListWebhooksByOpts(opts)
if err != nil {
ctx.InternalServerError(err)
return
}
hooks := make([]*api.Hook, len(orgHooks))
for i, hook := range orgHooks {
hooks[i] = convert.ToHook(org.HomeLink(), hook)
hooks[i] = convert.ToHook(ctx.Org.Organization.HomeLink(), hook)
}
ctx.SetTotalCountHeader(count)
ctx.JSON(http.StatusOK, hooks)
}

View File

@@ -49,6 +49,13 @@ func ListLabels(ctx *context.APIContext) {
return
}
count, err := models.CountLabelsByOrgID(ctx.Org.Organization.ID)
if err != nil {
ctx.InternalServerError(err)
return
}
ctx.SetTotalCountHeader(count)
ctx.JSON(http.StatusOK, convert.ToLabelList(labels))
}

View File

@@ -18,15 +18,21 @@ import (
// listMembers list an organization's members
func listMembers(ctx *context.APIContext, publicOnly bool) {
var members []*models.User
members, _, err := models.FindOrgMembers(&models.FindOrgMembersOpts{
opts := &models.FindOrgMembersOpts{
OrgID: ctx.Org.Organization.ID,
PublicOnly: publicOnly,
ListOptions: utils.GetListOptions(ctx),
})
}
count, err := models.CountOrgMembers(opts)
if err != nil {
ctx.Error(http.StatusInternalServerError, "GetUsersByIDs", err)
ctx.InternalServerError(err)
return
}
members, _, err := models.FindOrgMembers(opts)
if err != nil {
ctx.InternalServerError(err)
return
}
@@ -35,6 +41,7 @@ func listMembers(ctx *context.APIContext, publicOnly bool) {
apiMembers[i] = convert.ToUser(member, ctx.User)
}
ctx.SetTotalCountHeader(count)
ctx.JSON(http.StatusOK, apiMembers)
}

View File

@@ -6,7 +6,6 @@
package org
import (
"fmt"
"net/http"
"code.gitea.io/gitea/models"
@@ -38,9 +37,8 @@ func listUserOrgs(ctx *context.APIContext, u *models.User) {
apiOrgs[i] = convert.ToOrganization(orgs[i])
}
ctx.SetLinkHeader(int(maxResults), listOptions.PageSize)
ctx.Header().Set("X-Total-Count", fmt.Sprintf("%d", maxResults))
ctx.Header().Set("Access-Control-Expose-Headers", "X-Total-Count, Link")
ctx.SetLinkHeader(maxResults, listOptions.PageSize)
ctx.SetTotalCountHeader(int64(maxResults))
ctx.JSON(http.StatusOK, &apiOrgs)
}
@@ -145,8 +143,7 @@ func GetAll(ctx *context.APIContext) {
}
ctx.SetLinkHeader(int(maxResults), listOptions.PageSize)
ctx.Header().Set("X-Total-Count", fmt.Sprintf("%d", maxResults))
ctx.Header().Set("Access-Control-Expose-Headers", "X-Total-Count, Link")
ctx.SetTotalCountHeader(maxResults)
ctx.JSON(http.StatusOK, &orgs)
}

View File

@@ -6,7 +6,6 @@
package org
import (
"fmt"
"net/http"
"code.gitea.io/gitea/models"
@@ -44,23 +43,27 @@ func ListTeams(ctx *context.APIContext) {
// "200":
// "$ref": "#/responses/TeamList"
org := ctx.Org.Organization
if err := org.GetTeams(&models.SearchTeamOptions{
teams, count, err := models.SearchTeam(&models.SearchTeamOptions{
ListOptions: utils.GetListOptions(ctx),
}); err != nil {
ctx.Error(http.StatusInternalServerError, "GetTeams", err)
OrgID: ctx.Org.Organization.ID,
})
if err != nil {
ctx.Error(http.StatusInternalServerError, "LoadTeams", err)
return
}
apiTeams := make([]*api.Team, len(org.Teams))
for i := range org.Teams {
if err := org.Teams[i].GetUnits(); err != nil {
apiTeams := make([]*api.Team, len(teams))
for i := range teams {
if err := teams[i].GetUnits(); err != nil {
ctx.Error(http.StatusInternalServerError, "GetUnits", err)
return
}
apiTeams[i] = convert.ToTeam(org.Teams[i])
apiTeams[i] = convert.ToTeam(teams[i])
}
ctx.SetTotalCountHeader(count)
ctx.JSON(http.StatusOK, apiTeams)
}
@@ -84,7 +87,10 @@ func ListUserTeams(ctx *context.APIContext) {
// "200":
// "$ref": "#/responses/TeamList"
teams, err := models.GetUserTeams(ctx.User.ID, utils.GetListOptions(ctx))
teams, count, err := models.SearchTeam(&models.SearchTeamOptions{
ListOptions: utils.GetListOptions(ctx),
UserID: ctx.User.ID,
})
if err != nil {
ctx.Error(http.StatusInternalServerError, "GetUserTeams", err)
return
@@ -106,6 +112,8 @@ func ListUserTeams(ctx *context.APIContext) {
apiTeams[i] = convert.ToTeam(teams[i])
apiTeams[i].Organization = apiOrg
}
ctx.SetTotalCountHeader(count)
ctx.JSON(http.StatusOK, apiTeams)
}
@@ -327,17 +335,19 @@ func GetTeamMembers(ctx *context.APIContext) {
ctx.NotFound()
return
}
team := ctx.Org.Team
if err := team.GetMembers(&models.SearchMembersOptions{
if err := ctx.Org.Team.GetMembers(&models.SearchMembersOptions{
ListOptions: utils.GetListOptions(ctx),
}); err != nil {
ctx.Error(http.StatusInternalServerError, "GetTeamMembers", err)
return
}
members := make([]*api.User, len(team.Members))
for i, member := range team.Members {
members := make([]*api.User, len(ctx.Org.Team.Members))
for i, member := range ctx.Org.Team.Members {
members[i] = convert.ToUser(member, ctx.User)
}
ctx.SetTotalCountHeader(int64(ctx.Org.Team.NumMembers))
ctx.JSON(http.StatusOK, members)
}
@@ -687,8 +697,7 @@ func SearchTeam(ctx *context.APIContext) {
}
ctx.SetLinkHeader(int(maxResults), listOptions.PageSize)
ctx.Header().Set("X-Total-Count", fmt.Sprintf("%d", maxResults))
ctx.Header().Set("Access-Control-Expose-Headers", "X-Total-Count, Link")
ctx.SetTotalCountHeader(maxResults)
ctx.JSON(http.StatusOK, map[string]interface{}{
"ok": true,
"data": apiTeams,