@@ -68,10 +68,35 @@ func (org *User) GetTeams() error {
6868}
6969
7070// GetMembers returns all members of organization.
71- func (org * User ) GetMembers () error {
72- ous , err := GetOrgUsersByOrgID (org .ID )
71+ func (org * User ) GetMembers () (err error ) {
72+ org .Members , org .MembersIsPublic , err = FindOrgMembers (FindOrgMembersOpts {
73+ OrgID : org .ID ,
74+ })
75+ return
76+ }
77+
78+ // FindOrgMembersOpts represensts find org members condtions
79+ type FindOrgMembersOpts struct {
80+ OrgID int64
81+ PublicOnly bool
82+ Start int
83+ Limit int
84+ }
85+
86+ // CountOrgMembers counts the organization's members
87+ func CountOrgMembers (opts FindOrgMembersOpts ) (int64 , error ) {
88+ sess := x .Where ("org_id=?" , opts .OrgID )
89+ if opts .PublicOnly {
90+ sess .And ("is_public = ?" , true )
91+ }
92+ return sess .Count (new (OrgUser ))
93+ }
94+
95+ // FindOrgMembers loads organization members according conditions
96+ func FindOrgMembers (opts FindOrgMembersOpts ) (UserList , map [int64 ]bool , error ) {
97+ ous , err := GetOrgUsersByOrgID (opts .OrgID , opts .PublicOnly , opts .Start , opts .Limit )
7398 if err != nil {
74- return err
99+ return nil , nil , err
75100 }
76101
77102 var ids = make ([]int64 , len (ous ))
@@ -80,9 +105,12 @@ func (org *User) GetMembers() error {
80105 ids [i ] = ou .UID
81106 idsIsPublic [ou .UID ] = ou .IsPublic
82107 }
83- org .MembersIsPublic = idsIsPublic
84- org .Members , err = GetUsersByIDs (ids )
85- return err
108+
109+ users , err := GetUsersByIDs (ids )
110+ if err != nil {
111+ return nil , nil , err
112+ }
113+ return users , idsIsPublic , nil
86114}
87115
88116// AddMember adds new member to organization.
@@ -467,15 +495,20 @@ func GetOrgUsersByUserID(uid int64, all bool) ([]*OrgUser, error) {
467495}
468496
469497// GetOrgUsersByOrgID returns all organization-user relations by organization ID.
470- func GetOrgUsersByOrgID (orgID int64 ) ([]* OrgUser , error ) {
471- return getOrgUsersByOrgID (x , orgID )
498+ func GetOrgUsersByOrgID (orgID int64 , publicOnly bool , start , limit int ) ([]* OrgUser , error ) {
499+ return getOrgUsersByOrgID (x , orgID , publicOnly , start , limit )
472500}
473501
474- func getOrgUsersByOrgID (e Engine , orgID int64 ) ([]* OrgUser , error ) {
502+ func getOrgUsersByOrgID (e Engine , orgID int64 , publicOnly bool , start , limit int ) ([]* OrgUser , error ) {
475503 ous := make ([]* OrgUser , 0 , 10 )
476- err := e .
477- Where ("org_id=?" , orgID ).
478- Find (& ous )
504+ sess := e .Where ("org_id=?" , orgID )
505+ if publicOnly {
506+ sess .And ("is_public = ?" , true )
507+ }
508+ if limit > 0 {
509+ sess .Limit (limit , start )
510+ }
511+ err := sess .Find (& ous )
479512 return ous , err
480513}
481514
0 commit comments