Skip to content

Commit 0c4dcf2

Browse files
Migrated account_users to firewall_devices to request helpers
1 parent 0b5959c commit 0c4dcf2

31 files changed

+23794
-11438
lines changed

account_users.go

+12-53
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,8 @@ package linodego
33
import (
44
"context"
55
"encoding/json"
6-
"fmt"
7-
"net/url"
86
"time"
97

10-
"github.com/go-resty/resty/v2"
118
"github.com/linode/linodego/internal/parseabletime"
129
)
1310

@@ -82,91 +79,53 @@ func (i User) GetUpdateOptions() (o UserUpdateOptions) {
8279
return
8380
}
8481

85-
// UsersPagedResponse represents a paginated User API response
86-
type UsersPagedResponse struct {
87-
*PageOptions
88-
Data []User `json:"data"`
89-
}
90-
91-
// endpoint gets the endpoint URL for User
92-
func (UsersPagedResponse) endpoint(_ ...any) string {
93-
return "account/users"
94-
}
95-
96-
func (resp *UsersPagedResponse) castResult(r *resty.Request, e string) (int, int, error) {
97-
res, err := coupleAPIErrors(r.SetResult(UsersPagedResponse{}).Get(e))
98-
if err != nil {
99-
return 0, 0, err
100-
}
101-
castedRes := res.Result().(*UsersPagedResponse)
102-
resp.Data = append(resp.Data, castedRes.Data...)
103-
return castedRes.Pages, castedRes.Results, nil
104-
}
105-
10682
// ListUsers lists Users on the account
10783
func (c *Client) ListUsers(ctx context.Context, opts *ListOptions) ([]User, error) {
108-
response := UsersPagedResponse{}
109-
err := c.listHelper(ctx, &response, opts)
84+
response, err := getPaginatedResults[User](ctx, c, "account/users", opts)
11085
if err != nil {
11186
return nil, err
11287
}
11388

114-
return response.Data, nil
89+
return response, nil
11590
}
11691

11792
// GetUser gets the user with the provided ID
11893
func (c *Client) GetUser(ctx context.Context, userID string) (*User, error) {
119-
userID = url.PathEscape(userID)
120-
e := fmt.Sprintf("account/users/%s", userID)
121-
req := c.R(ctx).SetResult(&User{})
122-
r, err := coupleAPIErrors(req.Get(e))
94+
e := formatAPIPath("account/users/%s", userID)
95+
response, err := doGETRequest[User](ctx, c, e)
12396
if err != nil {
12497
return nil, err
12598
}
12699

127-
return r.Result().(*User), nil
100+
return response, nil
128101
}
129102

130103
// CreateUser creates a User. The email address must be confirmed before the
131104
// User account can be accessed.
132105
func (c *Client) CreateUser(ctx context.Context, opts UserCreateOptions) (*User, error) {
133-
body, err := json.Marshal(opts)
134-
if err != nil {
135-
return nil, err
136-
}
137-
138106
e := "account/users"
139-
req := c.R(ctx).SetResult(&User{}).SetBody(string(body))
140-
r, err := coupleAPIErrors(req.Post(e))
107+
response, err := doPOSTRequest[User](ctx, c, e, opts)
141108
if err != nil {
142109
return nil, err
143110
}
144111

145-
return r.Result().(*User), nil
112+
return response, nil
146113
}
147114

148115
// UpdateUser updates the User with the specified id
149116
func (c *Client) UpdateUser(ctx context.Context, userID string, opts UserUpdateOptions) (*User, error) {
150-
body, err := json.Marshal(opts)
151-
if err != nil {
152-
return nil, err
153-
}
154-
155-
userID = url.PathEscape(userID)
156-
e := fmt.Sprintf("account/users/%s", userID)
157-
req := c.R(ctx).SetResult(&User{}).SetBody(string(body))
158-
r, err := coupleAPIErrors(req.Put(e))
117+
e := formatAPIPath("account/users/%s", userID)
118+
response, err := doPUTRequest[User](ctx, c, e, opts)
159119
if err != nil {
160120
return nil, err
161121
}
162122

163-
return r.Result().(*User), nil
123+
return response, nil
164124
}
165125

166126
// DeleteUser deletes the User with the specified id
167127
func (c *Client) DeleteUser(ctx context.Context, userID string) error {
168-
userID = url.PathEscape(userID)
169-
e := fmt.Sprintf("account/users/%s", userID)
170-
_, err := coupleAPIErrors(c.R(ctx).Delete(e))
128+
e := formatAPIPath("account/users/%s", userID)
129+
err := doDELETERequest(ctx, c, e)
171130
return err
172131
}

betas.go

+6-32
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,8 @@ package linodego
33
import (
44
"context"
55
"encoding/json"
6-
"fmt"
7-
"net/url"
86
"time"
97

10-
"github.com/go-resty/resty/v2"
118
"github.com/linode/linodego/internal/parseabletime"
129
)
1310

@@ -32,17 +29,6 @@ type BetaProgram struct {
3229
MoreInfo string `json:"more_info"`
3330
}
3431

35-
// BetasPagedResponse represents a paginated Beta Programs API response
36-
type BetasPagedResponse struct {
37-
*PageOptions
38-
Data []BetaProgram `json:"data"`
39-
}
40-
41-
// endpoint gets the endpoint URL for BetaProgram
42-
func (BetasPagedResponse) endpoint(_ ...any) string {
43-
return "/betas"
44-
}
45-
4632
// UnmarshalJSON implements the json.Unmarshaler interface
4733
func (beta *BetaProgram) UnmarshalJSON(b []byte) error {
4834
type Mask BetaProgram
@@ -65,35 +51,23 @@ func (beta *BetaProgram) UnmarshalJSON(b []byte) error {
6551
return nil
6652
}
6753

68-
func (resp *BetasPagedResponse) castResult(r *resty.Request, e string) (int, int, error) {
69-
res, err := coupleAPIErrors(r.SetResult(BetasPagedResponse{}).Get(e))
70-
if err != nil {
71-
return 0, 0, err
72-
}
73-
castedRes := res.Result().(*BetasPagedResponse)
74-
resp.Data = append(resp.Data, castedRes.Data...)
75-
return castedRes.Pages, castedRes.Results, nil
76-
}
77-
7854
// ListBetaPrograms lists active beta programs
7955
func (c *Client) ListBetaPrograms(ctx context.Context, opts *ListOptions) ([]BetaProgram, error) {
80-
response := BetasPagedResponse{}
81-
err := c.listHelper(ctx, &response, opts)
56+
response, err := getPaginatedResults[BetaProgram](ctx, c, "/betas", opts)
8257
if err != nil {
8358
return nil, err
8459
}
85-
return response.Data, nil
60+
61+
return response, nil
8662
}
8763

8864
// GetBetaProgram gets the beta program's detail with the ID
8965
func (c *Client) GetBetaProgram(ctx context.Context, betaID string) (*BetaProgram, error) {
90-
req := c.R(ctx).SetResult(&BetaProgram{})
91-
betaID = url.PathEscape(betaID)
92-
b := fmt.Sprintf("betas/%s", betaID)
93-
r, err := coupleAPIErrors(req.Get(b))
66+
e := formatAPIPath("betas/%s", betaID)
67+
response, err := doGETRequest[BetaProgram](ctx, c, e)
9468
if err != nil {
9569
return nil, err
9670
}
9771

98-
return r.Result().(*BetaProgram), nil
72+
return response, nil
9973
}

databases.go

+12-120
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,8 @@ package linodego
33
import (
44
"context"
55
"encoding/json"
6-
"fmt"
7-
"net/url"
86
"time"
97

10-
"github.com/go-resty/resty/v2"
118
"github.com/linode/linodego/internal/parseabletime"
129
)
1310

@@ -53,63 +50,6 @@ const (
5350
DatabaseStatusBackingUp DatabaseStatus = "backing_up"
5451
)
5552

56-
type DatabasesPagedResponse struct {
57-
*PageOptions
58-
Data []Database `json:"data"`
59-
}
60-
61-
func (DatabasesPagedResponse) endpoint(_ ...any) string {
62-
return "databases/instances"
63-
}
64-
65-
func (resp *DatabasesPagedResponse) castResult(r *resty.Request, e string) (int, int, error) {
66-
res, err := coupleAPIErrors(r.SetResult(DatabasesPagedResponse{}).Get(e))
67-
if err != nil {
68-
return 0, 0, err
69-
}
70-
castedRes := res.Result().(*DatabasesPagedResponse)
71-
resp.Data = append(resp.Data, castedRes.Data...)
72-
return castedRes.Pages, castedRes.Results, nil
73-
}
74-
75-
type DatabaseEnginesPagedResponse struct {
76-
*PageOptions
77-
Data []DatabaseEngine `json:"data"`
78-
}
79-
80-
func (DatabaseEnginesPagedResponse) endpoint(_ ...any) string {
81-
return "databases/engines"
82-
}
83-
84-
func (resp *DatabaseEnginesPagedResponse) castResult(r *resty.Request, e string) (int, int, error) {
85-
res, err := coupleAPIErrors(r.SetResult(DatabaseEnginesPagedResponse{}).Get(e))
86-
if err != nil {
87-
return 0, 0, err
88-
}
89-
castedRes := res.Result().(*DatabaseEnginesPagedResponse)
90-
resp.Data = append(resp.Data, castedRes.Data...)
91-
return castedRes.Pages, castedRes.Results, nil
92-
}
93-
94-
type DatabaseTypesPagedResponse struct {
95-
*PageOptions
96-
Data []DatabaseType `json:"data"`
97-
}
98-
99-
func (DatabaseTypesPagedResponse) endpoint(_ ...any) string {
100-
return "databases/types"
101-
}
102-
103-
func (resp *DatabaseTypesPagedResponse) castResult(r *resty.Request, e string) (int, int, error) {
104-
res, err := coupleAPIErrors(r.SetResult(DatabaseTypesPagedResponse{}).Get(e))
105-
if err != nil {
106-
return 0, 0, err
107-
}
108-
castedRes := res.Result().(*DatabaseTypesPagedResponse)
109-
resp.Data = append(resp.Data, castedRes.Data...)
110-
return castedRes.Pages, castedRes.Results, nil
111-
}
112-
11353
// A Database is a instance of Linode Managed Databases
11454
type Database struct {
11555
ID int `json:"id"`
@@ -202,100 +142,52 @@ func (d *Database) UnmarshalJSON(b []byte) error {
202142

203143
// ListDatabases lists all Database instances in Linode Managed Databases for the account
204144
func (c *Client) ListDatabases(ctx context.Context, opts *ListOptions) ([]Database, error) {
205-
response := DatabasesPagedResponse{}
206-
207-
err := c.listHelper(ctx, &response, opts)
145+
response, err := getPaginatedResults[Database](ctx, c, "databases/instances", opts)
208146
if err != nil {
209147
return nil, err
210148
}
211149

212-
return response.Data, nil
150+
return response, nil
213151
}
214152

215153
// ListDatabaseEngines lists all Database Engines. This endpoint is cached by default.
216154
func (c *Client) ListDatabaseEngines(ctx context.Context, opts *ListOptions) ([]DatabaseEngine, error) {
217-
response := DatabaseEnginesPagedResponse{}
218-
219-
endpoint, err := generateListCacheURL(response.endpoint(), opts)
220-
if err != nil {
221-
return nil, err
222-
}
223-
224-
if result := c.getCachedResponse(endpoint); result != nil {
225-
return result.([]DatabaseEngine), nil
226-
}
227-
228-
err = c.listHelper(ctx, &response, opts)
155+
response, err := getPaginatedResults[DatabaseEngine](ctx, c, "databases/engines", opts)
229156
if err != nil {
230157
return nil, err
231158
}
232159

233-
c.addCachedResponse(endpoint, response.Data, &cacheExpiryTime)
234-
235-
return response.Data, nil
160+
return response, nil
236161
}
237162

238163
// GetDatabaseEngine returns a specific Database Engine. This endpoint is cached by default.
239164
func (c *Client) GetDatabaseEngine(ctx context.Context, _ *ListOptions, engineID string) (*DatabaseEngine, error) {
240-
engineID = url.PathEscape(engineID)
241-
e := fmt.Sprintf("databases/engines/%s", engineID)
242-
243-
if result := c.getCachedResponse(e); result != nil {
244-
result := result.(DatabaseEngine)
245-
return &result, nil
246-
}
247-
248-
req := c.R(ctx).SetResult(&DatabaseEngine{})
249-
r, err := coupleAPIErrors(req.Get(e))
165+
e := formatAPIPath("databases/engines/%s", engineID)
166+
response, err := doGETRequest[DatabaseEngine](ctx, c, e)
250167
if err != nil {
251168
return nil, err
252169
}
253170

254-
c.addCachedResponse(e, r.Result(), &cacheExpiryTime)
255-
256-
return r.Result().(*DatabaseEngine), nil
171+
return response, nil
257172
}
258173

259174
// ListDatabaseTypes lists all Types of Database provided in Linode Managed Databases. This endpoint is cached by default.
260175
func (c *Client) ListDatabaseTypes(ctx context.Context, opts *ListOptions) ([]DatabaseType, error) {
261-
response := DatabaseTypesPagedResponse{}
262-
263-
endpoint, err := generateListCacheURL(response.endpoint(), opts)
264-
if err != nil {
265-
return nil, err
266-
}
267-
268-
if result := c.getCachedResponse(endpoint); result != nil {
269-
return result.([]DatabaseType), nil
270-
}
271-
272-
err = c.listHelper(ctx, &response, opts)
176+
response, err := getPaginatedResults[DatabaseType](ctx, c, "databases/types", opts)
273177
if err != nil {
274178
return nil, err
275179
}
276180

277-
c.addCachedResponse(endpoint, response.Data, &cacheExpiryTime)
278-
279-
return response.Data, nil
181+
return response, nil
280182
}
281183

282184
// GetDatabaseType returns a specific Database Type. This endpoint is cached by default.
283185
func (c *Client) GetDatabaseType(ctx context.Context, _ *ListOptions, typeID string) (*DatabaseType, error) {
284-
typeID = url.PathEscape(typeID)
285-
e := fmt.Sprintf("databases/types/%s", typeID)
286-
287-
if result := c.getCachedResponse(e); result != nil {
288-
result := result.(DatabaseType)
289-
return &result, nil
290-
}
291-
292-
req := c.R(ctx).SetResult(&DatabaseType{})
293-
r, err := coupleAPIErrors(req.Get(e))
186+
e := formatAPIPath("databases/types/%s", typeID)
187+
response, err := doGETRequest[DatabaseType](ctx, c, e)
294188
if err != nil {
295189
return nil, err
296190
}
297191

298-
c.addCachedResponse(e, r.Result(), &cacheExpiryTime)
299-
300-
return r.Result().(*DatabaseType), nil
192+
return response, nil
301193
}

0 commit comments

Comments
 (0)