Skip to content

Commit

Permalink
Merge pull request #8 from ewarehousing-solutions/feature/pagination
Browse files Browse the repository at this point in the history
Feature/pagination
  • Loading branch information
Fichtme authored Jul 5, 2024
2 parents c10a4ea + 0c015ff commit f69b256
Show file tree
Hide file tree
Showing 15 changed files with 237 additions and 133 deletions.
3 changes: 2 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@
"require": {
"php": ">=8.0",
"saloonphp/saloon": "^3.0",
"saloonphp/rate-limit-plugin": "^2.0"
"saloonphp/rate-limit-plugin": "^2.0",
"saloonphp/pagination-plugin": "^2.0"
},
"require-dev": {
"phpunit/phpunit": "^9.5",
Expand Down
294 changes: 175 additions & 119 deletions composer.lock

Large diffs are not rendered by default.

37 changes: 36 additions & 1 deletion src/MiddlewareConnector.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,14 +48,21 @@
use Saloon\Contracts\Authenticator;
use Saloon\Http\PendingRequest;
use Saloon\Http\Connector;
use Saloon\Http\Request;
use Saloon\Http\Response;
use Saloon\PaginationPlugin\Contracts\HasPagination;
use Saloon\PaginationPlugin\OffsetPaginator;
use Saloon\PaginationPlugin\PagedPaginator;
use Saloon\RateLimitPlugin\Contracts\RateLimitStore;
use Saloon\RateLimitPlugin\Limit;
use Saloon\RateLimitPlugin\Stores\MemoryStore;
use Saloon\RateLimitPlugin\Traits\HasRateLimits;
use Saloon\Traits\Plugins\AlwaysThrowOnErrors;

class MiddlewareConnector extends Connector
class MiddlewareConnector extends Connector implements HasPagination
{
use HasRateLimits;
use AlwaysThrowOnErrors;

public const BASE_URL_EU_DEV = 'https://eu-dev.middleware.ewarehousing-solutions.com';
public const BASE_URL_EU = 'https://eu.middleware.ewarehousing-solutions.com';
Expand Down Expand Up @@ -198,4 +205,32 @@ protected function resolveRateLimitStore(): RateLimitStore
{
return new MemoryStore();
}

public function paginate(Request $request): OffsetPaginator
{
return new class(connector: $this, request: $request) extends OffsetPaginator
{
protected ?int $perPageLimit = 100;

protected function isLastPage(Response $response): bool
{
return count($this->getPageItems($response, $this->request)) < $this->perPageLimit;
}

protected function getPageItems(Response $response, Request $request): array
{
return $response->json();
}

protected function applyPagination(Request $request): Request
{
$request->query()->merge([
'page' => $this->getCurrentPage(),
'limit' => $this->perPageLimit,
]);

return $request;
}
};
}
}
3 changes: 2 additions & 1 deletion src/Requests/Article/GetArticleCollectionRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,9 @@

use Saloon\Enums\Method;
use Saloon\Http\Request;
use Saloon\PaginationPlugin\Contracts\Paginatable;

class GetArticleCollectionRequest extends Request
class GetArticleCollectionRequest extends Request implements Paginatable
{
protected Method $method = Method::GET;

Expand Down
3 changes: 2 additions & 1 deletion src/Requests/Batch/GetBatchCollectionRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,9 @@

use Saloon\Enums\Method;
use Saloon\Http\Request;
use Saloon\PaginationPlugin\Contracts\Paginatable;

class GetBatchCollectionRequest extends Request
class GetBatchCollectionRequest extends Request implements Paginatable
{
protected Method $method = Method::GET;

Expand Down
3 changes: 2 additions & 1 deletion src/Requests/Customer/GetCustomerCollectionRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,9 @@

use Saloon\Enums\Method;
use Saloon\Http\Request;
use Saloon\PaginationPlugin\Contracts\Paginatable;

class GetCustomerCollectionRequest extends Request
class GetCustomerCollectionRequest extends Request implements Paginatable
{
protected Method $method = Method::GET;

Expand Down
3 changes: 2 additions & 1 deletion src/Requests/Inbound/GetInboundCollectionRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,9 @@

use Saloon\Enums\Method;
use Saloon\Http\Request;
use Saloon\PaginationPlugin\Contracts\Paginatable;

class GetInboundCollectionRequest extends Request
class GetInboundCollectionRequest extends Request implements Paginatable
{
protected Method $method = Method::GET;

Expand Down
3 changes: 2 additions & 1 deletion src/Requests/Logs/GetLogsCollectionRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,9 @@

use Saloon\Enums\Method;
use Saloon\Http\Request;
use Saloon\PaginationPlugin\Contracts\Paginatable;

class GetLogsCollectionRequest extends Request
class GetLogsCollectionRequest extends Request implements Paginatable
{
protected Method $method = Method::GET;

Expand Down
3 changes: 2 additions & 1 deletion src/Requests/Order/GetOrderCollectionRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,9 @@

use Saloon\Enums\Method;
use Saloon\Http\Request;
use Saloon\PaginationPlugin\Contracts\Paginatable;

class GetOrderCollectionRequest extends Request
class GetOrderCollectionRequest extends Request implements Paginatable
{
protected Method $method = Method::GET;

Expand Down
3 changes: 2 additions & 1 deletion src/Requests/Order/GetOrderDocumentCollectionRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,9 @@

use Saloon\Enums\Method;
use Saloon\Http\Request;
use Saloon\PaginationPlugin\Contracts\Paginatable;

class GetOrderDocumentCollectionRequest extends Request
class GetOrderDocumentCollectionRequest extends Request implements Paginatable
{
protected Method $method = Method::GET;

Expand Down
3 changes: 2 additions & 1 deletion src/Requests/Shipment/GetShipmentCollectionRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,9 @@

use Saloon\Enums\Method;
use Saloon\Http\Request;
use Saloon\PaginationPlugin\Contracts\Paginatable;

class GetShipmentCollectionRequest extends Request
class GetShipmentCollectionRequest extends Request implements Paginatable
{
protected Method $method = Method::GET;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,9 @@

use Saloon\Enums\Method;
use Saloon\Http\Request;
use Saloon\PaginationPlugin\Contracts\Paginatable;

class GetShippingMethodCollectionRequest extends Request
class GetShippingMethodCollectionRequest extends Request implements Paginatable
{
protected Method $method = Method::GET;

Expand Down
3 changes: 2 additions & 1 deletion src/Requests/StockLevel/GetStockLevelCollectionRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,9 @@

use Saloon\Enums\Method;
use Saloon\Http\Request;
use Saloon\PaginationPlugin\Contracts\Paginatable;

class GetStockLevelCollectionRequest extends Request
class GetStockLevelCollectionRequest extends Request implements Paginatable
{
protected Method $method = Method::GET;

Expand Down
3 changes: 2 additions & 1 deletion src/Requests/Variant/GetVariantCollectionRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,9 @@

use Saloon\Enums\Method;
use Saloon\Http\Request;
use Saloon\PaginationPlugin\Contracts\Paginatable;

class GetVariantCollectionRequest extends Request
class GetVariantCollectionRequest extends Request implements Paginatable
{
protected Method $method = Method::GET;

Expand Down
3 changes: 2 additions & 1 deletion src/Requests/Webhook/GetWebhookCollectionRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,9 @@

use Saloon\Enums\Method;
use Saloon\Http\Request;
use Saloon\PaginationPlugin\Contracts\Paginatable;

class GetWebhookCollectionRequest extends Request
class GetWebhookCollectionRequest extends Request implements Paginatable
{
protected Method $method = Method::GET;

Expand Down

0 comments on commit f69b256

Please sign in to comment.