diff --git a/resources/resources.go b/resources/resources.go index 98f2d0c..7761794 100644 --- a/resources/resources.go +++ b/resources/resources.go @@ -9,6 +9,7 @@ import ( type ResourceService interface { Create(ctx context.Context, req *CreateRequest) (*Resource, error) + List(ctx context.Context, limit, offset int) ([]Resource, error) Get(ctx context.Context, id int64) (*Resource, error) Update(ctx context.Context, id int64, req *UpdateRequest) (*Resource, error) Delete(ctx context.Context, resourceID int64) error diff --git a/resources/service.go b/resources/service.go index 4896af9..cab8ac0 100644 --- a/resources/service.go +++ b/resources/service.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "net/http" + "net/url" "github.com/G-Core/gcorelabscdn-go/gcore" ) @@ -27,6 +28,28 @@ func (s *Service) Create(ctx context.Context, req *CreateRequest) (*Resource, er return &resource, nil } +func (s *Service) List(ctx context.Context, limit, offset int) ([]Resource, error) { + var resources []Resource + params := url.Values{} + if limit > 0 { + params.Add("limit", fmt.Sprintf("%d", limit)) + } + if offset > 0 { + params.Add("offset", fmt.Sprintf("%d", offset)) + } + + path := "/cdn/resources" + if len(params) > 0 { + path = fmt.Sprintf("%s?%s", path, params.Encode()) + } + + if err := s.r.Request(ctx, http.MethodGet, path, nil, &resources); err != nil { + return nil, fmt.Errorf("request: %w", err) + } + + return resources, nil +} + func (s *Service) Get(ctx context.Context, id int64) (*Resource, error) { var resource Resource if err := s.r.Request(ctx, http.MethodGet, fmt.Sprintf("/cdn/resources/%d", id), nil, &resource); err != nil {