OrderChargeResponseData.php 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <?php
  2. namespace App\Data\Pagarme\Response\OrderResponseData\OrderChargeResponseData;
  3. use App\Data\Pagarme\PagarmeResponseData;
  4. final readonly class OrderChargeResponseData extends PagarmeResponseData
  5. {
  6. public function __construct(
  7. public ?string $id,
  8. public ?string $status,
  9. public ?int $amount,
  10. public ?string $currency,
  11. public ?string $paidAt,
  12. public ?string $createdAt,
  13. public ?OrderTransactionResponseData $lastTransaction,
  14. ) {}
  15. public function transaction(): ?OrderTransactionResponseData
  16. {
  17. return $this->lastTransaction;
  18. }
  19. public static function fromArray(array $payload): static
  20. {
  21. $transaction = static::arrArray($payload, 'last_transaction');
  22. return new self(
  23. id: static::arrString($payload, 'id'),
  24. status: static::arrString($payload, 'status'),
  25. amount: static::arrInt($payload, 'amount'),
  26. currency: static::arrString($payload, 'currency'),
  27. paidAt: static::arrString($payload, 'paid_at'),
  28. createdAt: static::arrString($payload, 'created_at'),
  29. lastTransaction: ! empty($transaction)
  30. ? OrderTransactionResponseData::fromArray($transaction)
  31. : null,
  32. );
  33. }
  34. public function toArray(): array
  35. {
  36. return array_filter([
  37. 'id' => $this->id,
  38. 'status' => $this->status,
  39. 'amount' => $this->amount,
  40. 'currency' => $this->currency,
  41. 'paid_at' => $this->paidAt,
  42. 'created_at' => $this->createdAt,
  43. 'last_transaction' => $this->lastTransaction?->toArray(),
  44. ], static fn ($v) => $v !== null);
  45. }
  46. }