Skip to content

Commit d6166c8

Browse files
feat: Neil/kernel 1017 profile pagination query parameter
1 parent 0bf19a1 commit d6166c8

4 files changed

Lines changed: 49 additions & 9 deletions

File tree

.stats.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
configured_endpoints: 101
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel%2Fkernel-ea5c9cb25c29fa5a8758bbf8732eb306783bb6f13b4df29bf1ad5ad3cb32da1e.yml
3-
openapi_spec_hash: 597031840469b011f5cf22a4d8b9d750
4-
config_hash: 147340811dd6fbb9c2d80515a7e31f9a
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel%2Fkernel-fc4a441d80d9a26574ef8af390a0c76265f5d4190daf90a04b6b353b128bbd97.yml
3+
openapi_spec_hash: 192987649d3797c3a80e6ef201667b64
4+
config_hash: 8af430e19f4af86c05f2987241cae72f

api.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ Methods:
204204

205205
- <code title="post /profiles">client.Profiles.<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk#ProfileService.New">New</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, body <a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk">kernel</a>.<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk#ProfileNewParams">ProfileNewParams</a>) (\*<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk">kernel</a>.<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk#Profile">Profile</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code>
206206
- <code title="get /profiles/{id_or_name}">client.Profiles.<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk#ProfileService.Get">Get</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, idOrName <a href="https://pkg.go.dev/builtin#string">string</a>) (\*<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk">kernel</a>.<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk#Profile">Profile</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code>
207-
- <code title="get /profiles">client.Profiles.<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk#ProfileService.List">List</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>) (\*[]<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk">kernel</a>.<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk#Profile">Profile</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code>
207+
- <code title="get /profiles">client.Profiles.<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk#ProfileService.List">List</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, query <a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk">kernel</a>.<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk#ProfileListParams">ProfileListParams</a>) (\*<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk/packages/pagination">pagination</a>.<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk/packages/pagination#OffsetPagination">OffsetPagination</a>[<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk">kernel</a>.<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk#Profile">Profile</a>], <a href="https://pkg.go.dev/builtin#error">error</a>)</code>
208208
- <code title="delete /profiles/{id_or_name}">client.Profiles.<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk#ProfileService.Delete">Delete</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, idOrName <a href="https://pkg.go.dev/builtin#string">string</a>) <a href="https://pkg.go.dev/builtin#error">error</a></code>
209209
- <code title="get /profiles/{id_or_name}/download">client.Profiles.<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk#ProfileService.Download">Download</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, idOrName <a href="https://pkg.go.dev/builtin#string">string</a>) (\*http.Response, <a href="https://pkg.go.dev/builtin#error">error</a>)</code>
210210

profile.go

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,14 @@ import (
77
"errors"
88
"fmt"
99
"net/http"
10+
"net/url"
1011
"slices"
1112

1213
"github.com/kernel/kernel-go-sdk/internal/apijson"
14+
"github.com/kernel/kernel-go-sdk/internal/apiquery"
1315
"github.com/kernel/kernel-go-sdk/internal/requestconfig"
1416
"github.com/kernel/kernel-go-sdk/option"
17+
"github.com/kernel/kernel-go-sdk/packages/pagination"
1518
"github.com/kernel/kernel-go-sdk/packages/param"
1619
)
1720

@@ -56,11 +59,26 @@ func (r *ProfileService) Get(ctx context.Context, idOrName string, opts ...optio
5659
}
5760

5861
// List profiles with optional filtering and pagination.
59-
func (r *ProfileService) List(ctx context.Context, opts ...option.RequestOption) (res *[]Profile, err error) {
62+
func (r *ProfileService) List(ctx context.Context, query ProfileListParams, opts ...option.RequestOption) (res *pagination.OffsetPagination[Profile], err error) {
63+
var raw *http.Response
6064
opts = slices.Concat(r.Options, opts)
65+
opts = append([]option.RequestOption{option.WithResponseInto(&raw)}, opts...)
6166
path := "profiles"
62-
err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, nil, &res, opts...)
63-
return
67+
cfg, err := requestconfig.NewRequestConfig(ctx, http.MethodGet, path, query, &res, opts...)
68+
if err != nil {
69+
return nil, err
70+
}
71+
err = cfg.Execute()
72+
if err != nil {
73+
return nil, err
74+
}
75+
res.SetPageConfig(cfg, raw)
76+
return res, nil
77+
}
78+
79+
// List profiles with optional filtering and pagination.
80+
func (r *ProfileService) ListAutoPaging(ctx context.Context, query ProfileListParams, opts ...option.RequestOption) *pagination.OffsetPaginationAutoPager[Profile] {
81+
return pagination.NewOffsetPaginationAutoPager(r.List(ctx, query, opts...))
6482
}
6583

6684
// Delete a profile by its ID or by its name.
@@ -103,3 +121,21 @@ func (r ProfileNewParams) MarshalJSON() (data []byte, err error) {
103121
func (r *ProfileNewParams) UnmarshalJSON(data []byte) error {
104122
return apijson.UnmarshalRoot(data, r)
105123
}
124+
125+
type ProfileListParams struct {
126+
// Limit the number of profiles to return.
127+
Limit param.Opt[int64] `query:"limit,omitzero" json:"-"`
128+
// Offset the number of profiles to return.
129+
Offset param.Opt[int64] `query:"offset,omitzero" json:"-"`
130+
// Search profiles by name or ID.
131+
Query param.Opt[string] `query:"query,omitzero" json:"-"`
132+
paramObj
133+
}
134+
135+
// URLQuery serializes [ProfileListParams]'s query parameters as `url.Values`.
136+
func (r ProfileListParams) URLQuery() (v url.Values, err error) {
137+
return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{
138+
ArrayFormat: apiquery.ArrayQueryFormatComma,
139+
NestedFormat: apiquery.NestedQueryFormatBrackets,
140+
})
141+
}

profile_test.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ func TestProfileGet(t *testing.T) {
6565
}
6666
}
6767

68-
func TestProfileList(t *testing.T) {
68+
func TestProfileListWithOptionalParams(t *testing.T) {
6969
t.Skip("Mock server tests are disabled")
7070
baseURL := "http://localhost:4010"
7171
if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok {
@@ -78,7 +78,11 @@ func TestProfileList(t *testing.T) {
7878
option.WithBaseURL(baseURL),
7979
option.WithAPIKey("My API Key"),
8080
)
81-
_, err := client.Profiles.List(context.TODO())
81+
_, err := client.Profiles.List(context.TODO(), kernel.ProfileListParams{
82+
Limit: kernel.Int(1),
83+
Offset: kernel.Int(0),
84+
Query: kernel.String("query"),
85+
})
8286
if err != nil {
8387
var apierr *kernel.Error
8488
if errors.As(err, &apierr) {

0 commit comments

Comments
 (0)