Skip to content

Commit 10b0e25

Browse files
committed
refactor: remove use of a custom pagination structure
1 parent 730a2b3 commit 10b0e25

16 files changed

+95
-97
lines changed

databases.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77

88
httpclient "github.com/Scalingo/go-scalingo/v9/http"
99
"github.com/Scalingo/go-utils/errors/v3"
10+
"github.com/Scalingo/go-utils/pagination"
1011
)
1112

1213
// DatabasesService is the interface gathering all the methods related to
@@ -17,7 +18,7 @@ type DatabasesService interface {
1718
DatabaseDisableFeature(ctx context.Context, app, addonID, feature string) (DatabaseDisableFeatureResponse, error)
1819
DatabaseUpdatePeriodicBackupsConfig(ctx context.Context, app, addonID string, params DatabaseUpdatePeriodicBackupsConfigParams) (Database, error)
1920
DatabaseUpdateMaintenanceWindow(ctx context.Context, app, addonID string, params MaintenanceWindowParams) (Database, error)
20-
DatabaseListMaintenance(ctx context.Context, app, addonID string, opts PaginationOpts) ([]*Maintenance, PaginationMeta, error)
21+
DatabaseListMaintenance(ctx context.Context, app, addonID string, opts pagination.Request) ([]*Maintenance, pagination.Meta, error)
2122
DatabaseShowMaintenance(ctx context.Context, app, addonID, maintenanceID string) (Maintenance, error)
2223
}
2324

deployments.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,12 @@ import (
1111

1212
httpclient "github.com/Scalingo/go-scalingo/v9/http"
1313
"github.com/Scalingo/go-utils/errors/v3"
14+
"github.com/Scalingo/go-utils/pagination"
1415
)
1516

1617
type DeploymentsService interface {
1718
DeploymentList(ctx context.Context, app string) ([]*Deployment, error)
18-
DeploymentListWithPagination(ctx context.Context, app string, opts PaginationOpts) ([]*Deployment, PaginationMeta, error)
19+
DeploymentListWithPagination(ctx context.Context, app string, opts pagination.Request) ([]*Deployment, pagination.Meta, error)
1920
Deployment(ctx context.Context, app string, deploy string) (*Deployment, error)
2021
DeploymentLogs(ctx context.Context, deployURL string) (*http.Response, error)
2122
DeploymentStream(ctx context.Context, deployURL string) (*websocket.Conn, error)
@@ -119,7 +120,7 @@ func IsFinishedString(status DeploymentStatus) bool {
119120
type DeploymentList struct {
120121
Deployments []*Deployment `json:"deployments"`
121122
Meta struct {
122-
PaginationMeta PaginationMeta `json:"pagination"`
123+
Pagination pagination.Meta `json:"pagination"`
123124
}
124125
}
125126

@@ -149,14 +150,14 @@ func (c *Client) DeploymentList(ctx context.Context, app string) ([]*Deployment,
149150
return deployments.Deployments, nil
150151
}
151152

152-
func (c *Client) DeploymentListWithPagination(ctx context.Context, app string, opts PaginationOpts) ([]*Deployment, PaginationMeta, error) {
153+
func (c *Client) DeploymentListWithPagination(ctx context.Context, app string, opts pagination.Request) ([]*Deployment, pagination.Meta, error) {
153154
var deployments DeploymentList
154-
err := c.ScalingoAPI().SubresourceList(ctx, "apps", app, "deployments", opts.ToMap(), &deployments)
155+
err := c.ScalingoAPI().SubresourceList(ctx, "apps", app, "deployments", paginationRequestToMap(opts), &deployments)
155156
if err != nil {
156-
return []*Deployment{}, PaginationMeta{}, errors.Wrap(ctx, err, "list the deployments with pagination")
157+
return []*Deployment{}, pagination.Meta{}, errors.Wrap(ctx, err, "list the deployments with pagination")
157158
}
158159

159-
return deployments.Deployments, deployments.Meta.PaginationMeta, nil
160+
return deployments.Deployments, deployments.Meta.Pagination, nil
160161
}
161162

162163
func (c *Client) Deployment(ctx context.Context, app string, deploy string) (*Deployment, error) {

events.go

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,58 +9,59 @@ import (
99

1010
"github.com/Scalingo/go-scalingo/v9/http"
1111
"github.com/Scalingo/go-utils/errors/v3"
12+
"github.com/Scalingo/go-utils/pagination"
1213
)
1314

1415
type EventsService interface {
1516
EventTypesList(context.Context) ([]EventType, error)
1617
EventCategoriesList(context.Context) ([]EventCategory, error)
17-
EventsList(ctx context.Context, app string, opts PaginationOpts) (Events, PaginationMeta, error)
18-
UserEventsList(context.Context, PaginationOpts) (Events, PaginationMeta, error)
18+
EventsList(ctx context.Context, app string, opts pagination.Request) (Events, pagination.Meta, error)
19+
UserEventsList(ctx context.Context, opts pagination.Request) (Events, pagination.Meta, error)
1920
}
2021

2122
var _ EventsService = (*Client)(nil)
2223

2324
type EventsRes struct {
2425
Events []*Event `json:"events"`
2526
Meta struct {
26-
PaginationMeta PaginationMeta `json:"pagination"`
27+
Pagination pagination.Meta `json:"pagination"`
2728
}
2829
}
2930

30-
func (c *Client) EventsList(ctx context.Context, app string, opts PaginationOpts) (Events, PaginationMeta, error) {
31+
func (c *Client) EventsList(ctx context.Context, app string, opts pagination.Request) (Events, pagination.Meta, error) {
3132
var eventsRes EventsRes
32-
err := c.ScalingoAPI().SubresourceList(ctx, "apps", app, "events", opts.ToMap(), &eventsRes)
33+
err := c.ScalingoAPI().SubresourceList(ctx, "apps", app, "events", paginationRequestToMap(opts), &eventsRes)
3334
if err != nil {
34-
return nil, PaginationMeta{}, errors.Wrap(ctx, err, "list app events")
35+
return nil, pagination.Meta{}, errors.Wrap(ctx, err, "list app events")
3536
}
3637
var events Events
3738
for _, ev := range eventsRes.Events {
3839
events = append(events, ev.Specialize())
3940
}
40-
return events, eventsRes.Meta.PaginationMeta, nil
41+
return events, eventsRes.Meta.Pagination, nil
4142
}
4243

43-
func (c *Client) UserEventsList(ctx context.Context, opts PaginationOpts) (Events, PaginationMeta, error) {
44+
func (c *Client) UserEventsList(ctx context.Context, opts pagination.Request) (Events, pagination.Meta, error) {
4445
req := &http.APIRequest{
4546
Endpoint: "/events",
46-
Params: opts.ToMap(),
47+
Params: paginationRequestToMap(opts),
4748
}
4849

4950
var eventsRes EventsRes
5051
res, err := c.ScalingoAPI().Do(ctx, req)
5152
if err != nil {
52-
return nil, PaginationMeta{}, errors.Wrap(ctx, err, "list user events")
53+
return nil, pagination.Meta{}, errors.Wrap(ctx, err, "list user events")
5354
}
5455
defer res.Body.Close()
5556

5657
err = json.NewDecoder(res.Body).Decode(&eventsRes)
5758
if err != nil {
58-
return nil, PaginationMeta{}, errors.Wrap(ctx, err, "decode user events response")
59+
return nil, pagination.Meta{}, errors.Wrap(ctx, err, "decode user events response")
5960
}
6061

6162
var events Events
6263
for _, ev := range eventsRes.Events {
6364
events = append(events, ev.Specialize())
6465
}
65-
return events, eventsRes.Meta.PaginationMeta, nil
66+
return events, eventsRes.Meta.Pagination, nil
6667
}

events_test.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,13 @@ import (
88
"github.com/golang/mock/gomock"
99
"github.com/stretchr/testify/require"
1010

11+
"github.com/Scalingo/go-utils/pagination"
12+
1113
"github.com/Scalingo/go-scalingo/v9/http/httpmock"
1214
)
1315

1416
var eventsListCases = map[string]struct {
15-
PaginationOpts PaginationOpts
17+
PaginationOpts pagination.Request
1618
App string
1719
Body string
1820
Code int
@@ -48,7 +50,7 @@ func TestEventsList(t *testing.T) {
4850
apiMock := httpmock.NewMockClient(ctrl)
4951
client.apiClient = apiMock
5052

51-
apiMock.EXPECT().SubresourceList(gomock.Any(), "apps", c.App, "events", c.PaginationOpts.ToMap(), gomock.Any()).Do(func(_ context.Context, _, _, _ string, _ any, res any) {
53+
apiMock.EXPECT().SubresourceList(gomock.Any(), "apps", c.App, "events", paginationRequestToMap(c.PaginationOpts), gomock.Any()).Do(func(_ context.Context, _, _, _ string, _ any, res any) {
5254
err := json.Unmarshal([]byte(c.Body), &res)
5355
require.NoError(t, err)
5456
}).Return(nil)

http/httpmock/client_mock.go

Lines changed: 1 addition & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

invoices.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,12 @@ import (
66
"time"
77

88
"github.com/Scalingo/go-utils/errors/v3"
9+
"github.com/Scalingo/go-utils/pagination"
910
)
1011

1112
type InvoicesService interface {
12-
InvoicesList(context.Context, PaginationOpts) (Invoices, PaginationMeta, error)
13-
InvoiceShow(context.Context, string) (*Invoice, error)
13+
InvoicesList(ctx context.Context, opts pagination.Request) (Invoices, pagination.Meta, error)
14+
InvoiceShow(ctx context.Context, id string) (*Invoice, error)
1415
}
1516

1617
var _ InvoicesService = (*Client)(nil)
@@ -50,21 +51,21 @@ type Invoices []*Invoice
5051
type InvoicesRes struct {
5152
Invoices Invoices `json:"invoices"`
5253
Meta struct {
53-
PaginationMeta PaginationMeta `json:"pagination"`
54+
Pagination pagination.Meta `json:"pagination"`
5455
}
5556
}
5657

5758
type InvoiceRes struct {
5859
Invoice *Invoice `json:"invoice"`
5960
}
6061

61-
func (c *Client) InvoicesList(ctx context.Context, opts PaginationOpts) (Invoices, PaginationMeta, error) {
62+
func (c *Client) InvoicesList(ctx context.Context, opts pagination.Request) (Invoices, pagination.Meta, error) {
6263
var invoicesRes InvoicesRes
63-
err := c.ScalingoAPI().ResourceList(ctx, "account/invoices", opts.ToMap(), &invoicesRes)
64+
err := c.ScalingoAPI().ResourceList(ctx, "account/invoices", paginationRequestToMap(opts), &invoicesRes)
6465
if err != nil {
65-
return nil, PaginationMeta{}, errors.Wrap(ctx, err, "list invoices")
66+
return nil, pagination.Meta{}, errors.Wrap(ctx, err, "list invoices")
6667
}
67-
return invoicesRes.Invoices, invoicesRes.Meta.PaginationMeta, nil
68+
return invoicesRes.Invoices, invoicesRes.Meta.Pagination, nil
6869
}
6970

7071
func (c *Client) InvoiceShow(ctx context.Context, id string) (*Invoice, error) {

maintenance.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"time"
66

77
"github.com/Scalingo/go-utils/errors/v3"
8+
"github.com/Scalingo/go-utils/pagination"
89
)
910

1011
type MaintenanceWindow struct {
@@ -56,17 +57,17 @@ func (c *Client) DatabaseUpdateMaintenanceWindow(ctx context.Context, app, addon
5657
type ListMaintenanceResponse struct {
5758
Maintenance []*Maintenance `json:"maintenance"`
5859
Meta struct {
59-
PaginationMeta PaginationMeta `json:"pagination"`
60+
Pagination pagination.Meta `json:"pagination"`
6061
}
6162
}
6263

63-
func (c *Client) DatabaseListMaintenance(ctx context.Context, app, addonID string, opts PaginationOpts) ([]*Maintenance, PaginationMeta, error) {
64+
func (c *Client) DatabaseListMaintenance(ctx context.Context, app, addonID string, opts pagination.Request) ([]*Maintenance, pagination.Meta, error) {
6465
var maintenanceRes ListMaintenanceResponse
65-
err := c.DBAPI(app, addonID).SubresourceList(ctx, "databases", addonID, "maintenance", opts.ToMap(), &maintenanceRes)
66+
err := c.DBAPI(app, addonID).SubresourceList(ctx, "databases", addonID, "maintenance", paginationRequestToMap(opts), &maintenanceRes)
6667
if err != nil {
67-
return nil, PaginationMeta{}, errors.Wrapf(ctx, err, "list database '%v' maintenance", addonID)
68+
return nil, pagination.Meta{}, errors.Wrapf(ctx, err, "list database '%v' maintenance", addonID)
6869
}
69-
return maintenanceRes.Maintenance, maintenanceRes.Meta.PaginationMeta, nil
70+
return maintenanceRes.Maintenance, maintenanceRes.Meta.Pagination, nil
7071
}
7172

7273
func (c *Client) DatabaseShowMaintenance(ctx context.Context, app, addonID, maintenanceID string) (Maintenance, error) {

mocks_sig.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@
1010
"github.com/Scalingo/go-scalingo.ContainerSizesService": "e2 db 25 a1 01 52 dc e9 6f 7b f4 59 68 95 86 b9 5e 39 8a 61",
1111
"github.com/Scalingo/go-scalingo.ContainersService": "ef 14 ae 81 c9 b4 6a 13 48 e8 bf 44 7d b5 b2 a6 4d e5 02 11",
1212
"github.com/Scalingo/go-scalingo.CronTasksService": "9b d9 a3 ca 9f 9a f7 73 cb b1 aa 80 df 90 21 ff 14 92 b4 4d",
13-
"github.com/Scalingo/go-scalingo.DatabasesService": "e0 0c 43 fc 48 e3 07 3f 56 4e 8c aa d2 aa c3 11 08 d0 1c d1",
14-
"github.com/Scalingo/go-scalingo.DeploymentsService": "aa b5 25 87 ff f0 d2 9f 3a 32 42 2d d6 02 33 5f 63 14 2b 9a",
13+
"github.com/Scalingo/go-scalingo.DatabasesService": "7c 84 0b 87 60 d6 b9 c7 3a a9 53 d2 3a 1c b4 e4 46 f1 83 28",
14+
"github.com/Scalingo/go-scalingo.DeploymentsService": "05 ef e7 51 7d 05 3c 4e 6d 5e 66 5c 36 ba ed 14 33 a8 bc 7a",
1515
"github.com/Scalingo/go-scalingo.DomainsService": "b5 19 0f 10 5b f2 48 74 c6 c2 7b 27 7d 3b b8 ff 10 80 b3 6f",
16-
"github.com/Scalingo/go-scalingo.EventsService": "29 cf 29 33 fb 33 ce 86 3b 49 db ae 25 2d 5d 22 d6 60 21 95",
16+
"github.com/Scalingo/go-scalingo.EventsService": "13 7a 12 83 bf 3f 84 49 dc db 64 c3 d5 e8 4a c0 08 8c 78 f6",
1717
"github.com/Scalingo/go-scalingo.KeysService": "b9 5f 5d 8e 88 9d db 82 d6 69 e5 bd 94 6c 7e 08 14 69 23 48",
1818
"github.com/Scalingo/go-scalingo.LogDrainsService": "d4 05 d0 5e a7 7f b7 3e 58 19 07 8d 25 c5 af ca dc d3 6e d9",
1919
"github.com/Scalingo/go-scalingo.LogsArchivesService": "35 b6 c3 7b 41 1a 47 5c 3c df ab a6 d6 93 1e 6e b1 b1 f9 11",
@@ -23,12 +23,12 @@
2323
"github.com/Scalingo/go-scalingo.OperationsService": "28 1a bc 62 4c bd 9f e2 ef 45 90 7f 0d 82 5f 30 23 07 93 2a",
2424
"github.com/Scalingo/go-scalingo.RegionsService": "bc d0 b0 22 5b 7c df 31 02 b7 b3 4d 1f b4 9a 88 a2 7c 8a 6a",
2525
"github.com/Scalingo/go-scalingo.RunsService": "b3 27 40 57 21 c2 64 f8 08 89 c9 0e 06 45 0d 1b ff 5b 5a 45",
26-
"github.com/Scalingo/go-scalingo.SCMRepoLinkService": "5f 0e 30 84 9f 01 cf 3d 9c 46 d3 68 fe c9 a3 cf 85 56 30 cc",
26+
"github.com/Scalingo/go-scalingo.SCMRepoLinkService": "9c 37 58 d7 9c c1 04 6c 3d 33 32 f4 4d bd 25 47 33 7a 9c e9",
2727
"github.com/Scalingo/go-scalingo.SignUpService": "ae 46 80 88 8e b6 bd c3 ea d9 2c e5 d4 b5 37 ac a9 e8 4f cf",
2828
"github.com/Scalingo/go-scalingo.SourcesService": "05 1f 06 73 0a 43 2a 6a 35 d2 b9 41 d2 be 8e 7c ad b0 63 3e",
2929
"github.com/Scalingo/go-scalingo.TokensService": "32 2d 05 42 b4 9c a9 3b 1b 6c ce 0e da 18 cf 6f 8f cb fc 2a",
3030
"github.com/Scalingo/go-scalingo.UsersService": "9e c5 75 1e aa 05 dd a7 a3 17 5f 4e 82 80 e2 34 55 a2 70 df",
3131
"github.com/Scalingo/go-scalingo.VariablesService": "77 27 0b 8a 6b ac c9 c8 c3 b0 e0 f8 cf 7d 6e a0 63 9d 95 03",
32-
"github.com/Scalingo/go-scalingo/http.Client": "38 db 18 6f d4 6d e3 3c 4f 78 81 7c 96 b3 50 cf 23 47 14 1b",
32+
"github.com/Scalingo/go-scalingo/http.Client": "26 26 d6 21 12 7a b4 88 dc 46 fe 51 21 d6 00 94 94 a1 7f 89",
3333
"github.com/Scalingo/go-scalingo/http.TokensService": "e0 cf 0b 06 6f 07 a7 2b f2 c9 14 0f 3e aa d1 6b 83 5b 95 73"
3434
}

pagination.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package scalingo
2+
3+
import (
4+
"strconv"
5+
6+
"github.com/Scalingo/go-utils/pagination"
7+
)
8+
9+
func paginationRequestToMap(req pagination.Request) map[string]string {
10+
return map[string]string{
11+
"page": strconv.Itoa(req.Page),
12+
"per_page": strconv.Itoa(req.PerPage),
13+
}
14+
}

pagination_options.go

Lines changed: 0 additions & 23 deletions
This file was deleted.

0 commit comments

Comments
 (0)