PagarmeOrderResponseData.php 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <?php
  2. namespace App\Data\Pagarme\Response;
  3. use App\Data\Pagarme\Response\Objects\PagarmeArrayListData;
  4. use App\Data\Pagarme\Response\Objects\PagarmeArrayObjectData;
  5. readonly class PagarmeOrderResponseData
  6. {
  7. public function __construct(
  8. public ?string $id,
  9. public ?string $code,
  10. public ?int $amount,
  11. public ?string $currency,
  12. public ?bool $closed,
  13. public ?string $status,
  14. public PagarmeArrayListData $items,
  15. public ?PagarmeArrayObjectData $customer,
  16. public PagarmeArrayListData $charges,
  17. public PagarmeArrayListData $checkouts,
  18. public PagarmeArrayObjectData $metadata,
  19. public ?string $createdAt = null,
  20. public ?string $updatedAt = null,
  21. public ?string $closedAt = null,
  22. ) {}
  23. public static function fromArray(array $payload): self
  24. {
  25. return new self(
  26. id: $payload['id'] ?? null,
  27. code: $payload['code'] ?? null,
  28. amount: isset($payload['amount']) ? (int) $payload['amount'] : null,
  29. currency: $payload['currency'] ?? null,
  30. closed: $payload['closed'] ?? null,
  31. status: $payload['status'] ?? null,
  32. items: PagarmeArrayListData::fromArray($payload['items'] ?? []),
  33. customer: ! empty($payload['customer']) ? PagarmeArrayObjectData::fromArray($payload['customer']) : null,
  34. charges: PagarmeArrayListData::fromArray($payload['charges'] ?? []),
  35. checkouts: PagarmeArrayListData::fromArray($payload['checkouts'] ?? []),
  36. metadata: PagarmeArrayObjectData::fromArray($payload['metadata'] ?? []),
  37. createdAt: $payload['created_at'] ?? null,
  38. updatedAt: $payload['updated_at'] ?? null,
  39. closedAt: $payload['closed_at'] ?? null,
  40. );
  41. }
  42. public function id(): ?string
  43. {
  44. return $this->id;
  45. }
  46. public function toArray(): array
  47. {
  48. return [
  49. 'id' => $this->id,
  50. 'code' => $this->code,
  51. 'amount' => $this->amount,
  52. 'currency' => $this->currency,
  53. 'closed' => $this->closed,
  54. 'items' => $this->items->toArray(),
  55. 'customer' => $this->customer?->toArray(),
  56. 'status' => $this->status,
  57. 'created_at' => $this->createdAt,
  58. 'updated_at' => $this->updatedAt,
  59. 'closed_at' => $this->closedAt,
  60. 'charges' => $this->charges->toArray(),
  61. 'checkouts' => $this->checkouts->toArray(),
  62. 'metadata' => $this->metadata->toArray(),
  63. ];
  64. }
  65. }