Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit5583b78

Browse files
committed
refactor: update query to return org IDs fby user IDs
1 parenta39ba22 commit5583b78

File tree

5 files changed

+122
-33
lines changed

5 files changed

+122
-33
lines changed

‎coderd/database/databasefake/databasefake.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -709,6 +709,26 @@ func (q *fakeQuerier) GetOrganizationMemberByUserID(_ context.Context, arg datab
709709
return database.OrganizationMember{},sql.ErrNoRows
710710
}
711711

712+
func (q*fakeQuerier)GetOrganizationIDsByMemberIDs(c context.Context,ids []uuid.UUID) ([]database.GetOrganizationIDsByMemberIDsRow,error) {
713+
q.mutex.RLock()
714+
deferq.mutex.RUnlock()
715+
716+
getOrganizationIDsByMemberIDRows:=make([]database.GetOrganizationIDsByMemberIDsRow,0,len(ids))
717+
for_,userID:=rangeids {
718+
userOrganizationIDs:=make([]uuid.UUID,0)
719+
for_,membership:=rangeq.organizationMembers {
720+
ifmembership.UserID==userID {
721+
userOrganizationIDs=append(userOrganizationIDs,membership.OrganizationID)
722+
}
723+
}
724+
getOrganizationIDsByMemberIDRows=append(getOrganizationIDsByMemberIDRows, database.GetOrganizationIDsByMemberIDsRow{
725+
UserID:userID,
726+
OrganizationIDs:userOrganizationIDs,
727+
})
728+
}
729+
returngetOrganizationIDsByMemberIDRows,sql.ErrNoRows
730+
}
731+
712732
func (q*fakeQuerier)GetProvisionerDaemons(_ context.Context) ([]database.ProvisionerDaemon,error) {
713733
q.mutex.RLock()
714734
deferq.mutex.RUnlock()

‎coderd/database/querier.go

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

‎coderd/database/queries.sql.go

Lines changed: 39 additions & 0 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

‎coderd/database/queries/organizationmembers.sql

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,13 @@ INSERT INTO
2020
)
2121
VALUES
2222
($1, $2, $3, $4, $5) RETURNING*;
23+
24+
-- name: GetOrganizationIDsByMemberIDs :many
25+
SELECT
26+
user_id, array_agg(organization_id) :: uuid [ ]AS"organization_IDs"
27+
FROM
28+
organization_members
29+
WHERE
30+
user_id= ANY(@ids :: uuid [ ])
31+
GROUP BY
32+
user_id;

‎coderd/users.go

Lines changed: 52 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -137,22 +137,31 @@ func (api *api) users(rw http.ResponseWriter, r *http.Request) {
137137
LimitOpt:int32(pageLimit),
138138
Search:searchName,
139139
})
140-
141140
iferr!=nil {
142141
httpapi.Write(rw,http.StatusInternalServerError, httpapi.Response{
143142
Message:err.Error(),
144143
})
145144
return
146145
}
147146

148-
organizationsByUserId:=map[string][]database.Organization{}
147+
userIDs:=make([]uuid.UUID,0,len(users))
149148
for_,user:=rangeusers {
150-
userOrganizations:=userOrganizations(api,rw,r,user)
151-
organizationsByUserId[user.ID.String()]=userOrganizations
149+
userIDs=append(userIDs,user.ID)
150+
}
151+
organizationIDsByMemberIDsRows,err:=api.Database.GetOrganizationIDsByMemberIDs(r.Context(),userIDs)
152+
iferr!=nil {
153+
httpapi.Write(rw,http.StatusInternalServerError, httpapi.Response{
154+
Message:err.Error(),
155+
})
156+
return
157+
}
158+
organizationIDsByUserID:=map[uuid.UUID][]uuid.UUID{}
159+
for_,organizationIDsByMemberIDsRow:=rangeorganizationIDsByMemberIDsRows {
160+
organizationIDsByUserID[organizationIDsByMemberIDsRow.UserID]=organizationIDsByMemberIDsRow.OrganizationIDs
152161
}
153162

154163
render.Status(r,http.StatusOK)
155-
render.JSON(rw,r,convertUsers(users,organizationsByUserId))
164+
render.JSON(rw,r,convertUsers(users,organizationIDsByUserID))
156165
}
157166

158167
// Creates a new user.
@@ -219,17 +228,23 @@ func (api *api) postUser(rw http.ResponseWriter, r *http.Request) {
219228
return
220229
}
221230

222-
organizations:=userOrganizations(api,rw,r,user)
223-
224-
httpapi.Write(rw,http.StatusCreated,convertUser(user,organizations))
231+
httpapi.Write(rw,http.StatusCreated,convertUser(user, []uuid.UUID{createUser.OrganizationID}))
225232
}
226233

227234
// Returns the parameterized user requested. All validation
228235
// is completed in the middleware for this route.
229236
func (api*api)userByName(rw http.ResponseWriter,r*http.Request) {
230237
user:=httpmw.UserParam(r)
231-
organizations:=userOrganizations(api,rw,r,user)
232-
httpapi.Write(rw,http.StatusOK,convertUser(user,organizations))
238+
organizationIDs,err:=userOrganizationIDs(api,rw,r,user)
239+
240+
iferr!=nil {
241+
httpapi.Write(rw,http.StatusInternalServerError, httpapi.Response{
242+
Message:fmt.Sprintf("get organization IDs: %s",err.Error()),
243+
})
244+
return
245+
}
246+
247+
httpapi.Write(rw,http.StatusOK,convertUser(user,organizationIDs))
233248
}
234249

235250
func (api*api)putUserProfile(rw http.ResponseWriter,r*http.Request) {
@@ -286,9 +301,15 @@ func (api *api) putUserProfile(rw http.ResponseWriter, r *http.Request) {
286301
return
287302
}
288303

289-
organizations:=userOrganizations(api,rw,r,user)
304+
organizationIDs,err:=userOrganizationIDs(api,rw,r,user)
305+
iferr!=nil {
306+
httpapi.Write(rw,http.StatusInternalServerError, httpapi.Response{
307+
Message:fmt.Sprintf("get organization IDs: %s",err.Error()),
308+
})
309+
return
310+
}
290311

291-
httpapi.Write(rw,http.StatusOK,convertUser(updatedUserProfile,organizations))
312+
httpapi.Write(rw,http.StatusOK,convertUser(updatedUserProfile,organizationIDs))
292313
}
293314

294315
func (api*api)putUserSuspend(rw http.ResponseWriter,r*http.Request) {
@@ -307,7 +328,13 @@ func (api *api) putUserSuspend(rw http.ResponseWriter, r *http.Request) {
307328
return
308329
}
309330

310-
organizations:=userOrganizations(api,rw,r,user)
331+
organizations,err:=userOrganizationIDs(api,rw,r,user)
332+
iferr!=nil {
333+
httpapi.Write(rw,http.StatusInternalServerError, httpapi.Response{
334+
Message:fmt.Sprintf("get organization IDs: %s",err.Error()),
335+
})
336+
return
337+
}
311338

312339
httpapi.Write(rw,http.StatusOK,convertUser(suspendedUser,organizations))
313340
}
@@ -638,42 +665,34 @@ func (api *api) createUser(ctx context.Context, req codersdk.CreateUserRequest)
638665
})
639666
}
640667

641-
funcconvertUser(user database.User,organizations []database.Organization) codersdk.User {
642-
orgIds:=make([]uuid.UUID,0,len(organizations))
643-
for_,o:=rangeorganizations {
644-
orgIds=append(orgIds,o.ID)
645-
}
646-
668+
funcconvertUser(user database.User,organizationIDs []uuid.UUID) codersdk.User {
647669
return codersdk.User{
648670
ID:user.ID,
649671
Email:user.Email,
650672
CreatedAt:user.CreatedAt,
651673
Username:user.Username,
652674
Status:codersdk.UserStatus(user.Status),
653-
OrganizationIDs:orgIds,
675+
OrganizationIDs:organizationIDs,
654676
}
655677
}
656678

657-
funcconvertUsers(users []database.User,organizationsByUserIdmap[string][]database.Organization) []codersdk.User {
679+
funcconvertUsers(users []database.User,organizationIDsByUserIDmap[uuid.UUID][]uuid.UUID) []codersdk.User {
658680
converted:=make([]codersdk.User,0,len(users))
659681
for_,u:=rangeusers {
660-
userOrganizations:=organizationsByUserId[u.ID.String()]
661-
converted=append(converted,convertUser(u,userOrganizations))
682+
userOrganizationIDs:=organizationIDsByUserID[u.ID]
683+
converted=append(converted,convertUser(u,userOrganizationIDs))
662684
}
663685
returnconverted
664686
}
665687

666-
funcuserOrganizations(api*api,rw http.ResponseWriter,r*http.Request,user database.User) []database.Organization {
667-
organizations,err:=api.Database.GetOrganizationsByUserID(r.Context(),user.ID)
668-
iferrors.Is(err,sql.ErrNoRows) {
669-
err=nil
670-
organizations= []database.Organization{}
688+
funcuserOrganizationIDs(api*api,rw http.ResponseWriter,r*http.Request,user database.User) ([]uuid.UUID,error) {
689+
organizationIDsByMemberIDsRows,err:=api.Database.GetOrganizationIDsByMemberIDs(r.Context(), []uuid.UUID{user.ID})
690+
iferrors.Is(err,sql.ErrNoRows)||len(organizationIDsByMemberIDsRows)==0 {
691+
return []uuid.UUID{},nil
671692
}
672693
iferr!=nil {
673-
httpapi.Write(rw,http.StatusInternalServerError, httpapi.Response{
674-
Message:fmt.Sprintf("get organizations: %s",err.Error()),
675-
})
676-
return []database.Organization{}
694+
return []uuid.UUID{},err
677695
}
678-
returnorganizations
696+
member:=organizationIDsByMemberIDsRows[0]
697+
returnmember.OrganizationIDs,nil
679698
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp