Skip to content

Commit 9a02b31

Browse files
committed
ref: list organization members
1 parent bc142b1 commit 9a02b31

6 files changed

+270
-96
lines changed

internal/apiclient/api.yaml

+41-2
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,28 @@ paths:
3434
description: Forbidden
3535
"404":
3636
description: Not Found
37+
/0/organizations/{organization_id_or_slug}/members/:
38+
parameters:
39+
- $ref: "#/components/parameters/organization_id_or_slug"
40+
- $ref: "#/components/parameters/cursor"
41+
get:
42+
summary: List Organization Members
43+
operationId: listOrganizationMembers
44+
responses:
45+
"200":
46+
description: OK
47+
content:
48+
application/json:
49+
schema:
50+
type: array
51+
items:
52+
$ref: "#/components/schemas/OrganizationMember"
53+
"401":
54+
description: Unauthorized
55+
"403":
56+
description: Forbidden
57+
"404":
58+
description: Not Found
3759
/0/organizations/{organization_id_or_slug}/projects/:
3860
parameters:
3961
- $ref: "#/components/parameters/organization_id_or_slug"
@@ -243,8 +265,8 @@ paths:
243265
description: Forbidden
244266
"404":
245267
description: Not Found
246-
/0/projects/{organization_id_or_slug}/{project_id_or_slug}/teams/{team_id_or_slug}/:
247-
parameters:
268+
? /0/projects/{organization_id_or_slug}/{project_id_or_slug}/teams/{team_id_or_slug}/
269+
: parameters:
248270
- $ref: "#/components/parameters/organization_id_or_slug"
249271
- $ref: "#/components/parameters/project_id_or_slug"
250272
- $ref: "#/components/parameters/team_id_or_slug"
@@ -621,6 +643,7 @@ paths:
621643
description: Forbidden
622644
"404":
623645
description: Not Found
646+
624647
security:
625648
- bearerAuth: []
626649
components:
@@ -667,6 +690,22 @@ components:
667690
type: string
668691
slug:
669692
type: string
693+
OrganizationMember:
694+
type: object
695+
required:
696+
- id
697+
- email
698+
- name
699+
- orgRole
700+
properties:
701+
id:
702+
type: string
703+
email:
704+
type: string
705+
name:
706+
type: string
707+
orgRole:
708+
type: string
670709
Project:
671710
type: object
672711
required:

internal/apiclient/apiclient.gen.go

+144
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/provider/data_source_all_client_keys.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -177,8 +177,7 @@ func (d *AllClientKeysDataSource) Read(ctx context.Context, req datasource.ReadR
177177
if err != nil {
178178
resp.Diagnostics.Append(diagutils.NewClientError("read", err))
179179
return
180-
}
181-
if httpResp.StatusCode() != http.StatusOK {
180+
} else if httpResp.StatusCode() != http.StatusOK || httpResp.JSON200 == nil {
182181
resp.Diagnostics.Append(diagutils.NewClientStatusError("read", httpResp.StatusCode(), httpResp.Body))
183182
return
184183
}

internal/provider/data_source_all_organization_members.go

+22-25
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,15 @@ package provider
22

33
import (
44
"context"
5+
"net/http"
56

67
"github.com/hashicorp/terraform-plugin-framework/datasource"
78
"github.com/hashicorp/terraform-plugin-framework/datasource/schema"
9+
"github.com/hashicorp/terraform-plugin-framework/diag"
810
"github.com/hashicorp/terraform-plugin-framework/types"
9-
"github.com/jianyuan/go-sentry/v2/sentry"
11+
"github.com/jianyuan/terraform-provider-sentry/internal/apiclient"
1012
"github.com/jianyuan/terraform-provider-sentry/internal/diagutils"
13+
"github.com/jianyuan/terraform-provider-sentry/internal/sentryclient"
1114
)
1215

1316
type AllOrganizationMembersDataSourceMemberModel struct {
@@ -16,11 +19,10 @@ type AllOrganizationMembersDataSourceMemberModel struct {
1619
Role types.String `tfsdk:"role"`
1720
}
1821

19-
func (m *AllOrganizationMembersDataSourceMemberModel) Fill(organization string, member sentry.OrganizationMember) error {
20-
m.Id = types.StringValue(member.ID)
22+
func (m *AllOrganizationMembersDataSourceMemberModel) Fill(ctx context.Context, member apiclient.OrganizationMember) (diags diag.Diagnostics) {
23+
m.Id = types.StringValue(member.Id)
2124
m.Email = types.StringValue(member.Email)
2225
m.Role = types.StringValue(member.OrgRole)
23-
2426
return nil
2527
}
2628

@@ -29,18 +31,12 @@ type AllOrganizationMembersDataSourceModel struct {
2931
Members []AllOrganizationMembersDataSourceMemberModel `tfsdk:"members"`
3032
}
3133

32-
func (m *AllOrganizationMembersDataSourceModel) Fill(organization string, members []sentry.OrganizationMember) error {
33-
m.Organization = types.StringValue(organization)
34-
35-
for _, member := range members {
36-
mm := AllOrganizationMembersDataSourceMemberModel{}
37-
if err := mm.Fill(organization, member); err != nil {
38-
return err
39-
}
40-
m.Members = append(m.Members, mm)
34+
func (m *AllOrganizationMembersDataSourceModel) Fill(ctx context.Context, members []apiclient.OrganizationMember) (diags diag.Diagnostics) {
35+
m.Members = make([]AllOrganizationMembersDataSourceMemberModel, len(members))
36+
for i, member := range members {
37+
diags.Append(m.Members[i].Fill(ctx, member)...)
4138
}
42-
43-
return nil
39+
return
4440
}
4541

4642
var _ datasource.DataSource = &AllOrganizationMembersDataSource{}
@@ -96,28 +92,29 @@ func (d *AllOrganizationMembersDataSource) Read(ctx context.Context, req datasou
9692
return
9793
}
9894

99-
var allMembers []sentry.OrganizationMember
100-
params := &sentry.ListCursorParams{}
95+
var allMembers []apiclient.OrganizationMember
96+
params := &apiclient.ListOrganizationMembersParams{}
10197

10298
for {
103-
members, apiResp, err := d.client.OrganizationMembers.List(ctx, data.Organization.ValueString(), params)
99+
httpResp, err := d.apiClient.ListOrganizationMembersWithResponse(ctx, data.Organization.ValueString(), params)
104100
if err != nil {
105101
resp.Diagnostics.Append(diagutils.NewClientError("read", err))
106102
return
103+
} else if httpResp.StatusCode() != http.StatusOK || httpResp.JSON200 == nil {
104+
resp.Diagnostics.Append(diagutils.NewClientStatusError("read", httpResp.StatusCode(), httpResp.Body))
105+
return
107106
}
108107

109-
for _, member := range members {
110-
allMembers = append(allMembers, *member)
111-
}
108+
allMembers = append(allMembers, *httpResp.JSON200...)
112109

113-
if apiResp.Cursor == "" {
110+
params.Cursor = sentryclient.ParseNextPaginationCursor(httpResp.HTTPResponse)
111+
if params.Cursor == nil {
114112
break
115113
}
116-
params.Cursor = apiResp.Cursor
117114
}
118115

119-
if err := data.Fill(data.Organization.ValueString(), allMembers); err != nil {
120-
resp.Diagnostics.Append(diagutils.NewFillError(err))
116+
resp.Diagnostics.Append(data.Fill(ctx, allMembers)...)
117+
if resp.Diagnostics.HasError() {
121118
return
122119
}
123120

0 commit comments

Comments
 (0)