PagarmeCardBillingAddressData.php 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. <?php
  2. namespace App\Data\Pagarme\Request\PagarmeCardRequestData;
  3. use App\Data\Pagarme\PagarmeData;
  4. use App\Models\Address;
  5. final readonly class PagarmeCardBillingAddressData extends PagarmeData
  6. {
  7. public function __construct(
  8. public string $line1,
  9. public ?string $line2,
  10. public string $zipCode,
  11. public string $city,
  12. public string $state,
  13. public string $country,
  14. ) {
  15. self::requireFilled($this->line1, 'billing_address.line_1');
  16. self::requireFilled($this->zipCode, 'billing_address.zip_code');
  17. self::requireFilled($this->city, 'billing_address.city');
  18. self::requireFilled($this->state, 'billing_address.state');
  19. self::requireFilled($this->country, 'billing_address.country');
  20. }
  21. public static function fromAddress(?Address $address): self
  22. {
  23. $state = $address?->state?->code ?? $address?->city?->state?->code;
  24. $city = $address?->city?->name;
  25. $line1 = implode(', ', array_filter([
  26. $address?->number ?: 'S/N',
  27. $address?->address,
  28. $address?->district,
  29. ]));
  30. return new self(
  31. line1: $line1,
  32. line2: $address?->complement ?: $address?->instructions,
  33. zipCode: self::digits($address?->zip_code),
  34. city: (string) $city,
  35. state: (string) $state,
  36. country: 'BR',
  37. );
  38. }
  39. public function toArray(): array
  40. {
  41. return $this->filterFilledRecursive([
  42. 'line_1' => $this->line1,
  43. 'line_2' => $this->line2,
  44. 'zip_code' => $this->zipCode,
  45. 'city' => $this->city,
  46. 'state' => $this->state,
  47. 'country' => $this->country,
  48. ]);
  49. }
  50. }