summaryrefslogtreecommitdiffstats
path: root/models/org.go
diff options
context:
space:
mode:
authorSpaWn2KiLl <SpaWn2KiLl@users.noreply.github.com>2020-01-24 19:00:29 +0000
committertechknowlogick <techknowlogick@gitea.io>2020-01-24 14:00:29 -0500
commit1f01f53c53ea75634f981611635be49c69e1920b (patch)
treedd99285ba1d9a8a888f8deccef7865e53901d859 /models/org.go
parent333401e0fdca1abe096257479e7090c6e69985ec (diff)
downloadgitea-1f01f53c53ea75634f981611635be49c69e1920b.tar.gz
gitea-1f01f53c53ea75634f981611635be49c69e1920b.zip
API add/generalize pagination (#9452)
* paginate results * fixed deadlock * prevented breaking change * updated swagger * go fmt * fixed find topic * go mod tidy * go mod vendor with go1.13.5 * fixed repo find topics * fixed unit test * added Limit method to Engine struct; use engine variable when provided; fixed gitignore * use ItemsPerPage for default pagesize; fix GetWatchers, getOrgUsersByOrgID and GetStargazers; fix GetAllCommits headers; reverted some changed behaviors * set Page value on Home route * improved memory allocations * fixed response headers * removed logfiles * fixed import order * import order * improved swagger * added function to get models.ListOptions from context * removed pagesize diff on unit test * fixed imports * removed unnecessary struct field * fixed go fmt * scoped PR * code improvements * code improvements * go mod tidy * fixed import order * fixed commit statuses session * fixed files headers * fixed headers; added pagination for notifications * go mod tidy * go fmt * removed Private from user search options; added setting.UI.IssuePagingNum as default valeu on repo's issues list * Apply suggestions from code review Co-Authored-By: 6543 <6543@obermui.de> Co-Authored-By: zeripath <art27@cantab.net> * fixed build error * CI.restart() * fixed merge conflicts resolve * fixed conflicts resolve * improved FindTrackedTimesOptions.ToOptions() method * added backwards compatibility on ListReleases request; fixed issue tracked time ToSession * fixed build error; fixed swagger template * fixed swagger template * fixed ListReleases backwards compatibility * added page to user search route Co-authored-by: techknowlogick <matti@mdranta.net> Co-authored-by: 6543 <6543@obermui.de> Co-authored-by: zeripath <art27@cantab.net>
Diffstat (limited to 'models/org.go')
-rw-r--r--models/org.go49
1 files changed, 30 insertions, 19 deletions
diff --git a/models/org.go b/models/org.go
index d79c0db84e..176a51ef94 100644
--- a/models/org.go
+++ b/models/org.go
@@ -62,14 +62,18 @@ func (org *User) getTeams(e Engine) error {
Find(&org.Teams)
}
-// GetTeams returns all teams that belong to organization.
-func (org *User) GetTeams() error {
+// GetTeams returns paginated teams that belong to organization.
+func (org *User) GetTeams(opts *SearchTeamOptions) error {
+ if opts.Page != 0 {
+ return org.getTeams(opts.getPaginatedSession())
+ }
+
return org.getTeams(x)
}
// GetMembers returns all members of organization.
func (org *User) GetMembers() (err error) {
- org.Members, org.MembersIsPublic, err = FindOrgMembers(FindOrgMembersOpts{
+ org.Members, org.MembersIsPublic, err = FindOrgMembers(&FindOrgMembersOpts{
OrgID: org.ID,
})
return
@@ -77,10 +81,9 @@ func (org *User) GetMembers() (err error) {
// FindOrgMembersOpts represensts find org members condtions
type FindOrgMembersOpts struct {
+ ListOptions
OrgID int64
PublicOnly bool
- Start int
- Limit int
}
// CountOrgMembers counts the organization's members
@@ -93,8 +96,8 @@ func CountOrgMembers(opts FindOrgMembersOpts) (int64, error) {
}
// FindOrgMembers loads organization members according conditions
-func FindOrgMembers(opts FindOrgMembersOpts) (UserList, map[int64]bool, error) {
- ous, err := GetOrgUsersByOrgID(opts.OrgID, opts.PublicOnly, opts.Start, opts.Limit)
+func FindOrgMembers(opts *FindOrgMembersOpts) (UserList, map[int64]bool, error) {
+ ous, err := GetOrgUsersByOrgID(opts)
if err != nil {
return nil, nil, err
}
@@ -479,15 +482,20 @@ func GetOrgsCanCreateRepoByUserID(userID int64) ([]*User, error) {
}
// GetOrgUsersByUserID returns all organization-user relations by user ID.
-func GetOrgUsersByUserID(uid int64, all bool) ([]*OrgUser, error) {
+func GetOrgUsersByUserID(uid int64, opts *SearchOrganizationsOptions) ([]*OrgUser, error) {
ous := make([]*OrgUser, 0, 10)
sess := x.
Join("LEFT", "`user`", "`org_user`.org_id=`user`.id").
Where("`org_user`.uid=?", uid)
- if !all {
+ if !opts.All {
// Only show public organizations
sess.And("is_public=?", true)
}
+
+ if opts.PageSize != 0 {
+ sess = opts.setSessionPagination(sess)
+ }
+
err := sess.
Asc("`user`.name").
Find(&ous)
@@ -495,21 +503,24 @@ func GetOrgUsersByUserID(uid int64, all bool) ([]*OrgUser, error) {
}
// GetOrgUsersByOrgID returns all organization-user relations by organization ID.
-func GetOrgUsersByOrgID(orgID int64, publicOnly bool, start, limit int) ([]*OrgUser, error) {
- return getOrgUsersByOrgID(x, orgID, publicOnly, start, limit)
+func GetOrgUsersByOrgID(opts *FindOrgMembersOpts) ([]*OrgUser, error) {
+ return getOrgUsersByOrgID(x, opts)
}
-func getOrgUsersByOrgID(e Engine, orgID int64, publicOnly bool, start, limit int) ([]*OrgUser, error) {
- ous := make([]*OrgUser, 0, 10)
- sess := e.Where("org_id=?", orgID)
- if publicOnly {
+func getOrgUsersByOrgID(e Engine, opts *FindOrgMembersOpts) ([]*OrgUser, error) {
+ sess := e.Where("org_id=?", opts.OrgID)
+ if opts.PublicOnly {
sess.And("is_public = ?", true)
}
- if limit > 0 {
- sess.Limit(limit, start)
+ if opts.ListOptions.PageSize > 0 {
+ sess = opts.setSessionPagination(sess)
+
+ ous := make([]*OrgUser, 0, opts.PageSize)
+ return ous, sess.Find(&ous)
}
- err := sess.Find(&ous)
- return ous, err
+
+ var ous []*OrgUser
+ return ous, sess.Find(&ous)
}
// ChangeOrgUserStatus changes public or private membership status.