Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
* refactor: replace `errgo` with `github.com/Scalingo/go-utils/errors/v3` (breaking change)
* feat(logs): `LogsURL` returns a parsed structure (breaking change)
* refactor: autofix by `go fix` and `golangci-lint`
* refactor: remove use of a custom pagination structure

## 9.2.0

Expand Down
3 changes: 2 additions & 1 deletion databases.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (

httpclient "github.com/Scalingo/go-scalingo/v9/http"
"github.com/Scalingo/go-utils/errors/v3"
"github.com/Scalingo/go-utils/pagination"
)

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

Expand Down
13 changes: 7 additions & 6 deletions deployments.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,12 @@ import (

httpclient "github.com/Scalingo/go-scalingo/v9/http"
"github.com/Scalingo/go-utils/errors/v3"
"github.com/Scalingo/go-utils/pagination"
)

type DeploymentsService interface {
DeploymentList(ctx context.Context, app string) ([]*Deployment, error)
DeploymentListWithPagination(ctx context.Context, app string, opts PaginationOpts) ([]*Deployment, PaginationMeta, error)
DeploymentListWithPagination(ctx context.Context, app string, paginationReq pagination.Request) ([]*Deployment, pagination.Meta, error)
Deployment(ctx context.Context, app string, deploy string) (*Deployment, error)
DeploymentLogs(ctx context.Context, deployURL string) (*http.Response, error)
DeploymentStream(ctx context.Context, deployURL string) (*websocket.Conn, error)
Expand Down Expand Up @@ -119,7 +120,7 @@ func IsFinishedString(status DeploymentStatus) bool {
type DeploymentList struct {
Deployments []*Deployment `json:"deployments"`
Meta struct {
PaginationMeta PaginationMeta `json:"pagination"`
Pagination pagination.Meta `json:"pagination"`
}
}

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

func (c *Client) DeploymentListWithPagination(ctx context.Context, app string, opts PaginationOpts) ([]*Deployment, PaginationMeta, error) {
func (c *Client) DeploymentListWithPagination(ctx context.Context, app string, paginationReq pagination.Request) ([]*Deployment, pagination.Meta, error) {
var deployments DeploymentList
err := c.ScalingoAPI().SubresourceList(ctx, "apps", app, "deployments", opts.ToMap(), &deployments)
err := c.ScalingoAPI().SubresourceList(ctx, "apps", app, "deployments", paginationReq.ToURLValues(), &deployments)
if err != nil {
return []*Deployment{}, PaginationMeta{}, errors.Wrap(ctx, err, "list the deployments with pagination")
return []*Deployment{}, pagination.Meta{}, errors.Wrap(ctx, err, "list the deployments with pagination")
}

return deployments.Deployments, deployments.Meta.PaginationMeta, nil
return deployments.Deployments, deployments.Meta.Pagination, nil
}

func (c *Client) Deployment(ctx context.Context, app string, deploy string) (*Deployment, error) {
Expand Down
25 changes: 13 additions & 12 deletions events.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,58 +9,59 @@ import (

"github.com/Scalingo/go-scalingo/v9/http"
"github.com/Scalingo/go-utils/errors/v3"
"github.com/Scalingo/go-utils/pagination"
)

type EventsService interface {
EventTypesList(context.Context) ([]EventType, error)
EventCategoriesList(context.Context) ([]EventCategory, error)
EventsList(ctx context.Context, app string, opts PaginationOpts) (Events, PaginationMeta, error)
UserEventsList(context.Context, PaginationOpts) (Events, PaginationMeta, error)
EventsList(ctx context.Context, app string, paginationReq pagination.Request) (Events, pagination.Meta, error)
UserEventsList(ctx context.Context, paginationReq pagination.Request) (Events, pagination.Meta, error)
}

var _ EventsService = (*Client)(nil)

type EventsRes struct {
Events []*Event `json:"events"`
Meta struct {
PaginationMeta PaginationMeta `json:"pagination"`
Pagination pagination.Meta `json:"pagination"`
}
}

func (c *Client) EventsList(ctx context.Context, app string, opts PaginationOpts) (Events, PaginationMeta, error) {
func (c *Client) EventsList(ctx context.Context, app string, paginationReq pagination.Request) (Events, pagination.Meta, error) {
var eventsRes EventsRes
err := c.ScalingoAPI().SubresourceList(ctx, "apps", app, "events", opts.ToMap(), &eventsRes)
err := c.ScalingoAPI().SubresourceList(ctx, "apps", app, "events", paginationReq.ToURLValues(), &eventsRes)
if err != nil {
return nil, PaginationMeta{}, errors.Wrap(ctx, err, "list app events")
return nil, pagination.Meta{}, errors.Wrap(ctx, err, "list app events")
}
var events Events
for _, ev := range eventsRes.Events {
events = append(events, ev.Specialize())
}
return events, eventsRes.Meta.PaginationMeta, nil
return events, eventsRes.Meta.Pagination, nil
}

func (c *Client) UserEventsList(ctx context.Context, opts PaginationOpts) (Events, PaginationMeta, error) {
func (c *Client) UserEventsList(ctx context.Context, paginationReq pagination.Request) (Events, pagination.Meta, error) {
req := &http.APIRequest{
Endpoint: "/events",
Params: opts.ToMap(),
Params: paginationReq.ToURLValues(),
}

var eventsRes EventsRes
res, err := c.ScalingoAPI().Do(ctx, req)
if err != nil {
return nil, PaginationMeta{}, errors.Wrap(ctx, err, "list user events")
return nil, pagination.Meta{}, errors.Wrap(ctx, err, "list user events")
}
defer res.Body.Close()

err = json.NewDecoder(res.Body).Decode(&eventsRes)
if err != nil {
return nil, PaginationMeta{}, errors.Wrap(ctx, err, "decode user events response")
return nil, pagination.Meta{}, errors.Wrap(ctx, err, "decode user events response")
}

var events Events
for _, ev := range eventsRes.Events {
events = append(events, ev.Specialize())
}
return events, eventsRes.Meta.PaginationMeta, nil
return events, eventsRes.Meta.Pagination, nil
}
17 changes: 9 additions & 8 deletions events_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,16 @@ import (
"github.com/stretchr/testify/require"

"github.com/Scalingo/go-scalingo/v9/http/httpmock"
"github.com/Scalingo/go-utils/pagination"
)

var eventsListCases = map[string]struct {
PaginationOpts PaginationOpts
App string
Body string
Code int
EventsCount int
Error error
PaginationReq pagination.Request
App string
Body string
Code int
EventsCount int
Error error
}{
"test get list of events with no event": {
App: "app-1",
Expand Down Expand Up @@ -48,12 +49,12 @@ func TestEventsList(t *testing.T) {
apiMock := httpmock.NewMockClient(ctrl)
client.apiClient = apiMock

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

events, _, err := client.EventsList(ctx, c.App, c.PaginationOpts)
events, _, err := client.EventsList(ctx, c.App, c.PaginationReq)
if len(events) != c.EventsCount {
t.Errorf("expected %d event, got %v", c.EventsCount, len(events))
}
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ go 1.24.0

require (
github.com/Scalingo/go-utils/errors/v3 v3.2.0
github.com/Scalingo/go-utils/pagination v1.1.2
github.com/Scalingo/go-utils/pagination v1.2.0
github.com/golang-jwt/jwt/v5 v5.3.1
github.com/golang/mock v1.6.0
github.com/gorilla/websocket v1.5.3
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
github.com/Scalingo/go-utils/errors/v3 v3.2.0 h1:Ks+v2oRwv3VZfe+xVB+kpfmZouXHVCPHHtwL5W60prc=
github.com/Scalingo/go-utils/errors/v3 v3.2.0/go.mod h1:jVVNoOdYFjuNkR/BeEZWNWJVvu4jmyLY4udlsQQyBss=
github.com/Scalingo/go-utils/pagination v1.1.2 h1:DfHxWXK76F6+UyJqmJ/XIxTuwurMIJHRFfiejmPBC+8=
github.com/Scalingo/go-utils/pagination v1.1.2/go.mod h1:MwT1RRecXktFgVNeib+B4dnM4r0cPc93JichOPs5tj0=
github.com/Scalingo/go-utils/pagination v1.2.0 h1:dTvce+thcZXH/S13HF5dxGNPCMdGALNsW6p2EYe2Pno=
github.com/Scalingo/go-utils/pagination v1.2.0/go.mod h1:MwT1RRecXktFgVNeib+B4dnM4r0cPc93JichOPs5tj0=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/frankban/quicktest v1.2.2 h1:xfmOhhoH5fGPgbEAlhLpJH9p0z/0Qizio9osmvn9IUY=
Expand Down
9 changes: 7 additions & 2 deletions http/api_request.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ func (c *client) Do(ctx context.Context, req *APIRequest) (*http.Response, error
}
body = bytes.NewReader(buffer)
case http.MethodGet, http.MethodDelete:
values, err := req.BuildQueryFromParams(ctx)
values, err := req.buildQueryFromParams(ctx)
if err != nil {
return nil, errors.Wrap(ctx, err, "build the query params")
}
Expand Down Expand Up @@ -161,7 +161,12 @@ func parseJSON(ctx context.Context, res *http.Response, data any) error {
return nil
}

func (req *APIRequest) BuildQueryFromParams(ctx context.Context) (url.Values, error) {
func (req *APIRequest) buildQueryFromParams(ctx context.Context) (url.Values, error) {
urlValues, ok := req.Params.(url.Values)
if ok {
return urlValues, nil
}

values := url.Values{}
if reflect.TypeOf(req.Params).Kind() != reflect.Map {
return nil, errors.Errorf(ctx, "%#v is not a map", req.Params)
Expand Down
3 changes: 1 addition & 2 deletions http/httpmock/client_mock.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 8 additions & 7 deletions invoices.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,12 @@ import (
"time"

"github.com/Scalingo/go-utils/errors/v3"
"github.com/Scalingo/go-utils/pagination"
)

type InvoicesService interface {
InvoicesList(context.Context, PaginationOpts) (Invoices, PaginationMeta, error)
InvoiceShow(context.Context, string) (*Invoice, error)
InvoicesList(ctx context.Context, paginationReq pagination.Request) (Invoices, pagination.Meta, error)
InvoiceShow(ctx context.Context, id string) (*Invoice, error)
}

var _ InvoicesService = (*Client)(nil)
Expand Down Expand Up @@ -50,21 +51,21 @@ type Invoices []*Invoice
type InvoicesRes struct {
Invoices Invoices `json:"invoices"`
Meta struct {
PaginationMeta PaginationMeta `json:"pagination"`
Pagination pagination.Meta `json:"pagination"`
}
}

type InvoiceRes struct {
Invoice *Invoice `json:"invoice"`
}

func (c *Client) InvoicesList(ctx context.Context, opts PaginationOpts) (Invoices, PaginationMeta, error) {
func (c *Client) InvoicesList(ctx context.Context, paginationReq pagination.Request) (Invoices, pagination.Meta, error) {
var invoicesRes InvoicesRes
err := c.ScalingoAPI().ResourceList(ctx, "account/invoices", opts.ToMap(), &invoicesRes)
err := c.ScalingoAPI().ResourceList(ctx, "account/invoices", paginationReq.ToURLValues(), &invoicesRes)
if err != nil {
return nil, PaginationMeta{}, errors.Wrap(ctx, err, "list invoices")
return nil, pagination.Meta{}, errors.Wrap(ctx, err, "list invoices")
}
return invoicesRes.Invoices, invoicesRes.Meta.PaginationMeta, nil
return invoicesRes.Invoices, invoicesRes.Meta.Pagination, nil
}

func (c *Client) InvoiceShow(ctx context.Context, id string) (*Invoice, error) {
Expand Down
11 changes: 6 additions & 5 deletions maintenance.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"time"

"github.com/Scalingo/go-utils/errors/v3"
"github.com/Scalingo/go-utils/pagination"
)

type MaintenanceWindow struct {
Expand Down Expand Up @@ -56,17 +57,17 @@ func (c *Client) DatabaseUpdateMaintenanceWindow(ctx context.Context, app, addon
type ListMaintenanceResponse struct {
Maintenance []*Maintenance `json:"maintenance"`
Meta struct {
PaginationMeta PaginationMeta `json:"pagination"`
Pagination pagination.Meta `json:"pagination"`
}
}

func (c *Client) DatabaseListMaintenance(ctx context.Context, app, addonID string, opts PaginationOpts) ([]*Maintenance, PaginationMeta, error) {
func (c *Client) DatabaseListMaintenance(ctx context.Context, app, addonID string, paginationReq pagination.Request) ([]*Maintenance, pagination.Meta, error) {
var maintenanceRes ListMaintenanceResponse
err := c.DBAPI(app, addonID).SubresourceList(ctx, "databases", addonID, "maintenance", opts.ToMap(), &maintenanceRes)
err := c.DBAPI(app, addonID).SubresourceList(ctx, "databases", addonID, "maintenance", paginationReq.ToURLValues(), &maintenanceRes)
if err != nil {
return nil, PaginationMeta{}, errors.Wrapf(ctx, err, "list database '%v' maintenance", addonID)
return nil, pagination.Meta{}, errors.Wrapf(ctx, err, "list database '%v' maintenance", addonID)
}
return maintenanceRes.Maintenance, maintenanceRes.Meta.PaginationMeta, nil
return maintenanceRes.Maintenance, maintenanceRes.Meta.Pagination, nil
}

func (c *Client) DatabaseShowMaintenance(ctx context.Context, app, addonID, maintenanceID string) (Maintenance, error) {
Expand Down
10 changes: 5 additions & 5 deletions mocks_sig.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@
"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",
"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",
"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",
"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",
"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",
"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",
"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",
"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",
"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",
"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",
"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",
"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",
"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",
Expand All @@ -23,12 +23,12 @@
"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",
"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",
"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",
"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",
"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",
"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",
"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",
"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",
"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",
"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",
"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",
"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",
"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"
}
23 changes: 0 additions & 23 deletions pagination_options.go

This file was deleted.

Loading