@@ -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
}
0 commit comments