Skip to content

Commit f49d823

Browse files
authored
Introduce OrgList and add LoadTeams, optimaze Load teams for orgs (#32543)
1 parent b6ce2d6 commit f49d823

File tree

4 files changed

+47
-5
lines changed

4 files changed

+47
-5
lines changed

models/organization/org_list.go

+25
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,31 @@ import (
1616
"xorm.io/builder"
1717
)
1818

19+
type OrgList []*Organization
20+
21+
func (orgs OrgList) LoadTeams(ctx context.Context) (map[int64]TeamList, error) {
22+
if len(orgs) == 0 {
23+
return map[int64]TeamList{}, nil
24+
}
25+
26+
orgIDs := make([]int64, len(orgs))
27+
for i, org := range orgs {
28+
orgIDs[i] = org.ID
29+
}
30+
31+
teams, err := GetTeamsByOrgIDs(ctx, orgIDs)
32+
if err != nil {
33+
return nil, err
34+
}
35+
36+
teamMap := make(map[int64]TeamList, len(orgs))
37+
for _, team := range teams {
38+
teamMap[team.OrgID] = append(teamMap[team.OrgID], team)
39+
}
40+
41+
return teamMap, nil
42+
}
43+
1944
// SearchOrganizationsOptions options to filter organizations
2045
type SearchOrganizationsOptions struct {
2146
db.ListOptions

models/organization/org_list_test.go

+11
Original file line numberDiff line numberDiff line change
@@ -60,3 +60,14 @@ func TestGetUserOrgsList(t *testing.T) {
6060
assert.EqualValues(t, 2, orgs[0].NumRepos)
6161
}
6262
}
63+
64+
func TestLoadOrgListTeams(t *testing.T) {
65+
assert.NoError(t, unittest.PrepareTestDatabase())
66+
orgs, err := organization.GetUserOrgsList(db.DefaultContext, &user_model.User{ID: 4})
67+
assert.NoError(t, err)
68+
assert.Len(t, orgs, 1)
69+
teamsMap, err := organization.OrgList(orgs).LoadTeams(db.DefaultContext)
70+
assert.NoError(t, err)
71+
assert.Len(t, teamsMap, 1)
72+
assert.Len(t, teamsMap[3], 5)
73+
}

models/organization/team_list.go

+5
Original file line numberDiff line numberDiff line change
@@ -126,3 +126,8 @@ func GetUserRepoTeams(ctx context.Context, orgID, userID, repoID int64) (teams T
126126
And("team_repo.repo_id=?", repoID).
127127
Find(&teams)
128128
}
129+
130+
func GetTeamsByOrgIDs(ctx context.Context, orgIDs []int64) (TeamList, error) {
131+
teams := make([]*Team, 0, 10)
132+
return teams, db.GetEngine(ctx).Where(builder.In("org_id", orgIDs)).Find(&teams)
133+
}

services/oauth2_provider/access_token.go

+6-5
Original file line numberDiff line numberDiff line change
@@ -241,14 +241,15 @@ func GetOAuthGroupsForUser(ctx context.Context, user *user_model.User, onlyPubli
241241
return nil, fmt.Errorf("GetUserOrgList: %w", err)
242242
}
243243

244+
orgTeams, err := org_model.OrgList(orgs).LoadTeams(ctx)
245+
if err != nil {
246+
return nil, fmt.Errorf("LoadTeams: %w", err)
247+
}
248+
244249
var groups []string
245250
for _, org := range orgs {
246251
groups = append(groups, org.Name)
247-
teams, err := org.LoadTeams(ctx)
248-
if err != nil {
249-
return nil, fmt.Errorf("LoadTeams: %w", err)
250-
}
251-
for _, team := range teams {
252+
for _, team := range orgTeams[org.ID] {
252253
if team.IsMember(ctx, user.ID) {
253254
groups = append(groups, org.Name+":"+team.LowerName)
254255
}

0 commit comments

Comments
 (0)