From b084564b2bcfa7a8f8ac64dbb12cb62d7e01ca89 Mon Sep 17 00:00:00 2001 From: achyutkneupane Date: Thu, 30 Oct 2025 16:21:32 +0545 Subject: [PATCH 1/5] refactor: updates index declaration to support pagination --- src/Contracts/HamroCDNContract.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Contracts/HamroCDNContract.php b/src/Contracts/HamroCDNContract.php index a8609e1..43c423a 100644 --- a/src/Contracts/HamroCDNContract.php +++ b/src/Contracts/HamroCDNContract.php @@ -21,11 +21,11 @@ interface HamroCDNContract { /** - * List all of your files in HamroCDN. + * List all of your files in HamroCDN (with pagination). * * @return UploadWithPagination */ - public function index(): array; + public function index(?int $per_page = 20, ?int $page = 1): array; /** * Fetch a file from HamroCDN. From 4f04aa457a5971f50037fb18d02cc8feed334b0e Mon Sep 17 00:00:00 2001 From: achyutkneupane Date: Thu, 30 Oct 2025 16:28:23 +0545 Subject: [PATCH 2/5] refactor: updates HamroCDNContract to include all() method --- src/Contracts/HamroCDNContract.php | 12 ++++++++- src/HamroCDN.php | 9 +++++-- tests/UploadTest.php | 41 ++++++++++++++++++++---------- 3 files changed, 45 insertions(+), 17 deletions(-) diff --git a/src/Contracts/HamroCDNContract.php b/src/Contracts/HamroCDNContract.php index 43c423a..2dc7904 100644 --- a/src/Contracts/HamroCDNContract.php +++ b/src/Contracts/HamroCDNContract.php @@ -13,6 +13,9 @@ * @phpstan-type HamroCDNData array{ * data: HamroCDNObject * } + * @phpstan-type HamroCDNArrayData array{ + * data: array + * } * @phpstan-type HamroCDNObjectWithPagination array{ * data: array, * meta: array{total: int, per_page: int, page: int} @@ -21,7 +24,14 @@ interface HamroCDNContract { /** - * List all of your files in HamroCDN (with pagination). + * List all your files in HamroCDN. + * + * @return array + */ + public function all(): array; + + /** + * List your files in HamroCDN with pagination. * * @return UploadWithPagination */ diff --git a/src/HamroCDN.php b/src/HamroCDN.php index 5d24a66..77360d6 100644 --- a/src/HamroCDN.php +++ b/src/HamroCDN.php @@ -13,13 +13,13 @@ /** * @phpstan-import-type HamroCDNObject from Upload - * @phpstan-import-type HamroCDNData from HamroCDNContract + * @phpstan-import-type HamroCDNArrayData from HamroCDNContract * @phpstan-import-type HamroCDNObjectWithPagination from HamroCDNContract */ final class HamroCDN implements HamroCDNContract { /** - * @use Requestable + * @use Requestable */ use HasConfigValues, Requestable; @@ -132,4 +132,9 @@ public function uploadByURL(string $url): Upload return Upload::fromArray($response['data']); } + + public function all(): array + { + // + } } diff --git a/tests/UploadTest.php b/tests/UploadTest.php index 035f6cf..f0e216f 100644 --- a/tests/UploadTest.php +++ b/tests/UploadTest.php @@ -54,24 +54,37 @@ expect($upload->getUser()?->getEmail())->toBe('john@hamrocdn.com'); }); -it('returns an array of HamroCDN objects from index', function () { - $client = new HamroCDN('test-api-key', 'https://hamrocdn.com/api'); +describe('returns an array of HamroCDN objects from index', function () { + it('with pagination', function () { + $client = new HamroCDN('test-api-key', 'https://hamrocdn.com/api'); + + $uploads = $client->index(); + + expect($uploads)->toBeArray(); + expect($uploads) + ->toHaveKey('data') + ->toHaveKey('meta'); - $uploads = $client->index(); + expect($uploads['meta']) + ->toHaveKey('total') + ->toHaveKey('per_page') + ->toHaveKey('page'); - expect($uploads)->toBeArray(); - expect($uploads) - ->toHaveKey('data') - ->toHaveKey('meta'); + foreach ($uploads['data'] as $upload) { + expect($upload)->toBeUploadObject(); + } + }); + + it('without pagination', function () { + $client = new HamroCDN('test-api-key', 'https://hamrocdn.com/api'); - expect($uploads['meta']) - ->toHaveKey('total') - ->toHaveKey('per_page') - ->toHaveKey('page'); + $uploads = $client->all(); - foreach ($uploads['data'] as $upload) { - expect($upload)->toBeUploadObject(); - } + expect($uploads)->toBeArray(); + foreach ($uploads as $upload) { + expect($upload)->toBeUploadObject(); + } + }); }); it('uploads a file and returns a HamroCDN object', function () { From c2c55d9449a80f05e5b5555ab3d0f99b5e6eb086 Mon Sep 17 00:00:00 2001 From: achyutkneupane Date: Thu, 30 Oct 2025 16:30:03 +0545 Subject: [PATCH 3/5] refactor: test titles updated --- src/HamroCDN.php | 11 ++++++++++- tests/UploadTest.php | 4 ++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/HamroCDN.php b/src/HamroCDN.php index 77360d6..00cc461 100644 --- a/src/HamroCDN.php +++ b/src/HamroCDN.php @@ -135,6 +135,15 @@ public function uploadByURL(string $url): Upload public function all(): array { - // + /** @var HamroCDNArrayData $response */ + $response = $this->get('uploads', [ + 'paginate' => false, + ]); + + return array_map( + /** @param HamroCDNObject $item */ + fn (array $item): Upload => Upload::fromArray($item), + $response['data'] + ); } } diff --git a/tests/UploadTest.php b/tests/UploadTest.php index f0e216f..fe05ae3 100644 --- a/tests/UploadTest.php +++ b/tests/UploadTest.php @@ -55,7 +55,7 @@ }); describe('returns an array of HamroCDN objects from index', function () { - it('with pagination', function () { + test('with pagination', function () { $client = new HamroCDN('test-api-key', 'https://hamrocdn.com/api'); $uploads = $client->index(); @@ -75,7 +75,7 @@ } }); - it('without pagination', function () { + test('without pagination', function () { $client = new HamroCDN('test-api-key', 'https://hamrocdn.com/api'); $uploads = $client->all(); From b64bd29f7abd3368968159d8ec86a13846342090 Mon Sep 17 00:00:00 2001 From: achyutkneupane Date: Thu, 30 Oct 2025 16:32:07 +0545 Subject: [PATCH 4/5] refactor: updates type imports in HamroCDN class for phpstan --- src/HamroCDN.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/HamroCDN.php b/src/HamroCDN.php index 00cc461..1f2ba29 100644 --- a/src/HamroCDN.php +++ b/src/HamroCDN.php @@ -13,13 +13,14 @@ /** * @phpstan-import-type HamroCDNObject from Upload + * @phpstan-import-type HamroCDNData from HamroCDNContract * @phpstan-import-type HamroCDNArrayData from HamroCDNContract * @phpstan-import-type HamroCDNObjectWithPagination from HamroCDNContract */ final class HamroCDN implements HamroCDNContract { /** - * @use Requestable + * @use Requestable */ use HasConfigValues, Requestable; From c1a2878c2fde79d2c16ea1fa681362eec6d4e161 Mon Sep 17 00:00:00 2001 From: achyutkneupane Date: Thu, 30 Oct 2025 19:23:53 +0545 Subject: [PATCH 5/5] docs: Documentation for non-paginated result added --- README.md | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 32d1dc8..6300d09 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,9 @@ echo "Fetched: " . $fetched->getOriginal()->getUrl() . PHP_EOL; ## 🚀 Usage -### 1. List Uploads (Paginated) +### 1. List Uploads + +#### 1.1 Paginated The `index()` method returns paginated results. You can provide pagination parameters such as `page` and `per_page`: @@ -94,6 +96,19 @@ Example of returned metadata: } ``` +#### 1.2 All Uploads + +To fetch all uploads without pagination, use the `all()` method: + +```php +$uploads = $cdn->all(); +foreach ($uploads as $upload) { + echo $upload->getNanoId() . ' - ' . $upload->getOriginal()->getUrl() . PHP_EOL; +} +``` + +> Returns an array of `Upload` models. + --- ### 2. Fetch a Single Upload