PagarmeCustomerRequestData.php 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <?php
  2. namespace App\Data\Pagarme\Request\PagarmeCustomerRequestData;
  3. use App\Data\Pagarme\PagarmeData;
  4. use App\Data\Pagarme\Request\PagarmeCustomerRequestData\PagarmeCustomerPhonesRequestData\PagarmeCustomerPhonesRequestData;
  5. final readonly class PagarmeCustomerRequestData extends PagarmeData
  6. {
  7. public function __construct(
  8. public string $name,
  9. public string $email,
  10. public string $document,
  11. public string $type,
  12. public string $documentType,
  13. public string $code,
  14. public ?PagarmeCustomerAddressRequestData $address = null,
  15. public ?PagarmeCustomerPhonesRequestData $phones = null,
  16. ) {
  17. self::requireFilled($this->name, 'name');
  18. self::requireFilled($this->email, 'email');
  19. self::requireFilled($this->document, 'document');
  20. self::requireIn($this->type, ['individual', 'company'], 'type');
  21. self::requireIn($this->documentType, ['CPF', 'CNPJ'], 'document_type');
  22. self::requireFilled($this->code, 'code');
  23. }
  24. public static function fromPayload(
  25. ?string $name,
  26. ?string $email,
  27. ?string $document,
  28. string $code,
  29. array $addressData = [],
  30. ?string $phone = null,
  31. ): self {
  32. $document = self::digits($document);
  33. return new self(
  34. name: $name ?: 'Cliente',
  35. email: (string) $email,
  36. document: $document,
  37. type: strlen($document) === 14 ? 'company' : 'individual',
  38. documentType: strlen($document) === 14 ? 'CNPJ' : 'CPF',
  39. code: $code,
  40. address: PagarmeCustomerAddressRequestData::fromPayload($addressData),
  41. phones: PagarmeCustomerPhonesRequestData::fromPhone($phone),
  42. );
  43. }
  44. public function toArray(): array
  45. {
  46. return $this->filterFilledRecursive([
  47. 'name' => $this->name,
  48. 'email' => $this->email,
  49. 'document' => $this->document,
  50. 'type' => $this->type,
  51. 'document_type' => $this->documentType,
  52. 'code' => $this->code,
  53. 'address' => $this->address,
  54. 'phones' => $this->phones,
  55. ]);
  56. }
  57. }