aboutsummaryrefslogtreecommitdiffstats
path: root/routers/api/v1/org
diff options
context:
space:
mode:
author6543 <6543@obermui.de>2021-08-12 14:43:08 +0200
committerGitHub <noreply@github.com>2021-08-12 14:43:08 +0200
commit2289580bb7ef8dfa4124c2b3bfb89897dbb35f46 (patch)
treee68aae604bb3d738b44156504a1415adaf042c68 /routers/api/v1/org
parentca13e1d56c561f72cf8ad251fe61b1898abfec51 (diff)
downloadgitea-2289580bb7ef8dfa4124c2b3bfb89897dbb35f46.tar.gz
gitea-2289580bb7ef8dfa4124c2b3bfb89897dbb35f46.zip
[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
Diffstat (limited to 'routers/api/v1/org')
-rw-r--r--routers/api/v1/org/hook.go21
-rw-r--r--routers/api/v1/org/label.go7
-rw-r--r--routers/api/v1/org/member.go17
-rw-r--r--routers/api/v1/org/org.go9
-rw-r--r--routers/api/v1/org/team.go41
5 files changed, 64 insertions, 31 deletions
diff --git a/routers/api/v1/org/hook.go b/routers/api/v1/org/hook.go
index ed827c48d4..c5982300eb 100644
--- a/routers/api/v1/org/hook.go
+++ b/routers/api/v1/org/hook.go
@@ -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)
}
diff --git a/routers/api/v1/org/label.go b/routers/api/v1/org/label.go
index c70252158e..09acb0bf04 100644
--- a/routers/api/v1/org/label.go
+++ b/routers/api/v1/org/label.go
@@ -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))
}
diff --git a/routers/api/v1/org/member.go b/routers/api/v1/org/member.go
index 09abad2557..97940d5925 100644
--- a/routers/api/v1/org/member.go
+++ b/routers/api/v1/org/member.go
@@ -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.InternalServerError(err)
+ return
+ }
+
+ members, _, err := models.FindOrgMembers(opts)
if err != nil {
- ctx.Error(http.StatusInternalServerError, "GetUsersByIDs", err)
+ 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)
}
diff --git a/routers/api/v1/org/org.go b/routers/api/v1/org/org.go
index 5c16594f89..39ce896cd6 100644
--- a/routers/api/v1/org/org.go
+++ b/routers/api/v1/org/org.go
@@ -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)
}
diff --git a/routers/api/v1/org/team.go b/routers/api/v1/org/team.go
index 7998bb249f..a84763d6f6 100644
--- a/routers/api/v1/org/team.go
+++ b/routers/api/v1/org/team.go
@@ -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,