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
17 changes: 16 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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`:
Expand All @@ -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
Expand Down
14 changes: 12 additions & 2 deletions src/Contracts/HamroCDNContract.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@
* @phpstan-type HamroCDNData array{
* data: HamroCDNObject
* }
* @phpstan-type HamroCDNArrayData array{
* data: array<HamroCDNObject>
* }
* @phpstan-type HamroCDNObjectWithPagination array{
* data: array<HamroCDNObject>,
* meta: array{total: int, per_page: int, page: int}
Expand All @@ -21,11 +24,18 @@
interface HamroCDNContract
{
/**
* List all of your files in HamroCDN.
* List all your files in HamroCDN.
*
* @return array<Upload>
*/
public function all(): array;

/**
* List 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.
Expand Down
15 changes: 15 additions & 0 deletions src/HamroCDN.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
/**
* @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
Expand Down Expand Up @@ -132,4 +133,18 @@ public function uploadByURL(string $url): Upload

return Upload::fromArray($response['data']);
}

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']
);
}
}
41 changes: 27 additions & 14 deletions tests/UploadTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 () {
test('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();
}
});

test('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 () {
Expand Down