Skip to content

Commit 61d7c13

Browse files
authored
Feature paginate (#128)
1 parent b814875 commit 61d7c13

File tree

4 files changed

+31
-13
lines changed

4 files changed

+31
-13
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ $document = $connector->send(new GetDocumentRequest($fileCabinetId, $documentId)
141141
/**
142142
* Return all documents for a file cabinet.
143143
*/
144-
$documents = $connector->send(new GetDocumentRequest($fileCabinetId))->dto();
144+
$documents = $connector->send(new GetDocumentsRequest($fileCabinetId))->dto();
145145

146146
/**
147147
* Return image preview of a document.

src/Requests/Document/GetDocumentsRequest.php

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
namespace CodebarAg\DocuWare\Requests\Document;
44

5+
use CodebarAg\DocuWare\DTO\DocumentPaginator;
56
use CodebarAg\DocuWare\Responses\Document\GetDocumentsResponse;
6-
use Illuminate\Support\Collection;
77
use Illuminate\Support\Facades\Cache;
88
use Saloon\CachePlugin\Contracts\Cacheable;
99
use Saloon\CachePlugin\Drivers\LaravelCacheDriver;
@@ -20,9 +20,19 @@ class GetDocumentsRequest extends Request implements Cacheable
2020

2121
public function __construct(
2222
protected readonly string $fileCabinetId,
23+
protected readonly int $page = 1,
24+
protected readonly int $perPage = 50,
2325
) {
2426
}
2527

28+
public function defaultQuery(): array
29+
{
30+
return [
31+
'count' => $this->perPage,
32+
'start' => ($this->page - 1) * $this->perPage,
33+
];
34+
}
35+
2636
public function resolveEndpoint(): string
2737
{
2838
return '/FileCabinets/'.$this->fileCabinetId.'/Documents';
@@ -38,8 +48,8 @@ public function cacheExpiryInSeconds(): int
3848
return config('laravel-docuware.configurations.cache.lifetime_in_seconds', 3600);
3949
}
4050

41-
public function createDtoFromResponse(Response $response): Collection
51+
public function createDtoFromResponse(Response $response): DocumentPaginator
4252
{
43-
return GetDocumentsResponse::fromResponse($response);
53+
return GetDocumentsResponse::fromResponse($response, $this->page, $this->perPage);
4454
}
4555
}

src/Responses/Document/GetDocumentsResponse.php

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,30 @@
22

33
namespace CodebarAg\DocuWare\Responses\Document;
44

5-
use CodebarAg\DocuWare\DTO\Document;
5+
use CodebarAg\DocuWare\DTO\DocumentPaginator;
66
use CodebarAg\DocuWare\Events\DocuWareResponseLog;
77
use CodebarAg\DocuWare\Support\EnsureValidResponse;
8-
use Illuminate\Support\Collection;
8+
use Exception;
99
use Saloon\Http\Response;
1010

1111
final class GetDocumentsResponse
1212
{
13-
public static function fromResponse(Response $response): Collection
13+
public static function fromResponse(Response $response, $page, $perPage): DocumentPaginator
1414
{
1515
event(new DocuWareResponseLog($response));
1616

17-
EnsureValidResponse::from($response);
17+
try {
18+
EnsureValidResponse::from($response);
1819

19-
$items = $response->throw()->json('Items');
20+
$data = $response->throw()->json();
21+
} catch (Exception $e) {
22+
return DocumentPaginator::fromFailed($e);
23+
}
2024

21-
return collect($items)->map(fn (array $item) => Document::fromJson($item));
25+
return DocumentPaginator::fromJson(
26+
$data,
27+
$page,
28+
$perPage,
29+
);
2230
}
2331
}

tests/Pest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,12 @@ function clearFiles(): void
4141
{
4242
$connector = getConnector();
4343

44-
$documents = $connector->send(new GetDocumentsRequest(
44+
$paginator = $connector->send(new GetDocumentsRequest(
4545
config('laravel-docuware.tests.file_cabinet_id')
4646
))->dto();
4747

48-
foreach ($documents as $document) {
49-
$delete = $connector->send(new DeleteDocumentRequest(
48+
foreach ($paginator->documents as $document) {
49+
$connector->send(new DeleteDocumentRequest(
5050
config('laravel-docuware.tests.file_cabinet_id'),
5151
$document->id,
5252
))->dto();

0 commit comments

Comments
 (0)