ChargeData.php 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. <?php
  2. namespace App\Data\Pagarme\Order\Parts\Response;
  3. use App\Data\Pagarme\PagarmeResponseData;
  4. final readonly class ChargeData 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 ?string $expiresAt = null,
  14. public ?TransactionData $lastTransaction,
  15. ) {}
  16. public function transaction(): ?TransactionData
  17. {
  18. return $this->lastTransaction;
  19. }
  20. public static function fromArray(array $payload): static
  21. {
  22. $transaction = static::arrArray($payload, 'last_transaction');
  23. return new self(
  24. id: static::arrString($payload, 'id'),
  25. status: static::arrString($payload, 'status'),
  26. amount: static::arrInt($payload, 'amount'),
  27. currency: static::arrString($payload, 'currency'),
  28. paidAt: static::arrString($payload, 'paid_at'),
  29. createdAt: static::arrString($payload, 'created_at'),
  30. expiresAt: static::arrString($payload, 'expires_at'),
  31. lastTransaction: ! empty($transaction)
  32. ? TransactionData::fromArray($transaction)
  33. : null,
  34. );
  35. }
  36. public function toArray(): array
  37. {
  38. return array_filter([
  39. 'id' => $this->id,
  40. 'status' => $this->status,
  41. 'amount' => $this->amount,
  42. 'currency' => $this->currency,
  43. 'paid_at' => $this->paidAt,
  44. 'created_at' => $this->createdAt,
  45. 'expires_at' => $this->expiresAt,
  46. 'last_transaction' => $this->lastTransaction?->toArray(),
  47. ], static fn ($v) => $v !== null);
  48. }
  49. }