From aad9e9e084f9507cc721e9cb1b9f644724d92191 Mon Sep 17 00:00:00 2001 From: CirnoT <1447794+CirnoT@users.noreply.github.com> Date: Sun, 19 Apr 2020 23:54:33 +0200 Subject: [PATCH 1/4] begin work --- routers/api/v1/admin/org.go | 9 +++++++-- routers/api/v1/admin/user.go | 8 ++++++-- routers/api/v1/org/member.go | 10 ++++++++-- routers/api/v1/org/org.go | 8 ++++++-- routers/api/v1/org/team.go | 8 ++++++-- 5 files changed, 33 insertions(+), 10 deletions(-) diff --git a/routers/api/v1/admin/org.go b/routers/api/v1/admin/org.go index 11c2f1dc49e53..181fb6dbf0285 100644 --- a/routers/api/v1/admin/org.go +++ b/routers/api/v1/admin/org.go @@ -101,10 +101,12 @@ func GetAllOrgs(ctx *context.APIContext) { // "403": // "$ref": "#/responses/forbidden" - users, _, err := models.SearchUsers(&models.SearchUserOptions{ + listOptions := utils.GetListOptions(ctx) + + users, maxResults, err := models.SearchUsers(&models.SearchUserOptions{ Type: models.UserTypeOrganization, OrderBy: models.SearchOrderByAlphabetically, - ListOptions: utils.GetListOptions(ctx), + ListOptions: listOptions, Visible: []api.VisibleType{api.VisibleTypePublic, api.VisibleTypeLimited, api.VisibleTypePrivate}, }) if err != nil { @@ -115,5 +117,8 @@ func GetAllOrgs(ctx *context.APIContext) { for i := range users { orgs[i] = convert.ToOrganization(users[i]) } + + ctx.SetLinkHeader(int(maxResults), listOptions.PageSize) + ctx.Header().Set("X-Total-Count", fmt.Sprintf("%d", maxResults)) ctx.JSON(http.StatusOK, &orgs) } diff --git a/routers/api/v1/admin/user.go b/routers/api/v1/admin/user.go index 38237d67445d0..c0a3f76aeb1f9 100644 --- a/routers/api/v1/admin/user.go +++ b/routers/api/v1/admin/user.go @@ -351,10 +351,12 @@ func GetAllUsers(ctx *context.APIContext) { // "403": // "$ref": "#/responses/forbidden" - users, _, err := models.SearchUsers(&models.SearchUserOptions{ + listOptions := utils.GetListOptions(ctx) + + users, maxResults, err := models.SearchUsers(&models.SearchUserOptions{ Type: models.UserTypeIndividual, OrderBy: models.SearchOrderByAlphabetically, - ListOptions: utils.GetListOptions(ctx), + ListOptions: listOptions, }) if err != nil { ctx.Error(http.StatusInternalServerError, "GetAllUsers", err) @@ -366,5 +368,7 @@ func GetAllUsers(ctx *context.APIContext) { results[i] = convert.ToUser(users[i], ctx.IsSigned, ctx.User.IsAdmin) } + ctx.SetLinkHeader(int(maxResults), listOptions.PageSize) + ctx.Header().Set("X-Total-Count", fmt.Sprintf("%d", maxResults)) ctx.JSON(http.StatusOK, &results) } diff --git a/routers/api/v1/org/member.go b/routers/api/v1/org/member.go index 267eda12ad23a..fa3b35c7fed3f 100644 --- a/routers/api/v1/org/member.go +++ b/routers/api/v1/org/member.go @@ -20,10 +20,13 @@ import ( // listMembers list an organization's members func listMembers(ctx *context.APIContext, publicOnly bool) { var members []*models.User - members, _, err := models.FindOrgMembers(&models.FindOrgMembersOpts{ + + listOptions := utils.GetListOptions(ctx) + + members, maxResults, err := models.FindOrgMembers(&models.FindOrgMembersOpts{ OrgID: ctx.Org.Organization.ID, PublicOnly: publicOnly, - ListOptions: utils.GetListOptions(ctx), + ListOptions: listOptions, }) if err != nil { ctx.Error(http.StatusInternalServerError, "GetUsersByIDs", err) @@ -34,6 +37,9 @@ func listMembers(ctx *context.APIContext, publicOnly bool) { for i, member := range members { apiMembers[i] = convert.ToUser(member, ctx.IsSigned, ctx.User != nil && ctx.User.IsAdmin) } + + ctx.SetLinkHeader(int(maxResults), listOptions.PageSize) + ctx.Header().Set("X-Total-Count", fmt.Sprintf("%d", maxResults)) ctx.JSON(http.StatusOK, apiMembers) } diff --git a/routers/api/v1/org/org.go b/routers/api/v1/org/org.go index b79761c8750ad..437859e1330e9 100644 --- a/routers/api/v1/org/org.go +++ b/routers/api/v1/org/org.go @@ -115,8 +115,10 @@ func GetAll(ctx *context.APIContext) { } } - publicOrgs, _, err := models.SearchUsers(&models.SearchUserOptions{ - ListOptions: utils.GetListOptions(ctx), + listOptions := utils.GetListOptions(ctx) + + publicOrgs, maxResults, err := models.SearchUsers(&models.SearchUserOptions{ + ListOptions: listOptions, Type: models.UserTypeOrganization, OrderBy: models.SearchOrderByAlphabetically, Visible: vMode, @@ -130,6 +132,8 @@ func GetAll(ctx *context.APIContext) { orgs[i] = convert.ToOrganization(publicOrgs[i]) } + ctx.SetLinkHeader(int(maxResults), listOptions.PageSize) + ctx.Header().Set("X-Total-Count", fmt.Sprintf("%d", maxResults)) ctx.JSON(http.StatusOK, &orgs) } diff --git a/routers/api/v1/org/team.go b/routers/api/v1/org/team.go index 1bf984b17fb8f..b2a5a8e960205 100644 --- a/routers/api/v1/org/team.go +++ b/routers/api/v1/org/team.go @@ -650,15 +650,17 @@ func SearchTeam(ctx *context.APIContext) { // items: // "$ref": "#/definitions/Team" + listOptions := utils.GetListOptions(ctx) + opts := &models.SearchTeamOptions{ UserID: ctx.User.ID, Keyword: strings.TrimSpace(ctx.Query("q")), OrgID: ctx.Org.Organization.ID, IncludeDesc: (ctx.Query("include_desc") == "" || ctx.QueryBool("include_desc")), - ListOptions: utils.GetListOptions(ctx), + ListOptions: listOptions, } - teams, _, err := models.SearchTeam(opts) + teams, maxResults, err := models.SearchTeam(opts) if err != nil { log.Error("SearchTeam failed: %v", err) ctx.JSON(http.StatusInternalServerError, map[string]interface{}{ @@ -681,6 +683,8 @@ func SearchTeam(ctx *context.APIContext) { apiTeams[i] = convert.ToTeam(teams[i]) } + ctx.SetLinkHeader(int(maxResults), listOptions.PageSize) + ctx.Header().Set("X-Total-Count", fmt.Sprintf("%d", maxResults)) ctx.JSON(http.StatusOK, map[string]interface{}{ "ok": true, "data": apiTeams, From d8ee74953062f7c5c444ffd9e3e2e38c9de98bdc Mon Sep 17 00:00:00 2001 From: CirnoT <1447794+CirnoT@users.noreply.github.com> Date: Mon, 20 Apr 2020 00:22:31 +0200 Subject: [PATCH 2/4] import fmt --- routers/api/v1/admin/org.go | 1 + routers/api/v1/org/member.go | 8 ++------ routers/api/v1/org/org.go | 1 + routers/api/v1/org/team.go | 1 + 4 files changed, 5 insertions(+), 6 deletions(-) diff --git a/routers/api/v1/admin/org.go b/routers/api/v1/admin/org.go index 181fb6dbf0285..0f447e3bf4fe1 100644 --- a/routers/api/v1/admin/org.go +++ b/routers/api/v1/admin/org.go @@ -6,6 +6,7 @@ package admin import ( + "fmt" "net/http" "code.gitea.io/gitea/models" diff --git a/routers/api/v1/org/member.go b/routers/api/v1/org/member.go index fa3b35c7fed3f..cfbfb747c1ea9 100644 --- a/routers/api/v1/org/member.go +++ b/routers/api/v1/org/member.go @@ -21,12 +21,10 @@ import ( func listMembers(ctx *context.APIContext, publicOnly bool) { var members []*models.User - listOptions := utils.GetListOptions(ctx) - - members, maxResults, err := models.FindOrgMembers(&models.FindOrgMembersOpts{ + members, _, err := models.FindOrgMembers(&models.FindOrgMembersOpts{ OrgID: ctx.Org.Organization.ID, PublicOnly: publicOnly, - ListOptions: listOptions, + ListOptions: utils.GetListOptions(ctx), }) if err != nil { ctx.Error(http.StatusInternalServerError, "GetUsersByIDs", err) @@ -38,8 +36,6 @@ func listMembers(ctx *context.APIContext, publicOnly bool) { apiMembers[i] = convert.ToUser(member, ctx.IsSigned, ctx.User != nil && ctx.User.IsAdmin) } - ctx.SetLinkHeader(int(maxResults), listOptions.PageSize) - ctx.Header().Set("X-Total-Count", fmt.Sprintf("%d", maxResults)) ctx.JSON(http.StatusOK, apiMembers) } diff --git a/routers/api/v1/org/org.go b/routers/api/v1/org/org.go index 437859e1330e9..90173a9425034 100644 --- a/routers/api/v1/org/org.go +++ b/routers/api/v1/org/org.go @@ -6,6 +6,7 @@ package org import ( + "fmt" "net/http" "code.gitea.io/gitea/models" diff --git a/routers/api/v1/org/team.go b/routers/api/v1/org/team.go index b2a5a8e960205..57e3a9aeef221 100644 --- a/routers/api/v1/org/team.go +++ b/routers/api/v1/org/team.go @@ -6,6 +6,7 @@ package org import ( + "fmt" "net/http" "strings" From 0f5f5ace26d0248eed280de5ca07559607fea1c0 Mon Sep 17 00:00:00 2001 From: CirnoT <1447794+CirnoT@users.noreply.github.com> Date: Tue, 21 Apr 2020 17:27:21 +0200 Subject: [PATCH 3/4] more work --- routers/api/v1/repo/commits.go | 7 +++++-- routers/api/v1/repo/issue.go | 2 ++ routers/api/v1/repo/pull.go | 2 ++ routers/api/v1/repo/status.go | 9 +++++++-- routers/api/v1/user/user.go | 10 ++++++++-- 5 files changed, 24 insertions(+), 6 deletions(-) diff --git a/routers/api/v1/repo/commits.go b/routers/api/v1/repo/commits.go index f7da1698dc1a7..43a24910247c2 100644 --- a/routers/api/v1/repo/commits.go +++ b/routers/api/v1/repo/commits.go @@ -6,6 +6,7 @@ package repo import ( + "fmt" "math" "net/http" "strconv" @@ -190,14 +191,16 @@ func GetAllCommits(ctx *context.APIContext) { i++ } - ctx.SetLinkHeader(int(commitsCountTotal), listOptions.PageSize) - + // kept for backwards compatibility ctx.Header().Set("X-Page", strconv.Itoa(listOptions.Page)) ctx.Header().Set("X-PerPage", strconv.Itoa(listOptions.PageSize)) ctx.Header().Set("X-Total", strconv.FormatInt(commitsCountTotal, 10)) ctx.Header().Set("X-PageCount", strconv.Itoa(pageCount)) ctx.Header().Set("X-HasMore", strconv.FormatBool(listOptions.Page < pageCount)) + ctx.SetLinkHeader(int(commitsCountTotal), listOptions.PageSize) + ctx.Header().Set("X-Total-Count", fmt.Sprintf("%d", commitsCountTotal)) + ctx.JSON(http.StatusOK, &apiCommits) } diff --git a/routers/api/v1/repo/issue.go b/routers/api/v1/repo/issue.go index 2f08ba6ea60f1..02e67f5cb2b89 100644 --- a/routers/api/v1/repo/issue.go +++ b/routers/api/v1/repo/issue.go @@ -284,6 +284,8 @@ func ListIssues(ctx *context.APIContext) { } ctx.SetLinkHeader(ctx.Repo.Repository.NumIssues, listOptions.PageSize) + ctx.Header().Set("X-Total-Count", fmt.Sprintf("%d", ctx.Repo.Repository.NumIssues)) + ctx.JSON(http.StatusOK, convert.ToAPIIssueList(issues)) } diff --git a/routers/api/v1/repo/pull.go b/routers/api/v1/repo/pull.go index 428f1126338db..de95361231a52 100644 --- a/routers/api/v1/repo/pull.go +++ b/routers/api/v1/repo/pull.go @@ -113,6 +113,8 @@ func ListPullRequests(ctx *context.APIContext, form api.ListPullRequestsOptions) } ctx.SetLinkHeader(int(maxResults), listOptions.PageSize) + ctx.Header().Set("X-Total-Count", fmt.Sprintf("%d", maxResults)) + ctx.JSON(http.StatusOK, &apiPrs) } diff --git a/routers/api/v1/repo/status.go b/routers/api/v1/repo/status.go index 6ce71cc91196b..a5596c123014c 100644 --- a/routers/api/v1/repo/status.go +++ b/routers/api/v1/repo/status.go @@ -208,8 +208,10 @@ func getCommitStatuses(ctx *context.APIContext, sha string) { } repo := ctx.Repo.Repository - statuses, _, err := models.GetCommitStatuses(repo, sha, &models.CommitStatusOptions{ - ListOptions: utils.GetListOptions(ctx), + listOptions := utils.GetListOptions(ctx) + + statuses, maxResults, err := models.GetCommitStatuses(repo, sha, &models.CommitStatusOptions{ + ListOptions: listOptions, SortType: ctx.QueryTrim("sort"), State: ctx.QueryTrim("state"), }) @@ -223,6 +225,9 @@ func getCommitStatuses(ctx *context.APIContext, sha string) { apiStatuses = append(apiStatuses, status.APIFormat()) } + ctx.SetLinkHeader(int(maxResults), listOptions.PageSize) + ctx.Header().Set("X-Total-Count", fmt.Sprintf("%d", maxResults)) + ctx.JSON(http.StatusOK, apiStatuses) } diff --git a/routers/api/v1/user/user.go b/routers/api/v1/user/user.go index c0b0f1170c0cf..f628e1b9d9ac2 100644 --- a/routers/api/v1/user/user.go +++ b/routers/api/v1/user/user.go @@ -6,6 +6,7 @@ package user import ( + "fmt" "net/http" "strings" @@ -56,14 +57,16 @@ func Search(ctx *context.APIContext) { // items: // "$ref": "#/definitions/User" + listOptions := utils.GetListOptions(ctx) + opts := &models.SearchUserOptions{ Keyword: strings.Trim(ctx.Query("q"), " "), UID: com.StrTo(ctx.Query("uid")).MustInt64(), Type: models.UserTypeIndividual, - ListOptions: utils.GetListOptions(ctx), + ListOptions: listOptions, } - users, _, err := models.SearchUsers(opts) + users, maxResults, err := models.SearchUsers(opts) if err != nil { ctx.JSON(http.StatusInternalServerError, map[string]interface{}{ "ok": false, @@ -77,6 +80,9 @@ func Search(ctx *context.APIContext) { results[i] = convert.ToUser(users[i], ctx.IsSigned, ctx.User != nil && ctx.User.IsAdmin) } + ctx.SetLinkHeader(int(maxResults), listOptions.PageSize) + ctx.Header().Set("X-Total-Count", fmt.Sprintf("%d", maxResults)) + ctx.JSON(http.StatusOK, map[string]interface{}{ "ok": true, "data": results, From 2e512eb559d556b2a5f2e29ae0709952d8429c7b Mon Sep 17 00:00:00 2001 From: CirnoT <1447794+CirnoT@users.noreply.github.com> Date: Tue, 21 Apr 2020 19:43:08 +0200 Subject: [PATCH 4/4] empty commit