@@ -137,22 +137,31 @@ func (api *api) users(rw http.ResponseWriter, r *http.Request) {
137
137
LimitOpt :int32 (pageLimit ),
138
138
Search :searchName ,
139
139
})
140
-
141
140
if err != nil {
142
141
httpapi .Write (rw ,http .StatusInternalServerError , httpapi.Response {
143
142
Message :err .Error (),
144
143
})
145
144
return
146
145
}
147
146
148
- organizationsByUserId := map [ string ][]database. Organization {}
147
+ userIDs := make ([]uuid. UUID , 0 , len ( users ))
149
148
for _ ,user := range users {
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
+ if err != 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 := range organizationIDsByMemberIDsRows {
160
+ organizationIDsByUserID [organizationIDsByMemberIDsRow .UserID ]= organizationIDsByMemberIDsRow .OrganizationIDs
152
161
}
153
162
154
163
render .Status (r ,http .StatusOK )
155
- render .JSON (rw ,r ,convertUsers (users ,organizationsByUserId ))
164
+ render .JSON (rw ,r ,convertUsers (users ,organizationIDsByUserID ))
156
165
}
157
166
158
167
// Creates a new user.
@@ -219,17 +228,23 @@ func (api *api) postUser(rw http.ResponseWriter, r *http.Request) {
219
228
return
220
229
}
221
230
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 }))
225
232
}
226
233
227
234
// Returns the parameterized user requested. All validation
228
235
// is completed in the middleware for this route.
229
236
func (api * api )userByName (rw http.ResponseWriter ,r * http.Request ) {
230
237
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
+ if err != 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 ))
233
248
}
234
249
235
250
func (api * api )putUserProfile (rw http.ResponseWriter ,r * http.Request ) {
@@ -286,9 +301,15 @@ func (api *api) putUserProfile(rw http.ResponseWriter, r *http.Request) {
286
301
return
287
302
}
288
303
289
- organizations := userOrganizations (api ,rw ,r ,user )
304
+ organizationIDs ,err := userOrganizationIDs (api ,rw ,r ,user )
305
+ if err != nil {
306
+ httpapi .Write (rw ,http .StatusInternalServerError , httpapi.Response {
307
+ Message :fmt .Sprintf ("get organization IDs: %s" ,err .Error ()),
308
+ })
309
+ return
310
+ }
290
311
291
- httpapi .Write (rw ,http .StatusOK ,convertUser (updatedUserProfile ,organizations ))
312
+ httpapi .Write (rw ,http .StatusOK ,convertUser (updatedUserProfile ,organizationIDs ))
292
313
}
293
314
294
315
func (api * api )putUserSuspend (rw http.ResponseWriter ,r * http.Request ) {
@@ -307,7 +328,13 @@ func (api *api) putUserSuspend(rw http.ResponseWriter, r *http.Request) {
307
328
return
308
329
}
309
330
310
- organizations := userOrganizations (api ,rw ,r ,user )
331
+ organizations ,err := userOrganizationIDs (api ,rw ,r ,user )
332
+ if err != nil {
333
+ httpapi .Write (rw ,http .StatusInternalServerError , httpapi.Response {
334
+ Message :fmt .Sprintf ("get organization IDs: %s" ,err .Error ()),
335
+ })
336
+ return
337
+ }
311
338
312
339
httpapi .Write (rw ,http .StatusOK ,convertUser (suspendedUser ,organizations ))
313
340
}
@@ -638,42 +665,34 @@ func (api *api) createUser(ctx context.Context, req codersdk.CreateUserRequest)
638
665
})
639
666
}
640
667
641
- func convertUser (user database.User ,organizations []database.Organization ) codersdk.User {
642
- orgIds := make ([]uuid.UUID ,0 ,len (organizations ))
643
- for _ ,o := range organizations {
644
- orgIds = append (orgIds ,o .ID )
645
- }
646
-
668
+ func convertUser (user database.User ,organizationIDs []uuid.UUID ) codersdk.User {
647
669
return codersdk.User {
648
670
ID :user .ID ,
649
671
Email :user .Email ,
650
672
CreatedAt :user .CreatedAt ,
651
673
Username :user .Username ,
652
674
Status :codersdk .UserStatus (user .Status ),
653
- OrganizationIDs :orgIds ,
675
+ OrganizationIDs :organizationIDs ,
654
676
}
655
677
}
656
678
657
- func convertUsers (users []database.User ,organizationsByUserId map [string ][]database. Organization ) []codersdk.User {
679
+ func convertUsers (users []database.User ,organizationIDsByUserID map [uuid. UUID ][]uuid. UUID ) []codersdk.User {
658
680
converted := make ([]codersdk.User ,0 ,len (users ))
659
681
for _ ,u := range users {
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 ))
662
684
}
663
685
return converted
664
686
}
665
687
666
- func userOrganizations (api * api ,rw http.ResponseWriter ,r * http.Request ,user database.User ) []database.Organization {
667
- organizations ,err := api .Database .GetOrganizationsByUserID (r .Context (),user .ID )
668
- if errors .Is (err ,sql .ErrNoRows ) {
669
- err = nil
670
- organizations = []database.Organization {}
688
+ func userOrganizationIDs (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
+ if errors .Is (err ,sql .ErrNoRows )|| len (organizationIDsByMemberIDsRows )== 0 {
691
+ return []uuid.UUID {},nil
671
692
}
672
693
if err != 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
677
695
}
678
- return organizations
696
+ member := organizationIDsByMemberIDsRows [0 ]
697
+ return member .OrganizationIDs ,nil
679
698
}