Skip to content

Commit 97a4675

Browse files
Gusted6543lunnywxiaoguangtechknowlogick
authored andcommitted
Add GetUserTeams (go-gitea#18499)
Backport go-gitea#18499 * COrrect use `UserID` in `SearchTeams` - Use `UserID` in the `SearchTeams` function, currently it was useless to pass such information. Now it does a INNER statement to `team_user` which obtains UserID -> TeamID data. - Make OrgID optional. - Resolves go-gitea#18484 * Seperate searching specific user * Add condition back * Use correct struct type Co-authored-by: 6543 <6543@obermui.de> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com> Co-authored-by: wxiaoguang <wxiaoguang@gmail.com> Co-authored-by: techknowlogick <techknowlogick@gitea.io>
1 parent 483bda4 commit 97a4675

File tree

5 files changed

+62
-18
lines changed

5 files changed

+62
-18
lines changed

models/org_team.go

+53-8
Original file line numberDiff line numberDiff line change
@@ -49,22 +49,67 @@ func init() {
4949
db.RegisterModel(new(TeamUnit))
5050
}
5151

52-
// SearchTeamOptions holds the search options
53-
type SearchTeamOptions struct {
52+
// SearchOrgTeamOptions holds the search options
53+
type SearchOrgTeamOptions struct {
5454
db.ListOptions
55-
UserID int64
5655
Keyword string
5756
OrgID int64
5857
IncludeDesc bool
5958
}
6059

60+
// GetUserTeamOptions holds the search options.
61+
type GetUserTeamOptions struct {
62+
db.ListOptions
63+
UserID int64
64+
}
65+
6166
// SearchMembersOptions holds the search options
6267
type SearchMembersOptions struct {
6368
db.ListOptions
6469
}
6570

66-
// SearchTeam search for teams. Caller is responsible to check permissions.
67-
func SearchTeam(opts *SearchTeamOptions) ([]*Team, int64, error) {
71+
// GetUserTeams search for org teams. Caller is responsible to check permissions.
72+
func GetUserTeams(opts *GetUserTeamOptions) ([]*Team, int64, error) {
73+
if opts.Page <= 0 {
74+
opts.Page = 1
75+
}
76+
if opts.PageSize == 0 {
77+
// Default limit
78+
opts.PageSize = 10
79+
}
80+
81+
sess := db.GetEngine(db.DefaultContext)
82+
83+
sess = sess.Join("INNER", "team_user", "team_user.team_id = team.id").
84+
And("team_user.uid=?", opts.UserID)
85+
86+
count, err := sess.
87+
Count(new(Team))
88+
if err != nil {
89+
return nil, 0, err
90+
}
91+
92+
if opts.PageSize == -1 {
93+
opts.PageSize = int(count)
94+
} else {
95+
sess = sess.Limit(opts.PageSize, (opts.Page-1)*opts.PageSize)
96+
}
97+
98+
sess = sess.Join("INNER", "team_user", "team_user.team_id = team.id").
99+
And("team_user.uid=?", opts.UserID)
100+
101+
teams := make([]*Team, 0, opts.PageSize)
102+
if err = sess.
103+
OrderBy("lower_name").
104+
Find(&teams); err != nil {
105+
return nil, 0, err
106+
}
107+
108+
return teams, count, nil
109+
}
110+
111+
// SearchOrgTeams search for org teams. Caller is responsible to check permissions.
112+
func SearchOrgTeams(opts *SearchOrgTeamOptions) ([]*Team, int64, error) {
68113
if opts.Page <= 0 {
69114
opts.Page = 1
70115
}
@@ -196,7 +241,7 @@ func (t *Team) getRepositories(e db.Engine) error {
196241
}
197242

198243
// GetRepositories returns paginated repositories in team of organization.
199-
func (t *Team) GetRepositories(opts *SearchTeamOptions) error {
244+
func (t *Team) GetRepositories(opts *SearchOrgTeamOptions) error {
200245
if opts.Page == 0 {
201246
return t.getRepositories(db.GetEngine(db.DefaultContext))
202247
}
@@ -716,7 +761,7 @@ func UpdateTeam(t *Team, authChanged, includeAllChanged bool) (err error) {
716761
// DeleteTeam deletes given team.
717762
// It's caller's responsibility to assign organization ID.
718763
func DeleteTeam(t *Team) error {
719-
if err := t.GetRepositories(&SearchTeamOptions{}); err != nil {
764+
if err := t.GetRepositories(&SearchOrgTeamOptions{}); err != nil {
720765
return err
721766
}
722767

@@ -858,7 +903,7 @@ func AddTeamMember(team *Team, userID int64) error {
858903
}
859904

860905
// Get team and its repositories.
861-
if err := team.GetRepositories(&SearchTeamOptions{}); err != nil {
906+
if err := team.GetRepositories(&SearchOrgTeamOptions{}); err != nil {
862907
return err
863908
}
864909

models/org_team_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ func TestTeam_GetRepositories(t *testing.T) {
4646

4747
test := func(teamID int64) {
4848
team := unittest.AssertExistsAndLoadBean(t, &Team{ID: teamID}).(*Team)
49-
assert.NoError(t, team.GetRepositories(&SearchTeamOptions{}))
49+
assert.NoError(t, team.GetRepositories(&SearchOrgTeamOptions{}))
5050
assert.Len(t, team.Repos, team.NumRepos)
5151
for _, repo := range team.Repos {
5252
unittest.AssertExistsAndLoadBean(t, &TeamRepo{TeamID: teamID, RepoID: repo.ID})
@@ -292,7 +292,7 @@ func TestGetTeamMembers(t *testing.T) {
292292
func TestGetUserTeams(t *testing.T) {
293293
assert.NoError(t, unittest.PrepareTestDatabase())
294294
test := func(userID int64) {
295-
teams, _, err := SearchTeam(&SearchTeamOptions{UserID: userID})
295+
teams, _, err := GetUserTeams(&GetUserTeamOptions{UserID: userID})
296296
assert.NoError(t, err)
297297
for _, team := range teams {
298298
unittest.AssertExistsAndLoadBean(t, &TeamUser{TeamID: team.ID, UID: userID})

modules/repository/create_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ func TestIncludesAllRepositoriesTeams(t *testing.T) {
2323

2424
testTeamRepositories := func(teamID int64, repoIds []int64) {
2525
team := unittest.AssertExistsAndLoadBean(t, &models.Team{ID: teamID}).(*models.Team)
26-
assert.NoError(t, team.GetRepositories(&models.SearchTeamOptions{}), "%s: GetRepositories", team.Name)
26+
assert.NoError(t, team.GetRepositories(&models.SearchOrgTeamOptions{}), "%s: GetRepositories", team.Name)
2727
assert.Len(t, team.Repos, team.NumRepos, "%s: len repo", team.Name)
2828
assert.Len(t, team.Repos, len(repoIds), "%s: repo count", team.Name)
2929
for i, rid := range repoIds {

routers/api/v1/org/team.go

+5-6
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ func ListTeams(ctx *context.APIContext) {
4747
// "200":
4848
// "$ref": "#/responses/TeamList"
4949

50-
teams, count, err := models.SearchTeam(&models.SearchTeamOptions{
50+
teams, count, err := models.SearchOrgTeams(&models.SearchOrgTeamOptions{
5151
ListOptions: utils.GetListOptions(ctx),
5252
OrgID: ctx.Org.Organization.ID,
5353
})
@@ -90,7 +90,7 @@ func ListUserTeams(ctx *context.APIContext) {
9090
// "200":
9191
// "$ref": "#/responses/TeamList"
9292

93-
teams, count, err := models.SearchTeam(&models.SearchTeamOptions{
93+
teams, count, err := models.GetUserTeams(&models.GetUserTeamOptions{
9494
ListOptions: utils.GetListOptions(ctx),
9595
UserID: ctx.User.ID,
9696
})
@@ -533,7 +533,7 @@ func GetTeamRepos(ctx *context.APIContext) {
533533
// "$ref": "#/responses/RepositoryList"
534534

535535
team := ctx.Org.Team
536-
if err := team.GetRepositories(&models.SearchTeamOptions{
536+
if err := team.GetRepositories(&models.SearchOrgTeamOptions{
537537
ListOptions: utils.GetListOptions(ctx),
538538
}); err != nil {
539539
ctx.Error(http.StatusInternalServerError, "GetTeamRepos", err)
@@ -707,15 +707,14 @@ func SearchTeam(ctx *context.APIContext) {
707707

708708
listOptions := utils.GetListOptions(ctx)
709709

710-
opts := &models.SearchTeamOptions{
711-
UserID: ctx.User.ID,
710+
opts := &models.SearchOrgTeamOptions{
712711
Keyword: ctx.FormTrim("q"),
713712
OrgID: ctx.Org.Organization.ID,
714713
IncludeDesc: ctx.FormString("include_desc") == "" || ctx.FormBool("include_desc"),
715714
ListOptions: listOptions,
716715
}
717716

718-
teams, maxResults, err := models.SearchTeam(opts)
717+
teams, maxResults, err := models.SearchOrgTeams(opts)
719718
if err != nil {
720719
log.Error("SearchTeam failed: %v", err)
721720
ctx.JSON(http.StatusInternalServerError, map[string]interface{}{

routers/web/org/teams.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -319,7 +319,7 @@ func TeamRepositories(ctx *context.Context) {
319319
ctx.Data["Title"] = ctx.Org.Team.Name
320320
ctx.Data["PageIsOrgTeams"] = true
321321
ctx.Data["PageIsOrgTeamRepos"] = true
322-
if err := ctx.Org.Team.GetRepositories(&models.SearchTeamOptions{}); err != nil {
322+
if err := ctx.Org.Team.GetRepositories(&models.SearchOrgTeamOptions{}); err != nil {
323323
ctx.ServerError("GetRepositories", err)
324324
return
325325
}

0 commit comments

Comments
 (0)