@@ -3,11 +3,8 @@ package linodego
3
3
import (
4
4
"context"
5
5
"encoding/json"
6
- "fmt"
7
- "net/url"
8
6
"time"
9
7
10
- "github.com/go-resty/resty/v2"
11
8
"github.com/linode/linodego/internal/parseabletime"
12
9
)
13
10
@@ -53,63 +50,6 @@ const (
53
50
DatabaseStatusBackingUp DatabaseStatus = "backing_up"
54
51
)
55
52
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
-
113
53
// A Database is a instance of Linode Managed Databases
114
54
type Database struct {
115
55
ID int `json:"id"`
@@ -202,100 +142,52 @@ func (d *Database) UnmarshalJSON(b []byte) error {
202
142
203
143
// ListDatabases lists all Database instances in Linode Managed Databases for the account
204
144
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 )
208
146
if err != nil {
209
147
return nil , err
210
148
}
211
149
212
- return response . Data , nil
150
+ return response , nil
213
151
}
214
152
215
153
// ListDatabaseEngines lists all Database Engines. This endpoint is cached by default.
216
154
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 )
229
156
if err != nil {
230
157
return nil , err
231
158
}
232
159
233
- c .addCachedResponse (endpoint , response .Data , & cacheExpiryTime )
234
-
235
- return response .Data , nil
160
+ return response , nil
236
161
}
237
162
238
163
// GetDatabaseEngine returns a specific Database Engine. This endpoint is cached by default.
239
164
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 )
250
167
if err != nil {
251
168
return nil , err
252
169
}
253
170
254
- c .addCachedResponse (e , r .Result (), & cacheExpiryTime )
255
-
256
- return r .Result ().(* DatabaseEngine ), nil
171
+ return response , nil
257
172
}
258
173
259
174
// ListDatabaseTypes lists all Types of Database provided in Linode Managed Databases. This endpoint is cached by default.
260
175
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 )
273
177
if err != nil {
274
178
return nil , err
275
179
}
276
180
277
- c .addCachedResponse (endpoint , response .Data , & cacheExpiryTime )
278
-
279
- return response .Data , nil
181
+ return response , nil
280
182
}
281
183
282
184
// GetDatabaseType returns a specific Database Type. This endpoint is cached by default.
283
185
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 )
294
188
if err != nil {
295
189
return nil , err
296
190
}
297
191
298
- c .addCachedResponse (e , r .Result (), & cacheExpiryTime )
299
-
300
- return r .Result ().(* DatabaseType ), nil
192
+ return response , nil
301
193
}
0 commit comments