@Summary Get group members by group ID @ID get-group-members-by-group-id @Security CoderSessionToken @Produce json @Tags Enterprise @Param group path string true "Group id" @Param q query string false "Member search query" @Param after_id query string false "After ID" format(uuid) @Param limit query
(rw http.ResponseWriter, r *http.Request)
| 470 | // @Success 200 {object} codersdk.GroupMembersResponse |
| 471 | // @Router /api/v2/groups/{group}/members [get] |
| 472 | func (api *API) groupMembers(rw http.ResponseWriter, r *http.Request) { |
| 473 | var ( |
| 474 | ctx = r.Context() |
| 475 | group = httpmw.GroupParam(r) |
| 476 | ) |
| 477 | |
| 478 | filterQuery := r.URL.Query().Get("q") |
| 479 | userFilterParams, filterErrs := searchquery.Users(filterQuery) |
| 480 | if len(filterErrs) > 0 { |
| 481 | httpapi.Write(ctx, rw, http.StatusBadRequest, codersdk.Response{ |
| 482 | Message: "Invalid member search query.", |
| 483 | Validations: filterErrs, |
| 484 | }) |
| 485 | return |
| 486 | } |
| 487 | |
| 488 | paginationParams, ok := agpl.ParsePagination(rw, r) |
| 489 | if !ok { |
| 490 | return |
| 491 | } |
| 492 | |
| 493 | members, err := api.Database.GetGroupMembersByGroupIDPaginated(ctx, database.GetGroupMembersByGroupIDPaginatedParams{ |
| 494 | AfterID: paginationParams.AfterID, |
| 495 | GroupID: group.ID, |
| 496 | IncludeSystem: false, |
| 497 | Search: userFilterParams.Search, |
| 498 | Name: userFilterParams.Name, |
| 499 | Status: userFilterParams.Status, |
| 500 | IsServiceAccount: userFilterParams.IsServiceAccount, |
| 501 | RbacRole: userFilterParams.RbacRole, |
| 502 | LastSeenBefore: userFilterParams.LastSeenBefore, |
| 503 | LastSeenAfter: userFilterParams.LastSeenAfter, |
| 504 | CreatedAfter: userFilterParams.CreatedAfter, |
| 505 | CreatedBefore: userFilterParams.CreatedBefore, |
| 506 | GithubComUserID: userFilterParams.GithubComUserID, |
| 507 | LoginType: userFilterParams.LoginType, |
| 508 | // #nosec G115 - Pagination offsets are small and fit in int32 |
| 509 | OffsetOpt: int32(paginationParams.Offset), |
| 510 | // #nosec G115 - Pagination limits are small and fit in int32 |
| 511 | LimitOpt: int32(paginationParams.Limit), |
| 512 | }) |
| 513 | if err != nil && !errors.Is(err, sql.ErrNoRows) { |
| 514 | httpapi.InternalServerError(rw, err) |
| 515 | return |
| 516 | } |
| 517 | |
| 518 | if len(members) == 0 { |
| 519 | httpapi.Write(ctx, rw, http.StatusOK, codersdk.GroupMembersResponse{ |
| 520 | Users: nil, |
| 521 | Count: 0, |
| 522 | }) |
| 523 | return |
| 524 | } |
| 525 | |
| 526 | httpapi.Write(ctx, rw, http.StatusOK, codersdk.GroupMembersResponse{ |
| 527 | Users: db2sdk.ReducedUsersFromGroupMemberRows(members), |
| 528 | Count: int(members[0].Count), |
| 529 | }) |
no test coverage detected