Skip to content
This repository was archived by the owner on Nov 4, 2025. It is now read-only.

Commit f07cc21

Browse files
author
Niek Brekelmans
committed
throw exception or cast response to DTO
1 parent 163212d commit f07cc21

18 files changed

+207
-43
lines changed

src/Objects/BaseRecord.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
3+
namespace DutchCodingCompany\HetznerDnsClient\Objects;
4+
5+
use Carbon\Carbon;
6+
use DutchCodingCompany\HetznerDnsClient\Enums\RecordType;
7+
use Spatie\DataTransferObject\Attributes\DefaultCast;
8+
use Spatie\DataTransferObject\DataTransferObject;
9+
10+
#[
11+
DefaultCast(Carbon::class, Casters\CarbonCaster::class),
12+
DefaultCast(RecordType::class, Casters\RecordTypeCaster::class),
13+
]
14+
class BaseRecord extends DataTransferObject
15+
{
16+
public RecordType $type;
17+
public string $name;
18+
public string $value;
19+
public string $zone_id;
20+
}

src/Objects/BulkCreatedRecords.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?php
2+
3+
namespace DutchCodingCompany\HetznerDnsClient\Objects;
4+
5+
use Spatie\DataTransferObject\Attributes\CastWith;
6+
use Spatie\DataTransferObject\Casters\ArrayCaster;
7+
use Spatie\DataTransferObject\DataTransferObject;
8+
9+
class BulkCreatedRecords extends DataTransferObject
10+
{
11+
/** @var Record[] */
12+
#[CastWith(ArrayCaster::class, itemType: BaseRecord::class)]
13+
public array $invalid_records;
14+
15+
/** @var Record[] */
16+
#[CastWith(ArrayCaster::class, itemType: Record::class)]
17+
public array $records;
18+
19+
/** @var Record[] */
20+
#[CastWith(ArrayCaster::class, itemType: BaseRecord::class)]
21+
public array $valid_records;
22+
}

src/Objects/BulkUpdatedRecords.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
3+
namespace DutchCodingCompany\HetznerDnsClient\Objects;
4+
5+
use Spatie\DataTransferObject\Attributes\CastWith;
6+
use Spatie\DataTransferObject\Casters\ArrayCaster;
7+
use Spatie\DataTransferObject\DataTransferObject;
8+
9+
class BulkUpdatedRecords extends DataTransferObject
10+
{
11+
/** @var Record[] */
12+
#[CastWith(ArrayCaster::class, itemType: BaseRecord::class)]
13+
public array $failed_records;
14+
15+
/** @var Record[] */
16+
#[CastWith(ArrayCaster::class, itemType: Record::class)]
17+
public array $records;
18+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?php
2+
3+
namespace DutchCodingCompany\HetznerDnsClient\Objects\Casters;
4+
5+
use Carbon\Carbon;
6+
use DutchCodingCompany\HetznerDnsClient\Enums\RecordType;
7+
use Spatie\DataTransferObject\Caster;
8+
9+
class RecordTypeCaster implements Caster
10+
{
11+
public function cast(mixed $value): ?RecordType
12+
{
13+
return empty($value) ? null : RecordType::fromValue($value);
14+
}
15+
}

src/Objects/Record.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?php
2+
3+
namespace DutchCodingCompany\HetznerDnsClient\Objects;
4+
5+
use Carbon\Carbon;
6+
use DutchCodingCompany\HetznerDnsClient\Enums\RecordType;
7+
use Spatie\DataTransferObject\Attributes\DefaultCast;
8+
use Spatie\DataTransferObject\DataTransferObject;
9+
10+
class Record extends BaseRecord
11+
{
12+
public string $id;
13+
public Carbon $created;
14+
public Carbon $modified;
15+
}

src/Objects/Records.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
3+
namespace DutchCodingCompany\HetznerDnsClient\Objects;
4+
5+
use Spatie\DataTransferObject\Attributes\CastWith;
6+
use Spatie\DataTransferObject\Casters\ArrayCaster;
7+
use Spatie\DataTransferObject\DataTransferObject;
8+
9+
class Records extends DataTransferObject
10+
{
11+
/** @var Record[] */
12+
#[CastWith(ArrayCaster::class, itemType: Record::class)]
13+
public array $records;
14+
}

src/Objects/ZoneCollection.php renamed to src/Objects/Zones.php

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,11 @@
22

33
namespace DutchCodingCompany\HetznerDnsClient\Objects;
44

5-
use Carbon\Carbon;
65
use Spatie\DataTransferObject\Attributes\CastWith;
7-
use Spatie\DataTransferObject\Attributes\DefaultCast;
86
use Spatie\DataTransferObject\Casters\ArrayCaster;
97
use Spatie\DataTransferObject\DataTransferObject;
108

11-
#[
12-
DefaultCast(Carbon::class, Casters\CarbonCaster::class),
13-
]
14-
class ZoneCollection extends DataTransferObject
9+
class Zones extends DataTransferObject
1510
{
1611
/** @var Zone[] */
1712
#[CastWith(ArrayCaster::class, itemType: Zone::class)]

src/RequestCollections/RecordCollection.php

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

33
namespace DutchCodingCompany\HetznerDnsClient\RequestCollections;
44

5+
use DutchCodingCompany\HetznerDnsClient\Enums\RecordType;
6+
use DutchCodingCompany\HetznerDnsClient\Objects\BulkCreatedRecords;
7+
use DutchCodingCompany\HetznerDnsClient\Objects\BulkUpdatedRecords;
8+
use DutchCodingCompany\HetznerDnsClient\Objects\Record;
9+
use DutchCodingCompany\HetznerDnsClient\Objects\Records;
510
use DutchCodingCompany\HetznerDnsClient\Requests\Records\BulkCreateRecords;
611
use DutchCodingCompany\HetznerDnsClient\Requests\Records\BulkUpdateRecords;
712
use DutchCodingCompany\HetznerDnsClient\Requests\Records\CreateRecord;
@@ -13,38 +18,38 @@
1318

1419
class RecordCollection extends RequestCollection
1520
{
16-
public function all(...$arguments): array
21+
public function all(?int $page = null, ?int $per_page = null, ?string $zone_id = null): Records
1722
{
18-
return $this->connector->request(new ListRecords(...$arguments))->send()->throw()->json();
23+
return $this->connector->request(new ListRecords(page: $page, per_page: $per_page, zone_id: $zone_id))->send()->throw()->dto();
1924
}
2025

21-
public function create(...$arguments): array
26+
public function create(string $zone_id, RecordType $type, string $name, string $value, ?int $ttl = null): Record
2227
{
23-
return $this->connector->request(new CreateRecord(...$arguments))->send()->throw()->json();
28+
return $this->connector->request(new CreateRecord(zone_id: $zone_id, type: $type, name: $name, value: $value, ttl: $ttl))->send()->throw()->dto();
2429
}
2530

26-
public function get(...$arguments): array
31+
public function get(string $record_id): Record
2732
{
28-
return $this->connector->request(new GetRecord(...$arguments))->send()->throw()->json();
33+
return $this->connector->request(new GetRecord(record_id: $record_id))->send()->throw()->dto();
2934
}
3035

31-
public function update(...$arguments): array
36+
public function update(string $record_id, string $zone_id, RecordType $type, string $name, string $value, ?int $ttl = null): Record
3237
{
33-
return $this->connector->request(new UpdateRecord(...$arguments))->send()->throw()->json();
38+
return $this->connector->request(new UpdateRecord(record_id: $record_id, zone_id: $zone_id, type: $type, name: $name, value: $value, ttl: $ttl))->send()->throw()->dto();
3439
}
3540

36-
public function delete(...$arguments): array
41+
public function delete(string $record_id): void
3742
{
38-
return $this->connector->request(new DeleteRecord(...$arguments))->send()->throw()->json();
43+
$this->connector->request(new DeleteRecord($record_id))->send()->throw();
3944
}
4045

41-
public function bulkCreate(...$arguments): array
46+
public function bulkCreate(array $records): BulkCreatedRecords
4247
{
43-
return $this->connector->request(new BulkCreateRecords(...$arguments))->send()->throw()->json();
48+
return $this->connector->request(new BulkCreateRecords($records))->send()->throw()->dto();
4449
}
4550

46-
public function bulkUpdate(...$arguments): array
51+
public function bulkUpdate(array $records): BulkUpdatedRecords
4752
{
48-
return $this->connector->request(new BulkUpdateRecords(...$arguments))->send()->throw()->json();
53+
return $this->connector->request(new BulkUpdateRecords($records))->send()->throw()->dto();
4954
}
5055
}

src/RequestCollections/ZoneCollection.php

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace DutchCodingCompany\HetznerDnsClient\RequestCollections;
44

55
use DutchCodingCompany\HetznerDnsClient\Objects\Zone;
6+
use DutchCodingCompany\HetznerDnsClient\Objects\Zones;
67
use DutchCodingCompany\HetznerDnsClient\Requests\Zones\CreateZone;
78
use DutchCodingCompany\HetznerDnsClient\Requests\Zones\DeleteZone;
89
use DutchCodingCompany\HetznerDnsClient\Requests\Zones\ExportZone;
@@ -13,33 +14,33 @@
1314

1415
class ZoneCollection extends RequestCollection
1516
{
16-
public function all(...$arguments): array
17+
public function all(string $name = null,?int $per_page = null, ?string $search_name = null): Zones
1718
{
18-
return $this->connector->request(new ListZones(...$arguments))->send()->throw()->dto();
19+
return $this->connector->request(new ListZones(name: $name, per_page: $per_page, search_name: $search_name))->send()->throw()->dto();
1920
}
2021

21-
public function create(...$arguments): array
22+
public function create(string $name, ?int $ttl = null): Zone
2223
{
23-
return $this->connector->request(new CreateZone(...$arguments))->send()->throw()->json();
24+
return $this->connector->request(new CreateZone(name: $name, ttl: $ttl))->send()->throw()->dto();
2425
}
2526

26-
public function get(...$arguments): ?Zone
27+
public function get(string $zone_id): Zone
2728
{
28-
return $this->connector->request(new GetZone(...$arguments))->send()->throw()->dto();
29+
return $this->connector->request(new GetZone(zone_id: $zone_id))->send()->throw()->dto();
2930
}
3031

31-
public function update(...$arguments): array
32+
public function update(string $zone_id, string $name, ?int $ttl = null): Zone
3233
{
33-
return $this->connector->request(new UpdateZone(...$arguments))->send()->throw()->json();
34+
return $this->connector->request(new UpdateZone(zone_id: $zone_id, name: $name, ttl: $ttl))->send()->throw()->dto();
3435
}
3536

36-
public function delete(...$arguments): array
37+
public function delete(string $zone_id): void
3738
{
38-
return $this->connector->request(new DeleteZone(...$arguments))->send()->throw()->json();
39+
$this->connector->request(new DeleteZone(zone_id: $zone_id))->send()->throw();
3940
}
4041

41-
public function export(...$arguments): array
42+
public function export(string $zone_id): string
4243
{
43-
return $this->connector->request(new ExportZone(...$arguments))->send()->throw()->json();
44+
return $this->connector->request(new ExportZone(zone_id: $zone_id))->send()->throw()->body();
4445
}
4546
}

src/Requests/Records/BulkCreateRecords.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,16 @@
44

55
use DutchCodingCompany\HetznerDnsClient\Enums\RecordType;
66
use DutchCodingCompany\HetznerDnsClient\HetznerDnsClient;
7+
use DutchCodingCompany\HetznerDnsClient\Objects\BulkCreatedRecords;
78
use Sammyjo20\Saloon\Constants\Saloon;
89
use Sammyjo20\Saloon\Http\SaloonRequest;
10+
use Sammyjo20\Saloon\Http\SaloonResponse;
11+
use Sammyjo20\Saloon\Traits\Plugins\CastsToDto;
912
use Sammyjo20\Saloon\Traits\Plugins\HasJsonBody;
1013

1114
class BulkCreateRecords extends SaloonRequest
1215
{
13-
use HasJsonBody;
16+
use HasJsonBody, CastsToDto;
1417

1518
protected array $records;
1619

@@ -37,4 +40,9 @@ public function defaultData(): array
3740
'records' => $this->records,
3841
]);
3942
}
43+
44+
protected function castToDto(SaloonResponse $response): BulkCreatedRecords
45+
{
46+
return new BulkCreatedRecords($response->json());
47+
}
4048
}

0 commit comments

Comments
 (0)