فهرست منبع

refactor: rmeove prefixo dos nomes das classes do pagarme

Gustavo Mantovani 1 هفته پیش
والد
کامیت
ee9876ba47
100فایلهای تغییر یافته به همراه2043 افزوده شده و 1599 حذف شده
  1. 22 22
      app/Data/Pagarme/PagarmeResponseData.php
  2. 1 1
      app/Data/Pagarme/Request/BankAccountUpdateRequestData.php
  3. 2 2
      app/Data/Pagarme/Request/CardRequestData/CardBillingAddressData.php
  4. 5 5
      app/Data/Pagarme/Request/CardRequestData/CardRequestData.php
  5. 2 2
      app/Data/Pagarme/Request/CustomerRequestData/CustomerAddressRequestData.php
  6. 2 2
      app/Data/Pagarme/Request/CustomerRequestData/CustomerPhonesRequestData/CustomerPhoneData.php
  7. 3 3
      app/Data/Pagarme/Request/CustomerRequestData/CustomerPhonesRequestData/CustomerPhonesRequestData.php
  8. 11 11
      app/Data/Pagarme/Request/CustomerRequestData/CustomerRequestData.php
  9. 2 2
      app/Data/Pagarme/Request/OrderRequestData/OrderItemData.php
  10. 2 2
      app/Data/Pagarme/Request/OrderRequestData/OrderPaymentData/OrderCreditCardData.php
  11. 13 11
      app/Data/Pagarme/Request/OrderRequestData/OrderPaymentData/OrderPaymentData.php
  12. 2 2
      app/Data/Pagarme/Request/OrderRequestData/OrderPaymentData/OrderPixAdditionalInformationData.php
  13. 4 3
      app/Data/Pagarme/Request/OrderRequestData/OrderPaymentData/OrderPixData.php
  14. 6 6
      app/Data/Pagarme/Request/OrderRequestData/OrderPaymentData/OrderSplitData.php
  15. 2 2
      app/Data/Pagarme/Request/OrderRequestData/OrderPaymentData/OrderSplitOptionsData.php
  16. 22 19
      app/Data/Pagarme/Request/OrderRequestData/OrderRequestData.php
  17. 0 17
      app/Data/Pagarme/Request/PagarmeRecipientRequestData/PagarmeRecipientRegisterInformationData/PagarmeRecipientPhoneNumbersData/PagarmeRecipientPhoneNumbersData.php
  18. 2 2
      app/Data/Pagarme/Request/RecipientRequestData/RecipientAutomaticAnticipationSettingsData.php
  19. 2 2
      app/Data/Pagarme/Request/RecipientRequestData/RecipientBankAccountData.php
  20. 2 2
      app/Data/Pagarme/Request/RecipientRequestData/RecipientRegisterInformationData/RecipientAddressData.php
  21. 2 2
      app/Data/Pagarme/Request/RecipientRequestData/RecipientRegisterInformationData/RecipientPhoneNumbersData/RecipientPhoneData.php
  22. 17 0
      app/Data/Pagarme/Request/RecipientRequestData/RecipientRegisterInformationData/RecipientPhoneNumbersData/RecipientPhoneNumbersData.php
  23. 11 12
      app/Data/Pagarme/Request/RecipientRequestData/RecipientRegisterInformationData/RecipientRegisterInformationData.php
  24. 7 7
      app/Data/Pagarme/Request/RecipientRequestData/RecipientRequestData.php
  25. 2 2
      app/Data/Pagarme/Request/RecipientRequestData/RecipientTransferSettingsData.php
  26. 1 1
      app/Data/Pagarme/Request/TransferRequestData.php
  27. 1 1
      app/Data/Pagarme/Response/CardResponseData.php
  28. 2 2
      app/Data/Pagarme/Response/CustomerResponseData/CustomerAddressResponseData.php
  29. 6 6
      app/Data/Pagarme/Response/CustomerResponseData/CustomerPhonesResponseData/CustomerPhonesResponseData.php
  30. 2 2
      app/Data/Pagarme/Response/CustomerResponseData/CustomerPhonesResponseData/PhoneResponseData.php
  31. 18 17
      app/Data/Pagarme/Response/CustomerResponseData/CustomerResponseData.php
  32. 11 11
      app/Data/Pagarme/Response/OrderResponseData/OrderChargeResponseData/OrderChargeResponseData.php
  33. 2 2
      app/Data/Pagarme/Response/OrderResponseData/OrderChargeResponseData/OrderTransactionResponseData.php
  34. 2 2
      app/Data/Pagarme/Response/OrderResponseData/OrderCheckoutResponseData.php
  35. 2 2
      app/Data/Pagarme/Response/OrderResponseData/OrderItemResponseData.php
  36. 33 31
      app/Data/Pagarme/Response/OrderResponseData/OrderResponseData.php
  37. 2 2
      app/Data/Pagarme/Response/RecipientResponseData/RecipientBankAccountResponseData.php
  38. 14 12
      app/Data/Pagarme/Response/RecipientResponseData/RecipientResponseData.php
  39. 1 1
      app/Data/Pagarme/Response/TransferResponseData.php
  40. 208 208
      app/Http/Controllers/AuthController.php
  41. 1 0
      app/Http/Controllers/ClientCalendarController.php
  42. 3 0
      app/Http/Controllers/DashboardController.php
  43. 1 0
      app/Http/Controllers/ProviderCalendarController.php
  44. 21 14
      app/Http/Controllers/ProviderController.php
  45. 1 0
      app/Http/Controllers/SearchController.php
  46. 3 3
      app/Http/Resources/CardsListResource.php
  47. 8 8
      app/Http/Resources/ClientResource.php
  48. 1 1
      app/Http/Resources/DashboardClienteResource.php
  49. 1 1
      app/Http/Resources/DashboardPrestadorResource.php
  50. 7 7
      app/Http/Resources/ProviderPaymentMethodResource.php
  51. 3 4
      app/Http/Resources/ProviderResource.php
  52. 1 1
      app/Http/Resources/ReviewResource.php
  53. 0 1
      app/Http/Resources/UserResource.php
  54. 33 8
      app/Notifications/Push/Cliente/Contextual/ContextualSegundaPush.php
  55. 33 8
      app/Notifications/Push/Cliente/Contextual/ContextualSextaPush.php
  56. 23 5
      app/Notifications/Push/Cliente/Contextual/ContextualVisitaPush.php
  57. 23 5
      app/Notifications/Push/Cliente/Educativo/Educativo1Push.php
  58. 23 5
      app/Notifications/Push/Cliente/Educativo/Educativo2Push.php
  59. 23 5
      app/Notifications/Push/Cliente/Educativo/Educativo3Push.php
  60. 23 5
      app/Notifications/Push/Cliente/Educativo/Educativo4Push.php
  61. 32 7
      app/Notifications/Push/Cliente/EducativoConversao/EducativoConversao1Push.php
  62. 32 7
      app/Notifications/Push/Cliente/EducativoConversao/EducativoConversao2Push.php
  63. 23 5
      app/Notifications/Push/Cliente/Marketing/Marketing1Push.php
  64. 23 5
      app/Notifications/Push/Cliente/Marketing/Marketing2Push.php
  65. 23 5
      app/Notifications/Push/Cliente/Marketing/Marketing3Push.php
  66. 23 5
      app/Notifications/Push/Cliente/Marketing/Marketing4Push.php
  67. 23 5
      app/Notifications/Push/Cliente/Motivacional/Motivacional1Push.php
  68. 23 5
      app/Notifications/Push/Cliente/Motivacional/Motivacional2Push.php
  69. 23 5
      app/Notifications/Push/Cliente/Motivacional/Motivacional3Push.php
  70. 23 5
      app/Notifications/Push/Cliente/Recorrencia/Recorrencia1Push.php
  71. 23 5
      app/Notifications/Push/Cliente/Recorrencia/Recorrencia2Push.php
  72. 23 5
      app/Notifications/Push/Cliente/Recorrencia/Recorrencia3Push.php
  73. 32 7
      app/Notifications/Push/Cliente/SocialProof/SocialProof1Push.php
  74. 32 7
      app/Notifications/Push/Cliente/SocialProof/SocialProof2Push.php
  75. 10 10
      app/Notifications/Push/Prestador/ReforcoEducativo/ReforcoEducativo1Push.php
  76. 238 231
      app/Services/AuthService.php
  77. 7 9
      app/Services/CustomScheduleService.php
  78. 21 21
      app/Services/DashboardService.php
  79. 1 1
      app/Services/DistanceService.php
  80. 1 1
      app/Services/MediaService.php
  81. 2 2
      app/Services/NotificationService.php
  82. 2 3
      app/Services/Pagarme/Concerns/SendsPagarmeRequests.php
  83. 6 6
      app/Services/Pagarme/PagarmeCardService.php
  84. 32 32
      app/Services/Pagarme/PagarmeCustomerService.php
  85. 270 47
      app/Services/Pagarme/PagarmePaymentService.php
  86. 65 65
      app/Services/Pagarme/PagarmeRecipientService.php
  87. 32 32
      app/Services/Pagarme/PagarmeTransferService.php
  88. 17 230
      app/Services/PaymentService.php
  89. 237 234
      app/Services/ProviderService.php
  90. 2 2
      app/Services/ProviderWithdrawalService.php
  91. 26 26
      app/Services/PushNotificationDispatcher.php
  92. 0 1
      app/Services/PushNotificationService.php
  93. 6 5
      app/Services/ReviewService.php
  94. 14 27
      app/Services/ScheduleService.php
  95. 0 1
      app/Services/SearchService.php
  96. 7 7
      app/Services/UserService.php
  97. 1 1
      app/Tasks/SendPushNotificationsTask.php
  98. 2 2
      app/Traits/RemoveArchiveS3.php
  99. 2 2
      app/Traits/UploadsFile.php
  100. 1 1
      config/firebase.php

+ 22 - 22
app/Data/Pagarme/PagarmeResponseData.php

@@ -10,16 +10,21 @@ abstract readonly class PagarmeResponseData
 
     //
 
-    protected static function arrArray(array $payload, string $key): array
+    protected static function arrGet(array $payload, int|string $key, mixed $default = null): mixed
     {
-        if (! array_key_exists($key, $payload) || ! is_array($payload[$key])) {
-            return [];
+        return array_key_exists($key, $payload) ? $payload[$key] : $default;
+    }
+
+    protected static function arrInt(array $payload, string $key): ?int
+    {
+        if (! array_key_exists($key, $payload)) {
+            return null;
         }
 
-        return $payload[$key];
+        return (int) $payload[$key];
     }
 
-    protected static function arrBool(array $payload, string $key): ?bool
+    protected static function arrString(array $payload, string $key): ?string
     {
         if (! array_key_exists($key, $payload)) {
             return null;
@@ -27,36 +32,31 @@ abstract readonly class PagarmeResponseData
 
         $value = $payload[$key];
 
-        return $value !== null && $value !== '' ? (bool) $value : null;
-    }
-
-    protected static function arrGet(array $payload, int|string $key, mixed $default = null): mixed
-    {
-        return array_key_exists($key, $payload) ? $payload[$key] : $default;
+        return $value !== null && $value !== '' ? (string) $value : null;
     }
 
-    protected static function arrInt(array $payload, string $key): ?int
+    protected static function arrBool(array $payload, string $key): ?bool
     {
         if (! array_key_exists($key, $payload)) {
             return null;
         }
 
-        return (int) $payload[$key];
-    }
+        $value = $payload[$key];
 
-    protected static function arrMap(array $payload, string $key, callable $fn): array
-    {
-        return array_map($fn, static::arrArray($payload, $key));
+        return $value !== null && $value !== '' ? (bool) $value : null;
     }
 
-    protected static function arrString(array $payload, string $key): ?string
+    protected static function arrArray(array $payload, string $key): array
     {
-        if (! array_key_exists($key, $payload)) {
-            return null;
+        if (! array_key_exists($key, $payload) || ! is_array($payload[$key])) {
+            return [];
         }
 
-        $value = $payload[$key];
+        return $payload[$key];
+    }
 
-        return $value !== null && $value !== '' ? (string) $value : null;
+    protected static function arrMap(array $payload, string $key, callable $fn): array
+    {
+        return array_map($fn, static::arrArray($payload, $key));
     }
 }

+ 1 - 1
app/Data/Pagarme/Request/PagarmeBankAccountUpdateRequestData.php → app/Data/Pagarme/Request/BankAccountUpdateRequestData.php

@@ -4,7 +4,7 @@ namespace App\Data\Pagarme\Request;
 
 use App\Data\Pagarme\PagarmeData;
 
-final readonly class PagarmeBankAccountUpdateRequestData extends PagarmeData
+final readonly class BankAccountUpdateRequestData extends PagarmeData
 {
     public function __construct(
         public string  $holderName,

+ 2 - 2
app/Data/Pagarme/Request/PagarmeCardRequestData/PagarmeCardBillingAddressData.php → app/Data/Pagarme/Request/CardRequestData/CardBillingAddressData.php

@@ -1,11 +1,11 @@
 <?php
 
-namespace App\Data\Pagarme\Request\PagarmeCardRequestData;
+namespace App\Data\Pagarme\Request\CardRequestData;
 
 use App\Data\Pagarme\PagarmeData;
 use App\Models\Address;
 
-final readonly class PagarmeCardBillingAddressData extends PagarmeData
+final readonly class CardBillingAddressData extends PagarmeData
 {
     public function __construct(
         public string  $line1,

+ 5 - 5
app/Data/Pagarme/Request/PagarmeCardRequestData/PagarmeCardRequestData.php → app/Data/Pagarme/Request/CardRequestData/CardRequestData.php

@@ -1,15 +1,15 @@
 <?php
 
-namespace App\Data\Pagarme\Request\PagarmeCardRequestData;
+namespace App\Data\Pagarme\Request\CardRequestData;
 
 use App\Data\Pagarme\PagarmeData;
 
-final readonly class PagarmeCardRequestData extends PagarmeData
+final readonly class CardRequestData extends PagarmeData
 {
     public function __construct(
-        public string                         $token,
-        public ?string                        $label          = null,
-        public ?PagarmeCardBillingAddressData $billingAddress = null,
+        public string  $token,
+        public ?string $label = null,
+        public ?CardBillingAddressData $billingAddress = null,
     ) {
         self::requireFilled($this->token, 'token');
     }

+ 2 - 2
app/Data/Pagarme/Request/PagarmeCustomerRequestData/PagarmeCustomerAddressRequestData.php → app/Data/Pagarme/Request/CustomerRequestData/CustomerAddressRequestData.php

@@ -1,10 +1,10 @@
 <?php
 
-namespace App\Data\Pagarme\Request\PagarmeCustomerRequestData;
+namespace App\Data\Pagarme\Request\CustomerRequestData;
 
 use App\Data\Pagarme\PagarmeData;
 
-final readonly class PagarmeCustomerAddressRequestData extends PagarmeData
+final readonly class CustomerAddressRequestData extends PagarmeData
 {
     public function __construct(
         public ?string $line1,

+ 2 - 2
app/Data/Pagarme/Request/PagarmeCustomerRequestData/PagarmeCustomerPhonesRequestData/PagarmeCustomerPhoneData.php → app/Data/Pagarme/Request/CustomerRequestData/CustomerPhonesRequestData/CustomerPhoneData.php

@@ -1,10 +1,10 @@
 <?php
 
-namespace App\Data\Pagarme\Request\PagarmeCustomerRequestData\PagarmeCustomerPhonesRequestData;
+namespace App\Data\Pagarme\Request\CustomerRequestData\CustomerPhonesRequestData;
 
 use App\Data\Pagarme\PagarmeData;
 
-final readonly class PagarmeCustomerPhoneData extends PagarmeData
+final readonly class CustomerPhoneData extends PagarmeData
 {
     public function __construct(
         public string $countryCode,

+ 3 - 3
app/Data/Pagarme/Request/PagarmeCustomerRequestData/PagarmeCustomerPhonesRequestData/PagarmeCustomerPhonesRequestData.php → app/Data/Pagarme/Request/CustomerRequestData/CustomerPhonesRequestData/CustomerPhonesRequestData.php

@@ -1,13 +1,13 @@
 <?php
 
-namespace App\Data\Pagarme\Request\PagarmeCustomerRequestData\PagarmeCustomerPhonesRequestData;
+namespace App\Data\Pagarme\Request\CustomerRequestData\CustomerPhonesRequestData;
 
 use App\Data\Pagarme\PagarmeData;
 
-final readonly class PagarmeCustomerPhonesRequestData extends PagarmeData
+final readonly class CustomerPhonesRequestData extends PagarmeData
 {
     public function __construct(
-        public ?PagarmeCustomerPhoneData $mobilePhone = null,
+        public ?CustomerPhoneData $mobilePhone = null,
     ) {}
 
     public function toArray(): array

+ 11 - 11
app/Data/Pagarme/Request/PagarmeCustomerRequestData/PagarmeCustomerRequestData.php → app/Data/Pagarme/Request/CustomerRequestData/CustomerRequestData.php

@@ -1,21 +1,21 @@
 <?php
 
-namespace App\Data\Pagarme\Request\PagarmeCustomerRequestData;
+namespace App\Data\Pagarme\Request\CustomerRequestData;
 
 use App\Data\Pagarme\PagarmeData;
-use App\Data\Pagarme\Request\PagarmeCustomerRequestData\PagarmeCustomerPhonesRequestData\PagarmeCustomerPhonesRequestData;
+use App\Data\Pagarme\Request\CustomerRequestData\CustomerPhonesRequestData\CustomerPhonesRequestData;
 
-final readonly class PagarmeCustomerRequestData extends PagarmeData
+final readonly class CustomerRequestData extends PagarmeData
 {
     public function __construct(
-        public string                             $name,
-        public string                             $email,
-        public string                             $document,
-        public string                             $type,
-        public string                             $documentType,
-        public string                             $code,
-        public ?PagarmeCustomerAddressRequestData $address = null,
-        public ?PagarmeCustomerPhonesRequestData  $phones  = null,
+        public string $name,
+        public string $email,
+        public string $document,
+        public string $type,
+        public string $documentType,
+        public string $code,
+        public ?CustomerAddressRequestData $address = null,
+        public ?CustomerPhonesRequestData  $phones  = null,
     ) {
         self::requireFilled($this->name, 'name');
         self::requireFilled($this->email, 'email');

+ 2 - 2
app/Data/Pagarme/Request/PagarmeOrderRequestData/PagarmeOrderItemData.php → app/Data/Pagarme/Request/OrderRequestData/OrderItemData.php

@@ -1,10 +1,10 @@
 <?php
 
-namespace App\Data\Pagarme\Request\PagarmeOrderRequestData;
+namespace App\Data\Pagarme\Request\OrderRequestData;
 
 use App\Data\Pagarme\PagarmeData;
 
-final readonly class PagarmeOrderItemData extends PagarmeData
+final readonly class OrderItemData extends PagarmeData
 {
     public function __construct(
         public string  $code,

+ 2 - 2
app/Data/Pagarme/Request/PagarmeOrderRequestData/PagarmeOrderPaymentData/PagarmeOrderCreditCardData.php → app/Data/Pagarme/Request/OrderRequestData/OrderPaymentData/OrderCreditCardData.php

@@ -1,10 +1,10 @@
 <?php
 
-namespace App\Data\Pagarme\Request\PagarmeOrderRequestData\PagarmeOrderPaymentData;
+namespace App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData;
 
 use App\Data\Pagarme\PagarmeData;
 
-final readonly class PagarmeOrderCreditCardData extends PagarmeData
+final readonly class OrderCreditCardData extends PagarmeData
 {
     public function __construct(
         public string  $cardId,

+ 13 - 11
app/Data/Pagarme/Request/PagarmeOrderRequestData/PagarmeOrderPaymentData/PagarmeOrderPaymentData.php → app/Data/Pagarme/Request/OrderRequestData/OrderPaymentData/OrderPaymentData.php

@@ -1,19 +1,19 @@
 <?php
 
-namespace App\Data\Pagarme\Request\PagarmeOrderRequestData\PagarmeOrderPaymentData;
+namespace App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData;
 
 use App\Data\Pagarme\PagarmeData;
 
-final readonly class PagarmeOrderPaymentData extends PagarmeData
+final readonly class OrderPaymentData extends PagarmeData
 {
     /**
-     * @param  PagarmeOrderSplitData[]|null  $split
+     * @param  OrderSplitData[]|null  $split
      */
+
     public function __construct(
-        public string                      $paymentMethod,
-        public ?PagarmeOrderCreditCardData $creditCard = null,
-        public ?PagarmeOrderPixData        $pix        = null,
-        public ?array                      $split      = null,
+        public string $paymentMethod,
+        public ?OrderCreditCardData $creditCard = null, public ?OrderPixData $pix = null,
+        public ?array $split = null,
     ) {
         self::requireIn($this->paymentMethod, ['credit_card', 'pix'], 'payments.payment_method');
 
@@ -27,9 +27,10 @@ final readonly class PagarmeOrderPaymentData extends PagarmeData
     }
 
     /**
-     * @param  PagarmeOrderSplitData[]|null  $split
+     * @param  OrderSplitData[]|null  $split
      */
-    public static function creditCard(PagarmeOrderCreditCardData $creditCard, ?array $split = null): self
+
+    public static function creditCard(OrderCreditCardData $creditCard, ?array $split = null): self
     {
         return new self(
             paymentMethod: 'credit_card',
@@ -39,9 +40,10 @@ final readonly class PagarmeOrderPaymentData extends PagarmeData
     }
 
     /**
-     * @param  PagarmeOrderSplitData[]|null  $split
+     * @param  OrderSplitData[]|null  $split
      */
-    public static function pix(PagarmeOrderPixData $pix, ?array $split = null): self
+
+    public static function pix(OrderPixData $pix, ?array $split = null): self
     {
         return new self(
             paymentMethod: 'pix',

+ 2 - 2
app/Data/Pagarme/Request/PagarmeOrderRequestData/PagarmeOrderPaymentData/PagarmeOrderPixAdditionalInformationData.php → app/Data/Pagarme/Request/OrderRequestData/OrderPaymentData/OrderPixAdditionalInformationData.php

@@ -1,10 +1,10 @@
 <?php
 
-namespace App\Data\Pagarme\Request\PagarmeOrderRequestData\PagarmeOrderPaymentData;
+namespace App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData;
 
 use App\Data\Pagarme\PagarmeData;
 
-final readonly class PagarmeOrderPixAdditionalInformationData extends PagarmeData
+final readonly class OrderPixAdditionalInformationData extends PagarmeData
 {
     public function __construct(
         public string $name,

+ 4 - 3
app/Data/Pagarme/Request/PagarmeOrderRequestData/PagarmeOrderPaymentData/PagarmeOrderPixData.php → app/Data/Pagarme/Request/OrderRequestData/OrderPaymentData/OrderPixData.php

@@ -1,14 +1,15 @@
 <?php
 
-namespace App\Data\Pagarme\Request\PagarmeOrderRequestData\PagarmeOrderPaymentData;
+namespace App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData;
 
 use App\Data\Pagarme\PagarmeData;
 
-final readonly class PagarmeOrderPixData extends PagarmeData
+final readonly class OrderPixData extends PagarmeData
 {
     /**
-     * @param  PagarmeOrderPixAdditionalInformationData[]|null  $additionalInformation
+     * @param  OrderPixAdditionalInformationData[]|null  $additionalInformation
      */
+
     public function __construct(
         public ?int   $expiresIn             = null,
         public ?array $additionalInformation = null,

+ 6 - 6
app/Data/Pagarme/Request/PagarmeOrderRequestData/PagarmeOrderPaymentData/PagarmeOrderSplitData.php → app/Data/Pagarme/Request/OrderRequestData/OrderPaymentData/OrderSplitData.php

@@ -1,16 +1,16 @@
 <?php
 
-namespace App\Data\Pagarme\Request\PagarmeOrderRequestData\PagarmeOrderPaymentData;
+namespace App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData;
 
 use App\Data\Pagarme\PagarmeData;
 
-final readonly class PagarmeOrderSplitData extends PagarmeData
+final readonly class OrderSplitData extends PagarmeData
 {
     public function __construct(
-        public int                           $amount,
-        public string                        $recipientId,
-        public string                        $type    = 'flat',
-        public ?PagarmeOrderSplitOptionsData $options = null,
+        public int    $amount,
+        public string $recipientId,
+        public string $type = 'flat',
+        public ?OrderSplitOptionsData $options = null,
     ) {
         self::requirePositiveInt($this->amount, 'split.amount');
         self::requireFilled($this->recipientId, 'split.recipient_id');

+ 2 - 2
app/Data/Pagarme/Request/PagarmeOrderRequestData/PagarmeOrderPaymentData/PagarmeOrderSplitOptionsData.php → app/Data/Pagarme/Request/OrderRequestData/OrderPaymentData/OrderSplitOptionsData.php

@@ -1,10 +1,10 @@
 <?php
 
-namespace App\Data\Pagarme\Request\PagarmeOrderRequestData\PagarmeOrderPaymentData;
+namespace App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData;
 
 use App\Data\Pagarme\PagarmeData;
 
-final readonly class PagarmeOrderSplitOptionsData extends PagarmeData
+final readonly class OrderSplitOptionsData extends PagarmeData
 {
     public function __construct(
         public bool $chargeProcessingFee = false,

+ 22 - 19
app/Data/Pagarme/Request/PagarmeOrderRequestData/PagarmeOrderRequestData.php → app/Data/Pagarme/Request/OrderRequestData/OrderRequestData.php

@@ -1,22 +1,22 @@
 <?php
 
-namespace App\Data\Pagarme\Request\PagarmeOrderRequestData;
+namespace App\Data\Pagarme\Request\OrderRequestData;
 
 use App\Data\Pagarme\PagarmeData;
-use App\Data\Pagarme\Request\PagarmeCustomerRequestData\PagarmeCustomerRequestData as CustomerData;
-use App\Data\Pagarme\Request\PagarmeOrderRequestData\PagarmeOrderPaymentData\PagarmeOrderCreditCardData;
-use App\Data\Pagarme\Request\PagarmeOrderRequestData\PagarmeOrderPaymentData\PagarmeOrderPaymentData;
-use App\Data\Pagarme\Request\PagarmeOrderRequestData\PagarmeOrderPaymentData\PagarmeOrderPixData;
-use App\Data\Pagarme\Request\PagarmeOrderRequestData\PagarmeOrderPaymentData\PagarmeOrderSplitData;
-use App\Data\Pagarme\Request\PagarmeOrderRequestData\PagarmeOrderPaymentData\PagarmeOrderSplitOptionsData;
+use App\Data\Pagarme\Request\CustomerRequestData\CustomerRequestData as CustomerData;
+use App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData\OrderCreditCardData;
+use App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData\OrderPaymentData;
+use App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData\OrderPixData;
+use App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData\OrderSplitData;
+use App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData\OrderSplitOptionsData;
 use App\Models\PaymentSplit;
 use Illuminate\Support\Collection;
 
-final readonly class PagarmeOrderRequestData extends PagarmeData
+final readonly class OrderRequestData extends PagarmeData
 {
     /**
-     * @param  PagarmeOrderItemData[]  $items
-     * @param  PagarmeOrderPaymentData[]  $payments
+     * @param  OrderItemData[]  $items
+     * @param  OrderPaymentData[]  $payments
      */
     public function __construct(
         public string  $code,
@@ -52,36 +52,39 @@ final readonly class PagarmeOrderRequestData extends PagarmeData
     }
 
     /**
-     * @param  PagarmeOrderSplitData[]|null  $split
+     * @param  OrderSplitData[]|null  $split
      */
-    public static function creditCardPaymentMethod(PagarmeOrderCreditCardData $creditCard, ?array $split = null): PagarmeOrderPaymentData
+
+    public static function creditCardPaymentMethod(OrderCreditCardData $creditCard, ?array $split = null): OrderPaymentData
     {
-        return PagarmeOrderPaymentData::creditCard($creditCard, $split);
+        return OrderPaymentData::creditCard($creditCard, $split);
     }
 
     /**
-     * @param  PagarmeOrderSplitData[]|null  $split
+     * @param  OrderSplitData[]|null  $split
      */
-    public static function pixPaymentMethod(PagarmeOrderPixData $pix, ?array $split = null): PagarmeOrderPaymentData
+
+    public static function pixPaymentMethod(OrderPixData $pix, ?array $split = null): OrderPaymentData
     {
-        return PagarmeOrderPaymentData::pix($pix, $split);
+        return OrderPaymentData::pix($pix, $split);
     }
 
     /**
      * @param  Collection<PaymentSplit>  $transfers
-     * @return PagarmeOrderSplitData[]
+     * @return OrderSplitData[]
      */
+
     public static function splitFromTransfers(Collection $transfers): array
     {
         return $transfers
             ->filter(fn (PaymentSplit $split) => ! empty($split->gateway_transfer_target_reference))
             ->map(function (PaymentSplit $split) {
-                return new PagarmeOrderSplitData(
+                return new OrderSplitData(
                     amount:      self::amountInCents((float) $split->gross_amount),
                     recipientId: $split->gateway_transfer_target_reference,
                     type:        'flat',
 
-                    options: new PagarmeOrderSplitOptionsData(
+                    options: new OrderSplitOptionsData(
                         chargeProcessingFee: false,
                         chargeRemainderFee:  false,
                         liable:              false,

+ 0 - 17
app/Data/Pagarme/Request/PagarmeRecipientRequestData/PagarmeRecipientRegisterInformationData/PagarmeRecipientPhoneNumbersData/PagarmeRecipientPhoneNumbersData.php

@@ -1,17 +0,0 @@
-<?php
-
-namespace App\Data\Pagarme\Request\PagarmeRecipientRequestData\PagarmeRecipientRegisterInformationData\PagarmeRecipientPhoneNumbersData;
-
-use App\Data\Pagarme\PagarmeData;
-
-final readonly class PagarmeRecipientPhoneNumbersData extends PagarmeData
-{
-    public function __construct(
-        public PagarmeRecipientPhoneData $phone,
-    ) {}
-
-    public function toArray(): array
-    {
-        return [$this->phone->toArray()];
-    }
-}

+ 2 - 2
app/Data/Pagarme/Request/PagarmeRecipientRequestData/PagarmeRecipientAutomaticAnticipationSettingsData.php → app/Data/Pagarme/Request/RecipientRequestData/RecipientAutomaticAnticipationSettingsData.php

@@ -1,10 +1,10 @@
 <?php
 
-namespace App\Data\Pagarme\Request\PagarmeRecipientRequestData;
+namespace App\Data\Pagarme\Request\RecipientRequestData;
 
 use App\Data\Pagarme\PagarmeData;
 
-final readonly class PagarmeRecipientAutomaticAnticipationSettingsData extends PagarmeData
+final readonly class RecipientAutomaticAnticipationSettingsData extends PagarmeData
 {
     public function __construct(
         public bool $enabled,

+ 2 - 2
app/Data/Pagarme/Request/PagarmeRecipientRequestData/PagarmeRecipientBankAccountData.php → app/Data/Pagarme/Request/RecipientRequestData/RecipientBankAccountData.php

@@ -1,10 +1,10 @@
 <?php
 
-namespace App\Data\Pagarme\Request\PagarmeRecipientRequestData;
+namespace App\Data\Pagarme\Request\RecipientRequestData;
 
 use App\Data\Pagarme\PagarmeData;
 
-final readonly class PagarmeRecipientBankAccountData extends PagarmeData
+final readonly class RecipientBankAccountData extends PagarmeData
 {
     public function __construct(
         public string  $holderName,

+ 2 - 2
app/Data/Pagarme/Request/PagarmeRecipientRequestData/PagarmeRecipientRegisterInformationData/PagarmeRecipientAddressData.php → app/Data/Pagarme/Request/RecipientRequestData/RecipientRegisterInformationData/RecipientAddressData.php

@@ -1,10 +1,10 @@
 <?php
 
-namespace App\Data\Pagarme\Request\PagarmeRecipientRequestData\PagarmeRecipientRegisterInformationData;
+namespace App\Data\Pagarme\Request\RecipientRequestData\RecipientRegisterInformationData;
 
 use App\Data\Pagarme\PagarmeData;
 
-final readonly class PagarmeRecipientAddressData extends PagarmeData
+final readonly class RecipientAddressData extends PagarmeData
 {
     public function __construct(
         public string  $street,

+ 2 - 2
app/Data/Pagarme/Request/PagarmeRecipientRequestData/PagarmeRecipientRegisterInformationData/PagarmeRecipientPhoneNumbersData/PagarmeRecipientPhoneData.php → app/Data/Pagarme/Request/RecipientRequestData/RecipientRegisterInformationData/RecipientPhoneNumbersData/RecipientPhoneData.php

@@ -1,10 +1,10 @@
 <?php
 
-namespace App\Data\Pagarme\Request\PagarmeRecipientRequestData\PagarmeRecipientRegisterInformationData\PagarmeRecipientPhoneNumbersData;
+namespace App\Data\Pagarme\Request\RecipientRequestData\RecipientRegisterInformationData\RecipientPhoneNumbersData;
 
 use App\Data\Pagarme\PagarmeData;
 
-final readonly class PagarmeRecipientPhoneData extends PagarmeData
+final readonly class RecipientPhoneData extends PagarmeData
 {
     public function __construct(
         public string $ddd,

+ 17 - 0
app/Data/Pagarme/Request/RecipientRequestData/RecipientRegisterInformationData/RecipientPhoneNumbersData/RecipientPhoneNumbersData.php

@@ -0,0 +1,17 @@
+<?php
+
+namespace App\Data\Pagarme\Request\RecipientRequestData\RecipientRegisterInformationData\RecipientPhoneNumbersData;
+
+use App\Data\Pagarme\PagarmeData;
+
+final readonly class RecipientPhoneNumbersData extends PagarmeData
+{
+    public function __construct(
+        public RecipientPhoneData $phone,
+    ) {}
+
+    public function toArray(): array
+    {
+        return [$this->phone->toArray()];
+    }
+}

+ 11 - 12
app/Data/Pagarme/Request/PagarmeRecipientRequestData/PagarmeRecipientRegisterInformationData/PagarmeRecipientRegisterInformationData.php → app/Data/Pagarme/Request/RecipientRequestData/RecipientRegisterInformationData/RecipientRegisterInformationData.php

@@ -1,22 +1,21 @@
 <?php
 
-namespace App\Data\Pagarme\Request\PagarmeRecipientRequestData\PagarmeRecipientRegisterInformationData;
+namespace App\Data\Pagarme\Request\RecipientRequestData\RecipientRegisterInformationData;
 
 use App\Data\Pagarme\PagarmeData;
-use App\Data\Pagarme\Request\PagarmeRecipientRequestData\PagarmeRecipientRegisterInformationData\PagarmeRecipientPhoneNumbersData\PagarmeRecipientPhoneNumbersData;
+use App\Data\Pagarme\Request\RecipientRequestData\RecipientRegisterInformationData\RecipientPhoneNumbersData\RecipientPhoneNumbersData;
 
-final readonly class PagarmeRecipientRegisterInformationData extends PagarmeData
+final readonly class RecipientRegisterInformationData extends PagarmeData
 {
     public function __construct(
-        public string                           $name,
-        public string                           $email,
-        public string                           $document,
-        public string                           $type,
-        public ?string                          $birthdate,
-        public int                              $monthlyIncome,
-        public string                           $professionalOccupation,
-        public PagarmeRecipientPhoneNumbersData $phoneNumbers,
-        public PagarmeRecipientAddressData      $address,
+        public string  $name,
+        public string  $email,
+        public string  $document,
+        public string  $type,
+        public ?string $birthdate,
+        public int     $monthlyIncome,
+        public string  $professionalOccupation,
+        public RecipientPhoneNumbersData $phoneNumbers, public RecipientAddressData $address,
     ) {
         self::requireFilled($this->name, 'register_information.name');
         self::requireFilled($this->email, 'register_information.email');

+ 7 - 7
app/Data/Pagarme/Request/PagarmeRecipientRequestData/PagarmeRecipientRequestData.php → app/Data/Pagarme/Request/RecipientRequestData/RecipientRequestData.php

@@ -1,17 +1,17 @@
 <?php
 
-namespace App\Data\Pagarme\Request\PagarmeRecipientRequestData;
+namespace App\Data\Pagarme\Request\RecipientRequestData;
 
 use App\Data\Pagarme\PagarmeData;
 
-final readonly class PagarmeRecipientRequestData extends PagarmeData
+final readonly class RecipientRequestData extends PagarmeData
 {
     public function __construct(
-        public string                                            $code,
-        public PagarmeRecipientRegisterInformationData           $registerInformation,
-        public PagarmeRecipientBankAccountData                   $defaultBankAccount,
-        public PagarmeRecipientTransferSettingsData              $transferSettings,
-        public PagarmeRecipientAutomaticAnticipationSettingsData $automaticAnticipationSettings,
+        public string $code,
+        public RecipientRegisterInformationData $registerInformation,
+        public RecipientBankAccountData         $defaultBankAccount,
+        public RecipientTransferSettingsData    $transferSettings,
+        public RecipientAutomaticAnticipationSettingsData $automaticAnticipationSettings,
     ) {
         self::requireFilled($this->code, 'code');
     }

+ 2 - 2
app/Data/Pagarme/Request/PagarmeRecipientRequestData/PagarmeRecipientTransferSettingsData.php → app/Data/Pagarme/Request/RecipientRequestData/RecipientTransferSettingsData.php

@@ -1,10 +1,10 @@
 <?php
 
-namespace App\Data\Pagarme\Request\PagarmeRecipientRequestData;
+namespace App\Data\Pagarme\Request\RecipientRequestData;
 
 use App\Data\Pagarme\PagarmeData;
 
-final readonly class PagarmeRecipientTransferSettingsData extends PagarmeData
+final readonly class RecipientTransferSettingsData extends PagarmeData
 {
     public function __construct(
         public bool   $transferEnabled,

+ 1 - 1
app/Data/Pagarme/Request/PagarmeTransferRequestData.php → app/Data/Pagarme/Request/TransferRequestData.php

@@ -4,7 +4,7 @@ namespace App\Data\Pagarme\Request;
 
 use App\Data\Pagarme\PagarmeData;
 
-final readonly class PagarmeTransferRequestData extends PagarmeData
+final readonly class TransferRequestData extends PagarmeData
 {
     public function __construct(
         public int    $amount,

+ 1 - 1
app/Data/Pagarme/Response/PagarmeCardResponseData.php → app/Data/Pagarme/Response/CardResponseData.php

@@ -2,7 +2,7 @@
 
 namespace App\Data\Pagarme\Response;
 
-final readonly class PagarmeCardResponseData extends PagarmeResponseData
+final readonly class CardResponseData extends PagarmeResponseData
 {
     public function __construct(
         public ?string $id,

+ 2 - 2
app/Data/Pagarme/Response/PagarmeCustomerResponseData/PagarmeCustomerAddressResponseData.php → app/Data/Pagarme/Response/CustomerResponseData/CustomerAddressResponseData.php

@@ -1,10 +1,10 @@
 <?php
 
-namespace App\Data\Pagarme\Response\PagarmeCustomerResponseData;
+namespace App\Data\Pagarme\Response\CustomerResponseData;
 
 use App\Data\Pagarme\PagarmeResponseData;
 
-final readonly class PagarmeCustomerAddressResponseData extends PagarmeResponseData
+final readonly class CustomerAddressResponseData extends PagarmeResponseData
 {
     public function __construct(
         public ?string $id,

+ 6 - 6
app/Data/Pagarme/Response/PagarmeCustomerResponseData/PagarmeCustomerPhonesResponseData/PagarmeCustomerPhonesResponseData.php → app/Data/Pagarme/Response/CustomerResponseData/CustomerPhonesResponseData/CustomerPhonesResponseData.php

@@ -1,14 +1,14 @@
 <?php
 
-namespace App\Data\Pagarme\Response\PagarmeCustomerResponseData\PagarmeCustomerPhonesResponseData;
+namespace App\Data\Pagarme\Response\CustomerResponseData\CustomerPhonesResponseData;
 
 use App\Data\Pagarme\PagarmeResponseData;
 
-final readonly class PagarmeCustomerPhonesResponseData extends PagarmeResponseData
+final readonly class CustomerPhonesResponseData extends PagarmeResponseData
 {
     public function __construct(
-        public ?PagarmePhoneResponseData $homePhone,
-        public ?PagarmePhoneResponseData $mobilePhone,
+        public ?PhoneResponseData $homePhone,
+        public ?PhoneResponseData $mobilePhone,
     ) {}
 
     public static function fromArray(array $payload): static
@@ -17,8 +17,8 @@ final readonly class PagarmeCustomerPhonesResponseData extends PagarmeResponseDa
         $mobile = static::arrArray($payload, 'mobile_phone');
 
         return new self(
-            homePhone:   ! empty($home)   ? PagarmePhoneResponseData::fromArray($home)   : null,
-            mobilePhone: ! empty($mobile) ? PagarmePhoneResponseData::fromArray($mobile) : null,
+            homePhone:   ! empty($home)   ? PhoneResponseData::fromArray($home)   : null,
+            mobilePhone: ! empty($mobile) ? PhoneResponseData::fromArray($mobile) : null,
         );
     }
 

+ 2 - 2
app/Data/Pagarme/Response/PagarmeCustomerResponseData/PagarmeCustomerPhonesResponseData/PagarmePhoneResponseData.php → app/Data/Pagarme/Response/CustomerResponseData/CustomerPhonesResponseData/PhoneResponseData.php

@@ -1,10 +1,10 @@
 <?php
 
-namespace App\Data\Pagarme\Response\PagarmeCustomerResponseData\PagarmeCustomerPhonesResponseData;
+namespace App\Data\Pagarme\Response\CustomerResponseData\CustomerPhonesResponseData;
 
 use App\Data\Pagarme\PagarmeResponseData;
 
-final readonly class PagarmePhoneResponseData extends PagarmeResponseData
+final readonly class PhoneResponseData extends PagarmeResponseData
 {
     public function __construct(
         public ?string $countryCode,

+ 18 - 17
app/Data/Pagarme/Response/PagarmeCustomerResponseData/PagarmeCustomerResponseData.php → app/Data/Pagarme/Response/CustomerResponseData/CustomerResponseData.php

@@ -1,25 +1,26 @@
 <?php
 
-namespace App\Data\Pagarme\Response\PagarmeCustomerResponseData;
+namespace App\Data\Pagarme\Response\CustomerResponseData;
 
-use App\Data\Pagarme\Response\PagarmeCustomerResponseData\PagarmeCustomerPhonesResponseData\PagarmeCustomerPhonesResponseData;
+use App\Data\Pagarme\Response\CustomerResponseData\CustomerPhonesResponseData\CustomerPhonesResponseData;
 use App\Data\Pagarme\PagarmeResponseData;
 
-final readonly class PagarmeCustomerResponseData extends PagarmeResponseData
+final readonly class CustomerResponseData extends PagarmeResponseData
 {
     public function __construct(
-        public ?string                             $id,
-        public ?string                             $name,
-        public ?string                             $email,
-        public ?string                             $code,
-        public ?string                             $document,
-        public ?string                             $documentType,
-        public ?string                             $type,
-        public ?bool                               $delinquent,
-        public ?PagarmeCustomerAddressResponseData $address,
-        public PagarmeCustomerPhonesResponseData   $phones,
-        public ?string                             $createdAt = null,
-        public ?string                             $updatedAt = null,
+        public ?string $id,
+        public ?string $name,
+        public ?string $email,
+        public ?string $code,
+        public ?string $document,
+        public ?string $documentType,
+        public ?string $type,
+        public ?bool   $delinquent,
+
+        public ?CustomerAddressResponseData $address, public CustomerPhonesResponseData $phones,
+
+        public ?string $createdAt = null,
+        public ?string $updatedAt = null,
     ) {}
 
     public function requireId(): string
@@ -48,9 +49,9 @@ final readonly class PagarmeCustomerResponseData extends PagarmeResponseData
             type:         static::arrString($payload, 'type'),
             delinquent:   static::arrBool($payload, 'delinquent'),
 
-            address: ! empty($address) ? PagarmeCustomerAddressResponseData::fromArray($address) : null,
+            address: ! empty($address) ? CustomerAddressResponseData::fromArray($address) : null,
 
-            phones:    PagarmeCustomerPhonesResponseData::fromArray($phones),
+            phones:    CustomerPhonesResponseData::fromArray($phones),
             createdAt: static::arrString($payload, 'created_at'),
             updatedAt: static::arrString($payload, 'updated_at'),
         );

+ 11 - 11
app/Data/Pagarme/Response/PagarmeOrderResponseData/PagarmeOrderChargeResponseData/PagarmeOrderChargeResponseData.php → app/Data/Pagarme/Response/OrderResponseData/OrderChargeResponseData/OrderChargeResponseData.php

@@ -1,22 +1,22 @@
 <?php
 
-namespace App\Data\Pagarme\Response\PagarmeOrderResponseData\PagarmeOrderChargeResponseData;
+namespace App\Data\Pagarme\Response\OrderResponseData\OrderChargeResponseData;
 
 use App\Data\Pagarme\PagarmeResponseData;
 
-final readonly class PagarmeOrderChargeResponseData extends PagarmeResponseData
+final readonly class OrderChargeResponseData extends PagarmeResponseData
 {
     public function __construct(
-        public ?string                            $id,
-        public ?string                            $status,
-        public ?int                               $amount,
-        public ?string                            $currency,
-        public ?string                            $paidAt,
-        public ?string                            $createdAt,
-        public ?PagarmeOrderTransactionResponseData $lastTransaction,
+        public ?string $id,
+        public ?string $status,
+        public ?int    $amount,
+        public ?string $currency,
+        public ?string $paidAt,
+        public ?string $createdAt,
+        public ?OrderTransactionResponseData $lastTransaction,
     ) {}
 
-    public function transaction(): ?PagarmeOrderTransactionResponseData
+    public function transaction(): ?OrderTransactionResponseData
     {
         return $this->lastTransaction;
     }
@@ -34,7 +34,7 @@ final readonly class PagarmeOrderChargeResponseData extends PagarmeResponseData
             createdAt: static::arrString($payload, 'created_at'),
 
             lastTransaction: ! empty($transaction)
-                ? PagarmeOrderTransactionResponseData::fromArray($transaction)
+                ? OrderTransactionResponseData::fromArray($transaction)
                 : null,
         );
     }

+ 2 - 2
app/Data/Pagarme/Response/PagarmeOrderResponseData/PagarmeOrderChargeResponseData/PagarmeOrderTransactionResponseData.php → app/Data/Pagarme/Response/OrderResponseData/OrderChargeResponseData/OrderTransactionResponseData.php

@@ -1,10 +1,10 @@
 <?php
 
-namespace App\Data\Pagarme\Response\PagarmeOrderResponseData\PagarmeOrderChargeResponseData;
+namespace App\Data\Pagarme\Response\OrderResponseData\OrderChargeResponseData;
 
 use App\Data\Pagarme\PagarmeResponseData;
 
-final readonly class PagarmeOrderTransactionResponseData extends PagarmeResponseData
+final readonly class OrderTransactionResponseData extends PagarmeResponseData
 {
     public function __construct(
         public ?string $id,

+ 2 - 2
app/Data/Pagarme/Response/PagarmeOrderResponseData/PagarmeOrderCheckoutResponseData.php → app/Data/Pagarme/Response/OrderResponseData/OrderCheckoutResponseData.php

@@ -1,10 +1,10 @@
 <?php
 
-namespace App\Data\Pagarme\Response\PagarmeOrderResponseData;
+namespace App\Data\Pagarme\Response\OrderResponseData;
 
 use App\Data\Pagarme\PagarmeResponseData;
 
-final readonly class PagarmeOrderCheckoutResponseData extends PagarmeResponseData
+final readonly class OrderCheckoutResponseData extends PagarmeResponseData
 {
     public function __construct(
         public ?string $id,

+ 2 - 2
app/Data/Pagarme/Response/PagarmeOrderResponseData/PagarmeOrderItemResponseData.php → app/Data/Pagarme/Response/OrderResponseData/OrderItemResponseData.php

@@ -1,10 +1,10 @@
 <?php
 
-namespace App\Data\Pagarme\Response\PagarmeOrderResponseData;
+namespace App\Data\Pagarme\Response\OrderResponseData;
 
 use App\Data\Pagarme\PagarmeResponseData;
 
-final readonly class PagarmeOrderItemResponseData extends PagarmeResponseData
+final readonly class OrderItemResponseData extends PagarmeResponseData
 {
     public function __construct(
         public ?string $id,

+ 33 - 31
app/Data/Pagarme/Response/PagarmeOrderResponseData/PagarmeOrderResponseData.php → app/Data/Pagarme/Response/OrderResponseData/OrderResponseData.php

@@ -1,35 +1,37 @@
 <?php
 
-namespace App\Data\Pagarme\Response\PagarmeOrderResponseData;
+namespace App\Data\Pagarme\Response\OrderResponseData;
 
-use App\Data\Pagarme\Response\PagarmeCustomerResponseData\PagarmeCustomerResponseData;
-use App\Data\Pagarme\Response\PagarmeOrderResponseData\PagarmeOrderChargeResponseData\PagarmeOrderChargeResponseData;
-use App\Data\Pagarme\Response\PagarmeOrderResponseData\PagarmeOrderChargeResponseData\PagarmeOrderTransactionResponseData;
+use App\Data\Pagarme\Response\CustomerResponseData\CustomerResponseData;
+use App\Data\Pagarme\Response\OrderResponseData\OrderChargeResponseData\OrderChargeResponseData;
+use App\Data\Pagarme\Response\OrderResponseData\OrderChargeResponseData\OrderTransactionResponseData;
 use App\Data\Pagarme\PagarmeResponseData;
 use App\Enums\PaymentStatusEnum;
 
 /**
- * @param  PagarmeOrderItemResponseData[]  $items
- * @param  PagarmeOrderChargeResponseData[]  $charges
- * @param  PagarmeOrderCheckoutResponseData[]  $checkouts
+ * @param  OrderItemResponseData[]  $items
+ * @param  OrderChargeResponseData[]  $charges
+ * @param  OrderCheckoutResponseData[]  $checkouts
  */
-final readonly class PagarmeOrderResponseData extends PagarmeResponseData
+final readonly class OrderResponseData extends PagarmeResponseData
 {
     public function __construct(
-        public ?string                      $id,
-        public ?string                      $code,
-        public ?int                         $amount,
-        public ?string                      $currency,
-        public ?bool                        $closed,
-        public ?string                      $status,
-        public array                        $items,
-        public ?PagarmeCustomerResponseData $customer,
-        public array                        $charges,
-        public array                        $checkouts,
-        public array                        $metadata,
-        public ?string                      $createdAt = null,
-        public ?string                      $updatedAt = null,
-        public ?string                      $closedAt  = null,
+        public ?string $id,
+        public ?string $code,
+        public ?int    $amount,
+        public ?string $currency,
+        public ?bool   $closed,
+        public ?string $status,
+        public array   $items,
+
+        public ?CustomerResponseData $customer,
+
+        public array   $charges,
+        public array   $checkouts,
+        public array   $metadata,
+        public ?string $createdAt = null,
+        public ?string $updatedAt = null,
+        public ?string $closedAt  = null,
     ) {}
 
     public function authorizedAt(): ?string
@@ -90,7 +92,7 @@ final readonly class PagarmeOrderResponseData extends PagarmeResponseData
         return $message;
     }
 
-    public function firstCharge(): ?PagarmeOrderChargeResponseData
+    public function firstCharge(): ?OrderChargeResponseData
     {
         return $this->charges[0] ?? null;
     }
@@ -125,7 +127,7 @@ final readonly class PagarmeOrderResponseData extends PagarmeResponseData
         return $transaction?->id ?? $charge?->id ?? $this->id;
     }
 
-    public function lastTransaction(): ?PagarmeOrderTransactionResponseData
+    public function lastTransaction(): ?OrderTransactionResponseData
     {
         return $this->firstCharge()?->transaction();
     }
@@ -181,19 +183,19 @@ final readonly class PagarmeOrderResponseData extends PagarmeResponseData
             status:   static::arrString($payload, 'status'),
 
             items: static::arrMap($payload, 'items',
-                static fn (array $item) => PagarmeOrderItemResponseData::fromArray($item),
+                static fn (array $item) => OrderItemResponseData::fromArray($item),
             ),
 
             customer: ! empty($customer)
-                ? PagarmeCustomerResponseData::fromArray($customer)
+                ? CustomerResponseData::fromArray($customer)
                 : null,
 
             charges: static::arrMap($payload, 'charges',
-                static fn (array $charge) => PagarmeOrderChargeResponseData::fromArray($charge),
+                static fn (array $charge) => OrderChargeResponseData::fromArray($charge),
             ),
 
             checkouts: static::arrMap($payload, 'checkouts',
-                static fn (array $checkout) => PagarmeOrderCheckoutResponseData::fromArray($checkout),
+                static fn (array $checkout) => OrderCheckoutResponseData::fromArray($checkout),
             ),
 
             metadata:  static::arrArray($payload, 'metadata'),
@@ -213,7 +215,7 @@ final readonly class PagarmeOrderResponseData extends PagarmeResponseData
             'closed'   => $this->closed,
 
             'items' => array_map(
-                static fn (PagarmeOrderItemResponseData $item) => $item->toArray(),
+                static fn (OrderItemResponseData $item) => $item->toArray(),
                 $this->items,
             ),
 
@@ -224,12 +226,12 @@ final readonly class PagarmeOrderResponseData extends PagarmeResponseData
             'closed_at'  => $this->closedAt,
 
             'charges' => array_map(
-                static fn (PagarmeOrderChargeResponseData $charge) => $charge->toArray(),
+                static fn (OrderChargeResponseData $charge) => $charge->toArray(),
                 $this->charges,
             ),
 
             'checkouts' => array_map(
-                static fn (PagarmeOrderCheckoutResponseData $checkout) => $checkout->toArray(),
+                static fn (OrderCheckoutResponseData $checkout) => $checkout->toArray(),
                 $this->checkouts,
             ),
 

+ 2 - 2
app/Data/Pagarme/Response/PagarmeRecipientResponseData/PagarmeRecipientBankAccountResponseData.php → app/Data/Pagarme/Response/RecipientResponseData/RecipientBankAccountResponseData.php

@@ -1,10 +1,10 @@
 <?php
 
-namespace App\Data\Pagarme\Response\PagarmeRecipientResponseData;
+namespace App\Data\Pagarme\Response\RecipientResponseData;
 
 use App\Data\Pagarme\PagarmeResponseData;
 
-final readonly class PagarmeRecipientBankAccountResponseData extends PagarmeResponseData
+final readonly class RecipientBankAccountResponseData extends PagarmeResponseData
 {
     public function __construct(
         public ?string $holderName,

+ 14 - 12
app/Data/Pagarme/Response/PagarmeRecipientResponseData/PagarmeRecipientResponseData.php → app/Data/Pagarme/Response/RecipientResponseData/RecipientResponseData.php

@@ -1,21 +1,23 @@
 <?php
 
-namespace App\Data\Pagarme\Response\PagarmeRecipientResponseData;
+namespace App\Data\Pagarme\Response\RecipientResponseData;
 
 use App\Data\Pagarme\PagarmeResponseData;
 
-final readonly class PagarmeRecipientResponseData extends PagarmeResponseData
+final readonly class RecipientResponseData extends PagarmeResponseData
 {
     public function __construct(
-        public ?string                                  $id,
-        public ?string                                  $name,
-        public ?string                                  $email,
-        public ?string                                  $document,
-        public ?string                                  $type,
-        public ?string                                  $status,
-        public ?PagarmeRecipientBankAccountResponseData $defaultBankAccount = null,
-        public ?string                                  $createdAt          = null,
-        public ?string                                  $updatedAt          = null,
+        public ?string $id,
+        public ?string $name,
+        public ?string $email,
+        public ?string $document,
+        public ?string $type,
+        public ?string $status,
+
+        public ?RecipientBankAccountResponseData $defaultBankAccount = null,
+
+        public ?string $createdAt = null,
+        public ?string $updatedAt = null,
     ) {}
 
     public function requireId(): string
@@ -42,7 +44,7 @@ final readonly class PagarmeRecipientResponseData extends PagarmeResponseData
             status:   static::arrString($payload, 'status'),
 
             defaultBankAccount: ! empty($bankAccount)
-                ? PagarmeRecipientBankAccountResponseData::fromArray($bankAccount)
+                ? RecipientBankAccountResponseData::fromArray($bankAccount)
                 : null,
 
             createdAt: static::arrString($payload, 'created_at'),

+ 1 - 1
app/Data/Pagarme/Response/PagarmeTransferResponseData.php → app/Data/Pagarme/Response/TransferResponseData.php

@@ -2,7 +2,7 @@
 
 namespace App\Data\Pagarme\Response;
 
-final readonly class PagarmeTransferResponseData extends PagarmeResponseData
+final readonly class TransferResponseData extends PagarmeResponseData
 {
     public function __construct(
         public ?string $id,

+ 208 - 208
app/Http/Controllers/AuthController.php

@@ -3,173 +3,173 @@
 namespace App\Http\Controllers;
 
 use App\Http\Requests\AuthRequest;
-use App\Http\Requests\RefreshTokenRequest;
 use App\Http\Requests\RefreshTokenAppRequest;
+use App\Http\Requests\RefreshTokenRequest;
 use App\Http\Requests\UserAppsRequest;
 use App\Http\Requests\UserAppsValidateCodeRequest;
-use Illuminate\Http\JsonResponse;
 use App\Http\Resources\AuthResource;
 use App\Services\AuthService;
-use Illuminate\Support\Facades\Log;
+use Illuminate\Http\JsonResponse;
 
 class AuthController extends Controller
 {
-  public function __construct(protected AuthService $authService) {}
+    public function __construct(protected AuthService $authService) {}
 
-  public function login(AuthRequest $request): JsonResponse
-  {
-    $validated = $request->validated();
+    public function login(AuthRequest $request): JsonResponse
+    {
+        $validated = $request->validated();
 
-    $result = $this->authService->login(
-      email: $validated["email"],
-      password: $validated["password"],
-    );
+        $result = $this->authService->login(
+            email: $validated['email'],
+            password: $validated['password'],
+        );
 
-    if (!$result) {
-      return $this->errorResponse(message: __("auth.failed"), code: 401);
-    }
+        if (! $result) {
+            return $this->errorResponse(message: __('auth.failed'), code: 401);
+        }
 
-    return $this->successResponse(
-      payload: new AuthResource($result["payload"]),
-      message: __("auth.logged_in"),
-    )->withCookie(
-      cookie(
-        "refresh_token",
-        $result["refreshToken"],
-        config("sanctum.rt_expiration") * 60,
-        "/",
-        config("session.domain"),
-        config("session.secure"),
-        true,
-        false,
-        "Lax",
-      ),
-    );
-  }
-
-  public function loginApp(AuthRequest $request): JsonResponse
-  {
-    $validated = $request->validated();
-
-    $result = $this->authService->login(
-      email: $validated["email"],
-      password: $validated["password"],
-    );
-
-    if (!$result) {
-      return $this->errorResponse(message: __("auth.failed"), code: 401);
+        return $this->successResponse(
+            payload: new AuthResource($result['payload']),
+            message: __('auth.logged_in'),
+        )->withCookie(
+            cookie(
+                'refresh_token',
+                $result['refreshToken'],
+                config('sanctum.rt_expiration') * 60,
+                '/',
+                config('session.domain'),
+                config('session.secure'),
+                true,
+                false,
+                'Lax',
+            ),
+        );
     }
 
-    return $this->successResponse(
-      payload: new AuthResource([
-        ...$result["payload"],
-        "refresh_token" => $result["refreshToken"],
-      ]),
-      message: __("auth.logged_in"),
-    );
-  }
-
-  public function logout(): JsonResponse
-  {
-    $this->authService->logout();
-
-    return $this->successResponse(
-      message: __("auth.logout"),
-    )->withoutCookie("refresh_token");
-  }
-
-  public function refresh(RefreshTokenRequest $request): JsonResponse
-  {
-    $refresh_token = $request->cookie("refresh_token");
-
-    if (is_null($refresh_token)) {
-      return $this->errorResponse(
-        code: 403,
-      )->withoutCookie("refresh_token");
-    }
+    public function loginApp(AuthRequest $request): JsonResponse
+    {
+        $validated = $request->validated();
+
+        $result = $this->authService->login(
+            email: $validated['email'],
+            password: $validated['password'],
+        );
 
-    $result = $this->authService->refresh(
-      $refresh_token
-    );
+        if (! $result) {
+            return $this->errorResponse(message: __('auth.failed'), code: 401);
+        }
 
-    if (is_null($result)) {
-      return $this->errorResponse(
-        message: __("auth.unauthorized"),
-        code: 403,
-      )->withoutCookie("refresh_token");
+        return $this->successResponse(
+            payload: new AuthResource([
+                ...$result['payload'],
+                'refresh_token' => $result['refreshToken'],
+            ]),
+            message: __('auth.logged_in'),
+        );
     }
 
-    return $this->successResponse(
-      payload: new AuthResource($result["payload"]),
-    )->withCookie(
-      cookie(
-        "refresh_token",
-        $result["refreshToken"],
-        config("sanctum.rt_expiration") * 60,
-        "/",
-        config("session.domain"),
-        config("session.secure"),
-        true,
-        true,
-        "Lax",
-      ),
-    );
-  }
-
-  public function refreshApp(RefreshTokenAppRequest $request): JsonResponse
-  {
-    $refresh_token = $request->validated("refresh_token");
-
-    if (is_null($refresh_token)) {
-      return $this->errorResponse(code: 403);
+    public function logout(): JsonResponse
+    {
+        $this->authService->logout();
+
+        return $this->successResponse(
+            message: __('auth.logout'),
+        )->withoutCookie('refresh_token');
     }
-    $result = $this->authService->refresh(
-      $refresh_token
-    );
-
-    if (is_null($result)) {
-      return $this->errorResponse(
-        message: __("auth.unauthorized"),
-        code: 403,
-      );
+
+    public function refresh(RefreshTokenRequest $request): JsonResponse
+    {
+        $refresh_token = $request->cookie('refresh_token');
+
+        if (is_null($refresh_token)) {
+            return $this->errorResponse(
+                code: 403,
+            )->withoutCookie('refresh_token');
+        }
+
+        $result = $this->authService->refresh(
+            $refresh_token
+        );
+
+        if (is_null($result)) {
+            return $this->errorResponse(
+                message: __('auth.unauthorized'),
+                code: 403,
+            )->withoutCookie('refresh_token');
+        }
+
+        return $this->successResponse(
+            payload: new AuthResource($result['payload']),
+        )->withCookie(
+            cookie(
+                'refresh_token',
+                $result['refreshToken'],
+                config('sanctum.rt_expiration') * 60,
+                '/',
+                config('session.domain'),
+                config('session.secure'),
+                true,
+                true,
+                'Lax',
+            ),
+        );
     }
-    return $this->successResponse(
-      payload: new AuthResource([
-        ...$result["payload"],
-        "refresh_token" => $result["refreshToken"],
-      ]),
-    );
-  }
-
-  public function clientSendCode(UserAppsRequest $request): JsonResponse
-  {
-    $result = $this->authService->clientSendCode($request->validated());
-
-    if (is_array($result) && isset($result['error'])) {
-      return $this->errorResponse(message: __("auth.{$result['error']}"), code: 403);
+
+    public function refreshApp(RefreshTokenAppRequest $request): JsonResponse
+    {
+        $refresh_token = $request->validated('refresh_token');
+
+        if (is_null($refresh_token)) {
+            return $this->errorResponse(code: 403);
+        }
+        $result = $this->authService->refresh(
+            $refresh_token
+        );
+
+        if (is_null($result)) {
+            return $this->errorResponse(
+                message: __('auth.unauthorized'),
+                code: 403,
+            );
+        }
+
+        return $this->successResponse(
+            payload: new AuthResource([
+                ...$result['payload'],
+                'refresh_token' => $result['refreshToken'],
+            ]),
+        );
     }
 
-    return $this->successResponse(
-      message: __("messages.code_sent"),
-      code: 201,
-      payload: ['isLogin' => $result],
-    );
-  }
+    public function clientSendCode(UserAppsRequest $request): JsonResponse
+    {
+        $result = $this->authService->clientSendCode($request->validated());
 
-  public function providerSendCode(UserAppsRequest $request): JsonResponse
-  {
-    $result = $this->authService->providerSendCode($request->validated());
+        if (is_array($result) && isset($result['error'])) {
+            return $this->errorResponse(message: __("auth.{$result['error']}"), code: 403);
+        }
 
-    if (is_array($result) && isset($result['error'])) {
-      return $this->errorResponse(message: __("auth.{$result['error']}"), code: 403);
+        return $this->successResponse(
+            message: __('messages.code_sent'),
+            code: 201,
+            payload: ['isLogin' => $result],
+        );
     }
 
-    return $this->successResponse(
-      message: __("messages.code_sent"),
-      code: 201,
-      payload: ['isLogin' => $result],
-    );
-  }
+    public function providerSendCode(UserAppsRequest $request): JsonResponse
+    {
+        $result = $this->authService->providerSendCode($request->validated());
+
+        if (is_array($result) && isset($result['error'])) {
+            return $this->errorResponse(message: __("auth.{$result['error']}"), code: 403);
+        }
+
+        return $this->successResponse(
+            message: __('messages.code_sent'),
+            code: 201,
+            payload: ['isLogin' => $result],
+        );
+    }
 
     public function validateCodeClient(UserAppsValidateCodeRequest $request): JsonResponse
     {
@@ -178,28 +178,28 @@ class AuthController extends Controller
         $code = $request->input('code');
         $isLogin = (bool) $request->input('isLogin', false);
 
-    $result = $this->authService->validateCodeClient($request->validated(), $isLogin);
+        $result = $this->authService->validateCodeClient($request->validated(), $isLogin);
 
-    if ($result === false) {
-      return $this->errorResponse(message: __('auth.invalid_code'), code: 400);
-    }
+        if ($result === false) {
+            return $this->errorResponse(message: __('auth.invalid_code'), code: 400);
+        }
 
-    if (is_array($result) && isset($result['error'])) {
-      return $this->errorResponse(message: __("auth.{$result['error']}"), code: 403);
-    }
+        if (is_array($result) && isset($result['error'])) {
+            return $this->errorResponse(message: __("auth.{$result['error']}"), code: 403);
+        }
 
-    if ($isLogin) {
-      return $this->successResponse(
-        payload: new AuthResource([...$result['payload'], 'refresh_token' => $result['refreshToken']]),
-        message: __('auth.logged_in'),
-      );
-    }
+        if ($isLogin) {
+            return $this->successResponse(
+                payload: new AuthResource([...$result['payload'], 'refresh_token' => $result['refreshToken']]),
+                message: __('auth.logged_in'),
+            );
+        }
 
-    return $this->successResponse(
-      payload: ['email' => $email, 'phone' => $phone, 'code' => $code],
-      message: __('auth.valid_code'),
-    );
-  }
+        return $this->successResponse(
+            payload: ['email' => $email, 'phone' => $phone, 'code' => $code],
+            message: __('auth.valid_code'),
+        );
+    }
 
     public function validateCodeProvider(UserAppsValidateCodeRequest $request): JsonResponse
     {
@@ -208,28 +208,28 @@ class AuthController extends Controller
         $code = $request->input('code');
         $isLogin = (bool) $request->input('isLogin', false);
 
-    $result = $this->authService->validateCodeProvider($request->validated(), $isLogin);
+        $result = $this->authService->validateCodeProvider($request->validated(), $isLogin);
 
-    if ($result === false) {
-      return $this->errorResponse(message: __('auth.invalid_code'), code: 400);
-    }
+        if ($result === false) {
+            return $this->errorResponse(message: __('auth.invalid_code'), code: 400);
+        }
 
-    if (is_array($result) && isset($result['error'])) {
-      return $this->errorResponse(message: __("auth.{$result['error']}"), code: 403);
-    }
+        if (is_array($result) && isset($result['error'])) {
+            return $this->errorResponse(message: __("auth.{$result['error']}"), code: 403);
+        }
 
-    if ($isLogin) {
-      return $this->successResponse(
-        payload: new AuthResource([...$result['payload'], 'refresh_token' => $result['refreshToken']]),
-        message: __('auth.logged_in'),
-      );
-    }
+        if ($isLogin) {
+            return $this->successResponse(
+                payload: new AuthResource([...$result['payload'], 'refresh_token' => $result['refreshToken']]),
+                message: __('auth.logged_in'),
+            );
+        }
 
-    return $this->successResponse(
-      payload: ['email' => $email, 'phone' => $phone, 'code' => $code],
-      message: __('auth.valid_code'),
-    );
-  }
+        return $this->successResponse(
+            payload: ['email' => $email, 'phone' => $phone, 'code' => $code],
+            message: __('auth.valid_code'),
+        );
+    }
 
     public function validateCode(UserAppsValidateCodeRequest $request): JsonResponse
     {
@@ -239,36 +239,36 @@ class AuthController extends Controller
             $code = $request->input('code');
             $isLogin = $request->input('isLogin');
 
-      $result = $this->authService->validateCode($request->validated(), $isLogin);
-  
-      if (!$result) {
-        return $this->errorResponse(
-          message: __("auth.invalid_code"),
-          code: 400,
-        );
-      }
-      
-      if($isLogin) {
-        return $this->successResponse(
-          payload: new AuthResource([
-            ...$result["payload"],
-            "refresh_token" => $result["refreshToken"],
-          ]),
-          message: __("auth.logged_in"),
-        );
-      } else {
-        return $this->successResponse(
-          payload: ['email' => $email, 'phone' => $phone, 'code' => $code],
-          message: __("auth.valid_code"),
-          code: 200,
-        );
-      }
-
-    } catch (\Exception $e) {
-      return $this->errorResponse(
-        message: __("auth.validation_error"),
-        code: 500,
-      );
+            $result = $this->authService->validateCode($request->validated(), $isLogin);
+
+            if (! $result) {
+                return $this->errorResponse(
+                    message: __('auth.invalid_code'),
+                    code: 400,
+                );
+            }
+
+            if ($isLogin) {
+                return $this->successResponse(
+                    payload: new AuthResource([
+                        ...$result['payload'],
+                        'refresh_token' => $result['refreshToken'],
+                    ]),
+                    message: __('auth.logged_in'),
+                );
+            } else {
+                return $this->successResponse(
+                    payload: ['email' => $email, 'phone' => $phone, 'code' => $code],
+                    message: __('auth.valid_code'),
+                    code: 200,
+                );
+            }
+
+        } catch (\Exception $e) {
+            return $this->errorResponse(
+                message: __('auth.validation_error'),
+                code: 500,
+            );
+        }
     }
-  }
 }

+ 1 - 0
app/Http/Controllers/ClientCalendarController.php

@@ -18,6 +18,7 @@ class ClientCalendarController extends Controller
             return $this->successResponse(payload: $dados);
         } catch (\Exception $e) {
             Log::error('Error fetching client calendar: '.$e->getMessage());
+
             return $this->errorResponse(message: __('messages.error_fetching_data'), code: 500);
         }
     }

+ 3 - 0
app/Http/Controllers/DashboardController.php

@@ -28,6 +28,7 @@ class DashboardController extends Controller
             return $this->errorResponse(message: 'Cliente não encontrado.', code: 404);
         } catch (\Exception $e) {
             Log::error('Erro ao obter dados do dashboard do cliente: '.$e->getMessage());
+
             return $this->errorResponse(message: __('messages.error_fetching_data'), code: 500);
         }
     }
@@ -40,6 +41,7 @@ class DashboardController extends Controller
             return $this->successResponse(payload: $dados);
         } catch (\Exception $e) {
             Log::error('Erro ao obter detalhes do schedule do cliente: '.$e->getMessage());
+
             return $this->errorResponse(message: __('messages.error_fetching_data'), code: 500);
         }
     }
@@ -58,6 +60,7 @@ class DashboardController extends Controller
             return $this->errorResponse(message: 'Prestador não encontrado.', code: 404);
         } catch (\Exception $e) {
             Log::error('Erro ao obter dados do dashboard do prestador: '.$e->getMessage());
+
             return $this->errorResponse(message: __('messages.error_fetching_data'), code: 500);
         }
     }

+ 1 - 0
app/Http/Controllers/ProviderCalendarController.php

@@ -18,6 +18,7 @@ class ProviderCalendarController extends Controller
             return $this->successResponse(payload: $dados);
         } catch (\Exception $e) {
             Log::error('Error fetching provider calendar: '.$e->getMessage());
+
             return $this->errorResponse(message: __('messages.error_fetching_data'), code: 500);
         }
     }

+ 21 - 14
app/Http/Controllers/ProviderController.php

@@ -18,6 +18,7 @@ class ProviderController extends Controller
     public function index(): JsonResponse
     {
         $items = $this->service->getAll();
+
         return $this->successResponse(
             payload: ProviderResource::collection($items),
         );
@@ -26,9 +27,10 @@ class ProviderController extends Controller
     public function store(ProviderRequest $request): JsonResponse
     {
         $item = $this->service->create($request->validated());
+
         return $this->successResponse(
             payload: new ProviderResource($item),
-            message: __("messages.created"),
+            message: __('messages.created'),
             code: 201,
         );
     }
@@ -36,12 +38,14 @@ class ProviderController extends Controller
     public function show(int $id): JsonResponse
     {
         $item = $this->service->findById($id);
+
         return $this->successResponse(payload: new ProviderResource($item));
     }
 
     public function update(ProviderRequest $request, int $id): JsonResponse
     {
         $item = $this->service->update($id, $request->validated());
+
         return $this->successResponse(
             payload: new ProviderResource($item),
             message: __('messages.updated'),
@@ -61,8 +65,9 @@ class ProviderController extends Controller
     public function destroy(int $id): JsonResponse
     {
         $this->service->delete($id);
+
         return $this->successResponse(
-            message: __("messages.deleted"),
+            message: __('messages.deleted'),
             code: 204,
         );
     }
@@ -84,6 +89,7 @@ class ProviderController extends Controller
     public function approve(int $id): JsonResponse
     {
         $item = $this->service->approve($id);
+
         return $this->successResponse(
             payload: new ProviderResource($item),
             message: __('messages.provider_approved'),
@@ -93,6 +99,7 @@ class ProviderController extends Controller
     public function reject(int $id): JsonResponse
     {
         $item = $this->service->reject($id);
+
         return $this->successResponse(
             payload: new ProviderResource($item),
             message: __('messages.provider_rejected'),
@@ -101,17 +108,17 @@ class ProviderController extends Controller
 
     public function register(RegisterProviderRequest $request): JsonResponse
     {
-      $result = $this->service->register($request->validated());
-      if (!$result) {
-        return $this->errorResponse(message: __("auth.failed"), code: 401);
-      }
-
-      return $this->successResponse(
-        payload: new AuthResource([
-          ...$result["payload"],
-          "refresh_token" => $result["refreshToken"],
-        ]),
-        message: __("auth.logged_in"),
-      );
+        $result = $this->service->register($request->validated());
+        if (! $result) {
+            return $this->errorResponse(message: __('auth.failed'), code: 401);
+        }
+
+        return $this->successResponse(
+            payload: new AuthResource([
+                ...$result['payload'],
+                'refresh_token' => $result['refreshToken'],
+            ]),
+            message: __('auth.logged_in'),
+        );
     }
 }

+ 1 - 0
app/Http/Controllers/SearchController.php

@@ -19,6 +19,7 @@ class SearchController extends Controller
             return $this->successResponse(payload: $dados);
         } catch (\Exception $e) {
             Log::error('Erro ao buscar prestadores: '.$e->getMessage());
+
             return $this->errorResponse(message: __('messages.error_fetching_data'), code: 500);
         }
     }

+ 3 - 3
app/Http/Resources/CardsListResource.php

@@ -10,10 +10,10 @@ class CardsListResource extends JsonResource
     public function toArray(Request $request): array
     {
         return [
-            'id' => $this->id,
-            'brand' => $this->brand,
+            'id'               => $this->id,
+            'brand'            => $this->brand,
             'last_four_digits' => $this->last_four_digits,
-            'card_name' => $this->card_name,
+            'card_name'        => $this->card_name,
 
         ];
     }

+ 8 - 8
app/Http/Resources/ClientResource.php

@@ -15,15 +15,15 @@ class ClientResource extends JsonResource
     public function toArray(Request $request): array
     {
         return [
-            'id'              => $this->id,
-            'document'        => $this->document,
-            'user_id'         => $this->user_id,
+            'id'               => $this->id,
+            'document'         => $this->document,
+            'user_id'          => $this->user_id,
             'profile_media_id' => $this->profile_media_id,
-            'profile_media'   => new MediaResource($this->whenLoaded('profileMedia')),
-            'user'            => new UserResource($this->whenLoaded('user')),
-            'created_at'      => $this->created_at,
-            'updated_at'      => $this->updated_at,
-            'deleted_at'      => $this->deleted_at,
+            'profile_media'    => new MediaResource($this->whenLoaded('profileMedia')),
+            'user'             => new UserResource($this->whenLoaded('user')),
+            'created_at'       => $this->created_at,
+            'updated_at'       => $this->updated_at,
+            'deleted_at'       => $this->deleted_at,
         ];
     }
 }

+ 1 - 1
app/Http/Resources/DashboardClienteResource.php

@@ -24,7 +24,7 @@ class DashboardClienteResource extends JsonResource
             'providersClose'      => $this['providersClose'],
             'schedulesProposals'  => $this['schedulesProposals'],
             'todaySchedules'      => $this['todaySchedules'],
-            'notifications' => $this['notifications'],
+            'notifications'       => $this['notifications'],
             'has_payment_methods' => $this['has_payment_methods'],
         ];
     }

+ 1 - 1
app/Http/Resources/DashboardPrestadorResource.php

@@ -22,7 +22,7 @@ class DashboardPrestadorResource extends JsonResource
             'solicitations'  => $this['solicitations'],
             'nextSchedules'  => $this['nextSchedules'],
             'opportunities'  => $this['opportunities'],
-            'notifications' => $this['notifications'],
+            'notifications'  => $this['notifications'],
         ];
     }
 }

+ 7 - 7
app/Http/Resources/ProviderPaymentMethodResource.php

@@ -10,14 +10,14 @@ class ProviderPaymentMethodResource extends JsonResource
     public function toArray(Request $request): array
     {
         return [
-            'id' => $this->id,
-            'provider_id' => $this->provider_id,
-            'account_type' => $this->account_type?->value,
-            'pix_key' => $this->pix_key,
+            'id'                => $this->id,
+            'provider_id'       => $this->provider_id,
+            'account_type'      => $this->account_type?->value,
+            'pix_key'           => $this->pix_key,
             'bank_account_type' => $this->bank_account_type?->value,
-            'agency' => $this->agency,
-            'account' => $this->account,
-            'digit' => $this->digit,
+            'agency'            => $this->agency,
+            'account'           => $this->account,
+            'digit'             => $this->digit,
         ];
     }
 }

+ 3 - 4
app/Http/Resources/ProviderResource.php

@@ -2,12 +2,11 @@
 
 namespace App\Http\Resources;
 
+use App\Models\Provider;
 use Carbon\Carbon;
 use Illuminate\Http\Request;
-use Illuminate\Http\Resources\Json\JsonResource;
 use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
-use App\Http\Resources\MediaResource;
-use App\Models\Provider;
+use Illuminate\Http\Resources\Json\JsonResource;
 
 class ProviderResource extends JsonResource
 {
@@ -39,7 +38,7 @@ class ProviderResource extends JsonResource
     }
 
     /**
-     * @param \Illuminate\Database\Eloquent\Collection<Provider> $resource
+     * @param  \Illuminate\Database\Eloquent\Collection<Provider>  $resource
      * @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection<ProviderResource>
      */
     public static function collection($resource): AnonymousResourceCollection

+ 1 - 1
app/Http/Resources/ReviewResource.php

@@ -35,7 +35,7 @@ class ReviewResource extends JsonResource
                 });
             }),
 
-            'photos'     => $this->whenLoaded('reviewMedia', function () {
+            'photos' => $this->whenLoaded('reviewMedia', function () {
                 return $this->reviewMedia->map(fn ($rm) => [
                     'id'     => $rm->media_id,
                     'origin' => $rm->origin,

+ 0 - 1
app/Http/Resources/UserResource.php

@@ -6,7 +6,6 @@ use Carbon\Carbon;
 use Illuminate\Http\Request;
 use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
 use Illuminate\Http\Resources\Json\JsonResource;
-use App\Http\Resources\ProviderResource;
 
 class UserResource extends JsonResource
 {

+ 33 - 8
app/Notifications/Push/Cliente/Contextual/ContextualSegundaPush.php

@@ -10,21 +10,46 @@ use Illuminate\Database\Eloquent\Collection;
 
 class ContextualSegundaPush extends BasePushNotification
 {
-    public function label(): string { return 'cliente_contextual_segunda'; }
-    public function title(): string { return 'Segunda organizada'; }
-    public function body(): string  { return 'Comece a semana com a casa limpa.'; }
+    public function label(): string
+    {
+        return 'cliente_contextual_segunda';
+    }
+
+    public function title(): string
+    {
+        return 'Segunda organizada';
+    }
+
+    public function body(): string
+    {
+        return 'Comece a semana com a casa limpa.';
+    }
+
+    public function target(): PushNotificationTargetEnum
+    {
+        return PushNotificationTargetEnum::CLIENTE;
+    }
 
-    public function target(): PushNotificationTargetEnum   { return PushNotificationTargetEnum::CLIENTE; }
-    public function category(): PushNotificationCategoryEnum { return PushNotificationCategoryEnum::CONTEXTUAL; }
+    public function category(): PushNotificationCategoryEnum
+    {
+        return PushNotificationCategoryEnum::CONTEXTUAL;
+    }
 
-    public function notificationCooldownDays(): int { return 7; }
-    public function categoryCooldownDays(): int     { return 7; }
+    public function notificationCooldownDays(): int
+    {
+        return 7;
+    }
+
+    public function categoryCooldownDays(): int
+    {
+        return 7;
+    }
 
     /** Só retorna usuários se hoje for segunda-feira */
     public function eligibleUsers(): Collection
     {
         if (! now()->isMonday()) {
-            return new Collection();
+            return new Collection;
         }
 
         return User::whereHas('client')

+ 33 - 8
app/Notifications/Push/Cliente/Contextual/ContextualSextaPush.php

@@ -10,21 +10,46 @@ use Illuminate\Database\Eloquent\Collection;
 
 class ContextualSextaPush extends BasePushNotification
 {
-    public function label(): string { return 'cliente_contextual_sexta'; }
-    public function title(): string { return 'Sexta chegando'; }
-    public function body(): string  { return 'Que tal deixar a casa pronta pro fim de semana?'; }
+    public function label(): string
+    {
+        return 'cliente_contextual_sexta';
+    }
+
+    public function title(): string
+    {
+        return 'Sexta chegando';
+    }
+
+    public function body(): string
+    {
+        return 'Que tal deixar a casa pronta pro fim de semana?';
+    }
+
+    public function target(): PushNotificationTargetEnum
+    {
+        return PushNotificationTargetEnum::CLIENTE;
+    }
 
-    public function target(): PushNotificationTargetEnum   { return PushNotificationTargetEnum::CLIENTE; }
-    public function category(): PushNotificationCategoryEnum { return PushNotificationCategoryEnum::CONTEXTUAL; }
+    public function category(): PushNotificationCategoryEnum
+    {
+        return PushNotificationCategoryEnum::CONTEXTUAL;
+    }
 
-    public function notificationCooldownDays(): int { return 7; }
-    public function categoryCooldownDays(): int     { return 7; }
+    public function notificationCooldownDays(): int
+    {
+        return 7;
+    }
+
+    public function categoryCooldownDays(): int
+    {
+        return 7;
+    }
 
     /** Só retorna usuários se hoje for sexta-feira */
     public function eligibleUsers(): Collection
     {
         if (! now()->isFriday()) {
-            return new Collection();
+            return new Collection;
         }
 
         return User::whereHas('client')

+ 23 - 5
app/Notifications/Push/Cliente/Contextual/ContextualVisitaPush.php

@@ -10,12 +10,30 @@ use Illuminate\Database\Eloquent\Collection;
 
 class ContextualVisitaPush extends BasePushNotification
 {
-    public function label(): string { return 'cliente_contextual_visita'; }
-    public function title(): string { return 'Visita marcada?'; }
-    public function body(): string  { return 'Uma diarista pode ajudar hoje.'; }
+    public function label(): string
+    {
+        return 'cliente_contextual_visita';
+    }
 
-    public function target(): PushNotificationTargetEnum   { return PushNotificationTargetEnum::CLIENTE; }
-    public function category(): PushNotificationCategoryEnum { return PushNotificationCategoryEnum::CONTEXTUAL; }
+    public function title(): string
+    {
+        return 'Visita marcada?';
+    }
+
+    public function body(): string
+    {
+        return 'Uma diarista pode ajudar hoje.';
+    }
+
+    public function target(): PushNotificationTargetEnum
+    {
+        return PushNotificationTargetEnum::CLIENTE;
+    }
+
+    public function category(): PushNotificationCategoryEnum
+    {
+        return PushNotificationCategoryEnum::CONTEXTUAL;
+    }
 
     public function eligibleUsers(): Collection
     {

+ 23 - 5
app/Notifications/Push/Cliente/Educativo/Educativo1Push.php

@@ -10,12 +10,30 @@ use Illuminate\Database\Eloquent\Collection;
 
 class Educativo1Push extends BasePushNotification
 {
-    public function label(): string { return 'cliente_educativo_1'; }
-    public function title(): string { return 'Você sabia?'; }
-    public function body(): string  { return 'No Diária, o pagamento só é liberado após o serviço concluído.'; }
+    public function label(): string
+    {
+        return 'cliente_educativo_1';
+    }
 
-    public function target(): PushNotificationTargetEnum   { return PushNotificationTargetEnum::CLIENTE; }
-    public function category(): PushNotificationCategoryEnum { return PushNotificationCategoryEnum::EDUCATIVO; }
+    public function title(): string
+    {
+        return 'Você sabia?';
+    }
+
+    public function body(): string
+    {
+        return 'No Diária, o pagamento só é liberado após o serviço concluído.';
+    }
+
+    public function target(): PushNotificationTargetEnum
+    {
+        return PushNotificationTargetEnum::CLIENTE;
+    }
+
+    public function category(): PushNotificationCategoryEnum
+    {
+        return PushNotificationCategoryEnum::EDUCATIVO;
+    }
 
     public function eligibleUsers(): Collection
     {

+ 23 - 5
app/Notifications/Push/Cliente/Educativo/Educativo2Push.php

@@ -10,12 +10,30 @@ use Illuminate\Database\Eloquent\Collection;
 
 class Educativo2Push extends BasePushNotification
 {
-    public function label(): string { return 'cliente_educativo_2'; }
-    public function title(): string { return 'Mais segurança'; }
-    public function body(): string  { return 'Você acompanha todo o serviço direto pelo app.'; }
+    public function label(): string
+    {
+        return 'cliente_educativo_2';
+    }
 
-    public function target(): PushNotificationTargetEnum   { return PushNotificationTargetEnum::CLIENTE; }
-    public function category(): PushNotificationCategoryEnum { return PushNotificationCategoryEnum::EDUCATIVO; }
+    public function title(): string
+    {
+        return 'Mais segurança';
+    }
+
+    public function body(): string
+    {
+        return 'Você acompanha todo o serviço direto pelo app.';
+    }
+
+    public function target(): PushNotificationTargetEnum
+    {
+        return PushNotificationTargetEnum::CLIENTE;
+    }
+
+    public function category(): PushNotificationCategoryEnum
+    {
+        return PushNotificationCategoryEnum::EDUCATIVO;
+    }
 
     public function eligibleUsers(): Collection
     {

+ 23 - 5
app/Notifications/Push/Cliente/Educativo/Educativo3Push.php

@@ -10,12 +10,30 @@ use Illuminate\Database\Eloquent\Collection;
 
 class Educativo3Push extends BasePushNotification
 {
-    public function label(): string { return 'cliente_educativo_3'; }
-    public function title(): string { return 'Dica importante'; }
-    public function body(): string  { return 'Avaliações ajudam a manter a qualidade das diaristas.'; }
+    public function label(): string
+    {
+        return 'cliente_educativo_3';
+    }
 
-    public function target(): PushNotificationTargetEnum   { return PushNotificationTargetEnum::CLIENTE; }
-    public function category(): PushNotificationCategoryEnum { return PushNotificationCategoryEnum::EDUCATIVO; }
+    public function title(): string
+    {
+        return 'Dica importante';
+    }
+
+    public function body(): string
+    {
+        return 'Avaliações ajudam a manter a qualidade das diaristas.';
+    }
+
+    public function target(): PushNotificationTargetEnum
+    {
+        return PushNotificationTargetEnum::CLIENTE;
+    }
+
+    public function category(): PushNotificationCategoryEnum
+    {
+        return PushNotificationCategoryEnum::EDUCATIVO;
+    }
 
     public function eligibleUsers(): Collection
     {

+ 23 - 5
app/Notifications/Push/Cliente/Educativo/Educativo4Push.php

@@ -10,12 +10,30 @@ use Illuminate\Database\Eloquent\Collection;
 
 class Educativo4Push extends BasePushNotification
 {
-    public function label(): string { return 'cliente_educativo_4'; }
-    public function title(): string { return 'Transparência'; }
-    public function body(): string  { return 'Você vê perfil, avaliações e valores antes de contratar.'; }
+    public function label(): string
+    {
+        return 'cliente_educativo_4';
+    }
 
-    public function target(): PushNotificationTargetEnum   { return PushNotificationTargetEnum::CLIENTE; }
-    public function category(): PushNotificationCategoryEnum { return PushNotificationCategoryEnum::EDUCATIVO; }
+    public function title(): string
+    {
+        return 'Transparência';
+    }
+
+    public function body(): string
+    {
+        return 'Você vê perfil, avaliações e valores antes de contratar.';
+    }
+
+    public function target(): PushNotificationTargetEnum
+    {
+        return PushNotificationTargetEnum::CLIENTE;
+    }
+
+    public function category(): PushNotificationCategoryEnum
+    {
+        return PushNotificationCategoryEnum::EDUCATIVO;
+    }
 
     public function eligibleUsers(): Collection
     {

+ 32 - 7
app/Notifications/Push/Cliente/EducativoConversao/EducativoConversao1Push.php

@@ -10,15 +10,40 @@ use Illuminate\Database\Eloquent\Collection;
 
 class EducativoConversao1Push extends BasePushNotification
 {
-    public function label(): string { return 'cliente_educ_conversao_1'; }
-    public function title(): string { return 'Sob Medida funciona assim'; }
-    public function body(): string  { return 'Seu pedido é enviado para várias diaristas disponíveis.'; }
+    public function label(): string
+    {
+        return 'cliente_educ_conversao_1';
+    }
+
+    public function title(): string
+    {
+        return 'Sob Medida funciona assim';
+    }
+
+    public function body(): string
+    {
+        return 'Seu pedido é enviado para várias diaristas disponíveis.';
+    }
+
+    public function target(): PushNotificationTargetEnum
+    {
+        return PushNotificationTargetEnum::CLIENTE;
+    }
 
-    public function target(): PushNotificationTargetEnum   { return PushNotificationTargetEnum::CLIENTE; }
-    public function category(): PushNotificationCategoryEnum { return PushNotificationCategoryEnum::EDUCATIVO_CONVERSAO; }
+    public function category(): PushNotificationCategoryEnum
+    {
+        return PushNotificationCategoryEnum::EDUCATIVO_CONVERSAO;
+    }
 
-    public function notificationCooldownDays(): int { return 28; }
-    public function categoryCooldownDays(): int     { return 14; }
+    public function notificationCooldownDays(): int
+    {
+        return 28;
+    }
+
+    public function categoryCooldownDays(): int
+    {
+        return 14;
+    }
 
     /**
      * Elegível se:

+ 32 - 7
app/Notifications/Push/Cliente/EducativoConversao/EducativoConversao2Push.php

@@ -10,15 +10,40 @@ use Illuminate\Database\Eloquent\Collection;
 
 class EducativoConversao2Push extends BasePushNotification
 {
-    public function label(): string { return 'cliente_educ_conversao_2'; }
-    public function title(): string { return 'Quer mais chances de aceite?'; }
-    public function body(): string  { return 'Pedidos Sob Medida aumentam a rapidez na confirmação.'; }
+    public function label(): string
+    {
+        return 'cliente_educ_conversao_2';
+    }
+
+    public function title(): string
+    {
+        return 'Quer mais chances de aceite?';
+    }
+
+    public function body(): string
+    {
+        return 'Pedidos Sob Medida aumentam a rapidez na confirmação.';
+    }
+
+    public function target(): PushNotificationTargetEnum
+    {
+        return PushNotificationTargetEnum::CLIENTE;
+    }
 
-    public function target(): PushNotificationTargetEnum   { return PushNotificationTargetEnum::CLIENTE; }
-    public function category(): PushNotificationCategoryEnum { return PushNotificationCategoryEnum::EDUCATIVO_CONVERSAO; }
+    public function category(): PushNotificationCategoryEnum
+    {
+        return PushNotificationCategoryEnum::EDUCATIVO_CONVERSAO;
+    }
 
-    public function notificationCooldownDays(): int { return 28; }
-    public function categoryCooldownDays(): int     { return 14; }
+    public function notificationCooldownDays(): int
+    {
+        return 28;
+    }
+
+    public function categoryCooldownDays(): int
+    {
+        return 14;
+    }
 
     public function eligibleUsers(): Collection
     {

+ 23 - 5
app/Notifications/Push/Cliente/Marketing/Marketing1Push.php

@@ -10,12 +10,30 @@ use Illuminate\Database\Eloquent\Collection;
 
 class Marketing1Push extends BasePushNotification
 {
-    public function label(): string { return 'cliente_marketing_1'; }
-    public function title(): string { return 'Casa limpa sem esforço'; }
-    public function body(): string  { return 'Encontre uma diarista disponível em poucos minutos.'; }
+    public function label(): string
+    {
+        return 'cliente_marketing_1';
+    }
 
-    public function target(): PushNotificationTargetEnum   { return PushNotificationTargetEnum::CLIENTE; }
-    public function category(): PushNotificationCategoryEnum { return PushNotificationCategoryEnum::MARKETING; }
+    public function title(): string
+    {
+        return 'Casa limpa sem esforço';
+    }
+
+    public function body(): string
+    {
+        return 'Encontre uma diarista disponível em poucos minutos.';
+    }
+
+    public function target(): PushNotificationTargetEnum
+    {
+        return PushNotificationTargetEnum::CLIENTE;
+    }
+
+    public function category(): PushNotificationCategoryEnum
+    {
+        return PushNotificationCategoryEnum::MARKETING;
+    }
 
     public function eligibleUsers(): Collection
     {

+ 23 - 5
app/Notifications/Push/Cliente/Marketing/Marketing2Push.php

@@ -10,12 +10,30 @@ use Illuminate\Database\Eloquent\Collection;
 
 class Marketing2Push extends BasePushNotification
 {
-    public function label(): string { return 'cliente_marketing_2'; }
-    public function title(): string { return 'Precisando de ajuda hoje?'; }
-    public function body(): string  { return 'Veja diaristas disponíveis perto de você.'; }
+    public function label(): string
+    {
+        return 'cliente_marketing_2';
+    }
 
-    public function target(): PushNotificationTargetEnum   { return PushNotificationTargetEnum::CLIENTE; }
-    public function category(): PushNotificationCategoryEnum { return PushNotificationCategoryEnum::MARKETING; }
+    public function title(): string
+    {
+        return 'Precisando de ajuda hoje?';
+    }
+
+    public function body(): string
+    {
+        return 'Veja diaristas disponíveis perto de você.';
+    }
+
+    public function target(): PushNotificationTargetEnum
+    {
+        return PushNotificationTargetEnum::CLIENTE;
+    }
+
+    public function category(): PushNotificationCategoryEnum
+    {
+        return PushNotificationCategoryEnum::MARKETING;
+    }
 
     public function eligibleUsers(): Collection
     {

+ 23 - 5
app/Notifications/Push/Cliente/Marketing/Marketing3Push.php

@@ -10,12 +10,30 @@ use Illuminate\Database\Eloquent\Collection;
 
 class Marketing3Push extends BasePushNotification
 {
-    public function label(): string { return 'cliente_marketing_3'; }
-    public function title(): string { return 'Menos preocupação, mais tempo'; }
-    public function body(): string  { return 'Agende sua próxima diária agora mesmo.'; }
+    public function label(): string
+    {
+        return 'cliente_marketing_3';
+    }
 
-    public function target(): PushNotificationTargetEnum   { return PushNotificationTargetEnum::CLIENTE; }
-    public function category(): PushNotificationCategoryEnum { return PushNotificationCategoryEnum::MARKETING; }
+    public function title(): string
+    {
+        return 'Menos preocupação, mais tempo';
+    }
+
+    public function body(): string
+    {
+        return 'Agende sua próxima diária agora mesmo.';
+    }
+
+    public function target(): PushNotificationTargetEnum
+    {
+        return PushNotificationTargetEnum::CLIENTE;
+    }
+
+    public function category(): PushNotificationCategoryEnum
+    {
+        return PushNotificationCategoryEnum::MARKETING;
+    }
 
     public function eligibleUsers(): Collection
     {

+ 23 - 5
app/Notifications/Push/Cliente/Marketing/Marketing4Push.php

@@ -10,12 +10,30 @@ use Illuminate\Database\Eloquent\Collection;
 
 class Marketing4Push extends BasePushNotification
 {
-    public function label(): string { return 'cliente_marketing_4'; }
-    public function title(): string { return 'Agenda cheia?'; }
-    public function body(): string  { return 'Uma diarista pode resolver isso hoje.'; }
+    public function label(): string
+    {
+        return 'cliente_marketing_4';
+    }
 
-    public function target(): PushNotificationTargetEnum   { return PushNotificationTargetEnum::CLIENTE; }
-    public function category(): PushNotificationCategoryEnum { return PushNotificationCategoryEnum::MARKETING; }
+    public function title(): string
+    {
+        return 'Agenda cheia?';
+    }
+
+    public function body(): string
+    {
+        return 'Uma diarista pode resolver isso hoje.';
+    }
+
+    public function target(): PushNotificationTargetEnum
+    {
+        return PushNotificationTargetEnum::CLIENTE;
+    }
+
+    public function category(): PushNotificationCategoryEnum
+    {
+        return PushNotificationCategoryEnum::MARKETING;
+    }
 
     public function eligibleUsers(): Collection
     {

+ 23 - 5
app/Notifications/Push/Cliente/Motivacional/Motivacional1Push.php

@@ -10,12 +10,30 @@ use Illuminate\Database\Eloquent\Collection;
 
 class Motivacional1Push extends BasePushNotification
 {
-    public function label(): string { return 'cliente_motivacional_1'; }
-    public function title(): string { return 'Sua casa merece cuidado'; }
-    public function body(): string  { return 'E você merece tempo livre.'; }
+    public function label(): string
+    {
+        return 'cliente_motivacional_1';
+    }
 
-    public function target(): PushNotificationTargetEnum   { return PushNotificationTargetEnum::CLIENTE; }
-    public function category(): PushNotificationCategoryEnum { return PushNotificationCategoryEnum::MOTIVACIONAL; }
+    public function title(): string
+    {
+        return 'Sua casa merece cuidado';
+    }
+
+    public function body(): string
+    {
+        return 'E você merece tempo livre.';
+    }
+
+    public function target(): PushNotificationTargetEnum
+    {
+        return PushNotificationTargetEnum::CLIENTE;
+    }
+
+    public function category(): PushNotificationCategoryEnum
+    {
+        return PushNotificationCategoryEnum::MOTIVACIONAL;
+    }
 
     public function eligibleUsers(): Collection
     {

+ 23 - 5
app/Notifications/Push/Cliente/Motivacional/Motivacional2Push.php

@@ -10,12 +10,30 @@ use Illuminate\Database\Eloquent\Collection;
 
 class Motivacional2Push extends BasePushNotification
 {
-    public function label(): string { return 'cliente_motivacional_2'; }
-    public function title(): string { return 'Chegue em casa e relaxe'; }
-    public function body(): string  { return 'A limpeza fica por nossa conta.'; }
+    public function label(): string
+    {
+        return 'cliente_motivacional_2';
+    }
 
-    public function target(): PushNotificationTargetEnum   { return PushNotificationTargetEnum::CLIENTE; }
-    public function category(): PushNotificationCategoryEnum { return PushNotificationCategoryEnum::MOTIVACIONAL; }
+    public function title(): string
+    {
+        return 'Chegue em casa e relaxe';
+    }
+
+    public function body(): string
+    {
+        return 'A limpeza fica por nossa conta.';
+    }
+
+    public function target(): PushNotificationTargetEnum
+    {
+        return PushNotificationTargetEnum::CLIENTE;
+    }
+
+    public function category(): PushNotificationCategoryEnum
+    {
+        return PushNotificationCategoryEnum::MOTIVACIONAL;
+    }
 
     public function eligibleUsers(): Collection
     {

+ 23 - 5
app/Notifications/Push/Cliente/Motivacional/Motivacional3Push.php

@@ -10,12 +10,30 @@ use Illuminate\Database\Eloquent\Collection;
 
 class Motivacional3Push extends BasePushNotification
 {
-    public function label(): string { return 'cliente_motivacional_3'; }
-    public function title(): string { return 'Menos bagunça, mais bem-estar'; }
-    public function body(): string  { return 'Agende sua diária quando quiser.'; }
+    public function label(): string
+    {
+        return 'cliente_motivacional_3';
+    }
 
-    public function target(): PushNotificationTargetEnum   { return PushNotificationTargetEnum::CLIENTE; }
-    public function category(): PushNotificationCategoryEnum { return PushNotificationCategoryEnum::MOTIVACIONAL; }
+    public function title(): string
+    {
+        return 'Menos bagunça, mais bem-estar';
+    }
+
+    public function body(): string
+    {
+        return 'Agende sua diária quando quiser.';
+    }
+
+    public function target(): PushNotificationTargetEnum
+    {
+        return PushNotificationTargetEnum::CLIENTE;
+    }
+
+    public function category(): PushNotificationCategoryEnum
+    {
+        return PushNotificationCategoryEnum::MOTIVACIONAL;
+    }
 
     public function eligibleUsers(): Collection
     {

+ 23 - 5
app/Notifications/Push/Cliente/Recorrencia/Recorrencia1Push.php

@@ -10,12 +10,30 @@ use Illuminate\Database\Eloquent\Collection;
 
 class Recorrencia1Push extends BasePushNotification
 {
-    public function label(): string { return 'cliente_recorrencia_1'; }
-    public function title(): string { return 'Hora da próxima diária?'; }
-    public function body(): string  { return 'Faz um tempo desde sua última limpeza 😊'; }
+    public function label(): string
+    {
+        return 'cliente_recorrencia_1';
+    }
 
-    public function target(): PushNotificationTargetEnum   { return PushNotificationTargetEnum::CLIENTE; }
-    public function category(): PushNotificationCategoryEnum { return PushNotificationCategoryEnum::RECORRENCIA; }
+    public function title(): string
+    {
+        return 'Hora da próxima diária?';
+    }
+
+    public function body(): string
+    {
+        return 'Faz um tempo desde sua última limpeza 😊';
+    }
+
+    public function target(): PushNotificationTargetEnum
+    {
+        return PushNotificationTargetEnum::CLIENTE;
+    }
+
+    public function category(): PushNotificationCategoryEnum
+    {
+        return PushNotificationCategoryEnum::RECORRENCIA;
+    }
 
     public function eligibleUsers(): Collection
     {

+ 23 - 5
app/Notifications/Push/Cliente/Recorrencia/Recorrencia2Push.php

@@ -10,12 +10,30 @@ use Illuminate\Database\Eloquent\Collection;
 
 class Recorrencia2Push extends BasePushNotification
 {
-    public function label(): string { return 'cliente_recorrencia_2'; }
-    public function title(): string { return 'Rotina em dia'; }
-    public function body(): string  { return 'Que tal agendar sua próxima diária?'; }
+    public function label(): string
+    {
+        return 'cliente_recorrencia_2';
+    }
 
-    public function target(): PushNotificationTargetEnum   { return PushNotificationTargetEnum::CLIENTE; }
-    public function category(): PushNotificationCategoryEnum { return PushNotificationCategoryEnum::RECORRENCIA; }
+    public function title(): string
+    {
+        return 'Rotina em dia';
+    }
+
+    public function body(): string
+    {
+        return 'Que tal agendar sua próxima diária?';
+    }
+
+    public function target(): PushNotificationTargetEnum
+    {
+        return PushNotificationTargetEnum::CLIENTE;
+    }
+
+    public function category(): PushNotificationCategoryEnum
+    {
+        return PushNotificationCategoryEnum::RECORRENCIA;
+    }
 
     public function eligibleUsers(): Collection
     {

+ 23 - 5
app/Notifications/Push/Cliente/Recorrencia/Recorrencia3Push.php

@@ -10,12 +10,30 @@ use Illuminate\Database\Eloquent\Collection;
 
 class Recorrencia3Push extends BasePushNotification
 {
-    public function label(): string { return 'cliente_recorrencia_3'; }
-    public function title(): string { return 'Casa limpa dura pouco'; }
-    public function body(): string  { return 'Garanta sua próxima diária no app.'; }
+    public function label(): string
+    {
+        return 'cliente_recorrencia_3';
+    }
 
-    public function target(): PushNotificationTargetEnum   { return PushNotificationTargetEnum::CLIENTE; }
-    public function category(): PushNotificationCategoryEnum { return PushNotificationCategoryEnum::RECORRENCIA; }
+    public function title(): string
+    {
+        return 'Casa limpa dura pouco';
+    }
+
+    public function body(): string
+    {
+        return 'Garanta sua próxima diária no app.';
+    }
+
+    public function target(): PushNotificationTargetEnum
+    {
+        return PushNotificationTargetEnum::CLIENTE;
+    }
+
+    public function category(): PushNotificationCategoryEnum
+    {
+        return PushNotificationCategoryEnum::RECORRENCIA;
+    }
 
     public function eligibleUsers(): Collection
     {

+ 32 - 7
app/Notifications/Push/Cliente/SocialProof/SocialProof1Push.php

@@ -10,15 +10,40 @@ use Illuminate\Database\Eloquent\Collection;
 
 class SocialProof1Push extends BasePushNotification
 {
-    public function label(): string { return 'cliente_social_proof_1'; }
-    public function title(): string { return 'Clientes como você'; }
-    public function body(): string  { return 'Já estão usando o Diária para facilitar a rotina.'; }
+    public function label(): string
+    {
+        return 'cliente_social_proof_1';
+    }
+
+    public function title(): string
+    {
+        return 'Clientes como você';
+    }
+
+    public function body(): string
+    {
+        return 'Já estão usando o Diária para facilitar a rotina.';
+    }
+
+    public function target(): PushNotificationTargetEnum
+    {
+        return PushNotificationTargetEnum::CLIENTE;
+    }
 
-    public function target(): PushNotificationTargetEnum   { return PushNotificationTargetEnum::CLIENTE; }
-    public function category(): PushNotificationCategoryEnum { return PushNotificationCategoryEnum::SOCIAL_PROOF; }
+    public function category(): PushNotificationCategoryEnum
+    {
+        return PushNotificationCategoryEnum::SOCIAL_PROOF;
+    }
 
-    public function notificationCooldownDays(): int { return 28; }
-    public function categoryCooldownDays(): int     { return 14; }
+    public function notificationCooldownDays(): int
+    {
+        return 28;
+    }
+
+    public function categoryCooldownDays(): int
+    {
+        return 14;
+    }
 
     /**
      * Elegível se:

+ 32 - 7
app/Notifications/Push/Cliente/SocialProof/SocialProof2Push.php

@@ -10,15 +10,40 @@ use Illuminate\Database\Eloquent\Collection;
 
 class SocialProof2Push extends BasePushNotification
 {
-    public function label(): string { return 'cliente_social_proof_2'; }
-    public function title(): string { return 'Diaristas bem avaliadas'; }
-    public function body(): string  { return 'Veja profissionais recomendadas perto de você.'; }
+    public function label(): string
+    {
+        return 'cliente_social_proof_2';
+    }
+
+    public function title(): string
+    {
+        return 'Diaristas bem avaliadas';
+    }
+
+    public function body(): string
+    {
+        return 'Veja profissionais recomendadas perto de você.';
+    }
+
+    public function target(): PushNotificationTargetEnum
+    {
+        return PushNotificationTargetEnum::CLIENTE;
+    }
 
-    public function target(): PushNotificationTargetEnum   { return PushNotificationTargetEnum::CLIENTE; }
-    public function category(): PushNotificationCategoryEnum { return PushNotificationCategoryEnum::SOCIAL_PROOF; }
+    public function category(): PushNotificationCategoryEnum
+    {
+        return PushNotificationCategoryEnum::SOCIAL_PROOF;
+    }
 
-    public function notificationCooldownDays(): int { return 28; }
-    public function categoryCooldownDays(): int     { return 14; }
+    public function notificationCooldownDays(): int
+    {
+        return 28;
+    }
+
+    public function categoryCooldownDays(): int
+    {
+        return 14;
+    }
 
     public function eligibleUsers(): Collection
     {

+ 10 - 10
app/Notifications/Push/Prestador/ReforcoEducativo/ReforcoEducativo1Push.php

@@ -62,16 +62,16 @@ class ReforcoEducativo1Push extends BasePushNotification
                     'provider_reforco_educativo_1',
                     'provider_reforco_educativo_2',
                 ]))
-                ->orWhereHas('pushNotificationLogs', function ($q) use ($threeWeeksAgo) {
-                    $q->where('label', 'provider_reforco_educativo_2')
-                        ->where('sent_at', '<=', $threeWeeksAgo)
-                        ->whereNotExists(function ($sub) use ($threeWeeksAgo) {
-                            $sub->from('push_notification_logs as pnl2')
-                                ->whereColumn('pnl2.user_id', 'push_notification_logs.user_id')
-                                ->where('pnl2.label', 'provider_reforco_educativo_1')
-                                ->where('pnl2.sent_at', '>', $threeWeeksAgo);
-                        });
-                });
+                    ->orWhereHas('pushNotificationLogs', function ($q) use ($threeWeeksAgo) {
+                        $q->where('label', 'provider_reforco_educativo_2')
+                            ->where('sent_at', '<=', $threeWeeksAgo)
+                            ->whereNotExists(function ($sub) use ($threeWeeksAgo) {
+                                $sub->from('push_notification_logs as pnl2')
+                                    ->whereColumn('pnl2.user_id', 'push_notification_logs.user_id')
+                                    ->where('pnl2.label', 'provider_reforco_educativo_1')
+                                    ->where('pnl2.sent_at', '>', $threeWeeksAgo);
+                            });
+                    });
             })
             ->get();
     }

+ 238 - 231
app/Services/AuthService.php

@@ -17,114 +17,114 @@ use Illuminate\Support\Str;
 
 class AuthService
 {
-  public function __construct(
-    private readonly EmailService $emailService,
-  ) {}
+    public function __construct(
+        private readonly EmailService $emailService,
+    ) {}
 
-  public function login(string $email, string $password): ?array
-  {
-    $user = User::where('email', $email)->first();
+    public function login(string $email, string $password): ?array
+    {
+        $user = User::where('email', $email)->first();
 
-    if (!$user || !in_array($user->type, [UserTypeEnum::ADMIN, UserTypeEnum::USER])) {
-      return null;
-    }
+        if (! $user || ! in_array($user->type, [UserTypeEnum::ADMIN, UserTypeEnum::USER])) {
+            return null;
+        }
 
-    if (!Auth::attempt(['email' => $email, 'password' => $password])) {
-      return null;
-    }
+        if (! Auth::attempt(['email' => $email, 'password' => $password])) {
+            return null;
+        }
 
-    // $user = User::where('email', $email)->first();
-    $deviceId = Str::uuid()->toString();
+        // $user = User::where('email', $email)->first();
+        $deviceId = Str::uuid()->toString();
 
         $accessToken = $user->createAccessToken($deviceId);
         $refreshToken = $user->createRefreshToken($deviceId);
 
-    return [
-      'payload' => [
-        'access_token' => $accessToken,
-        'user'         => $user,
-      ],
-      'refreshToken' => $refreshToken,
-    ];
-  }
-
-  public function refresh(string $refreshToken): ?array
-  {
-    if (!$refreshToken) {
-      return null;
+        return [
+            'payload' => [
+                'access_token' => $accessToken,
+                'user'         => $user,
+            ],
+            'refreshToken' => $refreshToken,
+        ];
     }
 
-    $tokenModel = PersonalAccessToken::findToken($refreshToken);
+    public function refresh(string $refreshToken): ?array
+    {
+        if (! $refreshToken) {
+            return null;
+        }
 
-    if (
-      !$tokenModel ||
-      !in_array("refresh", $tokenModel->abilities) ||
-      $tokenModel->expires_at < now()
-    ) {
-      return null;
-    }
+        $tokenModel = PersonalAccessToken::findToken($refreshToken);
 
-    $user = $tokenModel->tokenable;
-    if (!$user) {
-      return null;
-    }
+        if (
+            ! $tokenModel ||
+            ! in_array('refresh', $tokenModel->abilities) ||
+            $tokenModel->expires_at < now()
+        ) {
+            return null;
+        }
 
-    $deviceId = Str::afterLast($tokenModel->name, "_");
+        $user = $tokenModel->tokenable;
+        if (! $user) {
+            return null;
+        }
 
-    $tokens = $this->refreshTokenTransaction($tokenModel, $user, $deviceId);
+        $deviceId = Str::afterLast($tokenModel->name, '_');
 
-    return [
-      "payload" => [
-        "access_token" => $tokens["access_token"],
-        "user" => $user,
-      ],
-      "refreshToken" => $tokens["refresh_token"],
-    ];
-  }
+        $tokens = $this->refreshTokenTransaction($tokenModel, $user, $deviceId);
 
-  public function logout(): void
-  {
-    $user = Auth::user();
-    if (!$user) {
-      return;
+        return [
+            'payload' => [
+                'access_token' => $tokens['access_token'],
+                'user'         => $user,
+            ],
+            'refreshToken' => $tokens['refresh_token'],
+        ];
     }
 
+    public function logout(): void
+    {
+        $user = Auth::user();
+        if (! $user) {
+            return;
+        }
+
         $tokenName = $user->currentAccessToken()->name;
         $deviceId = Str::afterLast($tokenName, '_');
 
-    $user
-      ->tokens()
-      ->where("name", "like", "%_{$deviceId}")
-      ->delete();
-  }
-
-  protected function refreshTokenTransaction(
-    PersonalAccessToken $tokenModel,
-    User $user,
-    string $deviceId,
-  ): array {
-    return DB::transaction(function () use (
-      $tokenModel,
-      $user,
-      $deviceId,
+        $user
+            ->tokens()
+            ->where('name', 'like', "%_{$deviceId}")
+            ->delete();
+    }
+
+    protected function refreshTokenTransaction(
+        PersonalAccessToken $tokenModel,
+        User $user,
+        string $deviceId,
     ): array {
-      $tokenModel->update(["expires_at" => Carbon::now()]);
+        return DB::transaction(function () use (
+            $tokenModel,
+            $user,
+            $deviceId,
+        ): array {
+            $tokenModel->update(['expires_at' => Carbon::now()]);
 
             $accessToken = $user->createAccessToken($deviceId);
             $refreshToken = $user->createRefreshToken($deviceId);
 
-      return [
-        "access_token" => $accessToken,
-        "refresh_token" => $refreshToken,
-      ];
-    });
-  }
+            return [
+                'access_token'  => $accessToken,
+                'refresh_token' => $refreshToken,
+            ];
+        });
+    }
 
-  public function clientSendCode(array $data): bool|array|null
-  {
-    try {
-      DB::beginTransaction();
-      $code = str_pad((string) random_int(0, 999999), 6, '0', STR_PAD_LEFT);
+    public function clientSendCode(array $data): bool|array|null
+    {
+        try {
+            DB::beginTransaction();
+            $code = str_pad((string) random_int(0, 999999), 6, '0', STR_PAD_LEFT);
 
             $user = User::where(function ($query) use ($data) {
                 $query->when(! empty($data['email']), function ($q) use ($data) {
@@ -172,93 +172,99 @@ class AuthService
                 Client::create(['user_id' => $user->id]);
             }
 
-      if (!empty($data['email'])) {
-        $this->emailService->sendVerificationCode(
-          email: $data['email'],
-          code: $code,
-          recipientName: $data['name'] ?? '',
-        );
-      } elseif (!empty($data['phone'])) {
-        Log::info('SMS: envio de código por telefone ainda não implementado.', [
-          'phone' => $data['phone'],
-        ]);
-      }
-
-      DB::commit();
-      return $isLogin;
-    } catch (\Exception $e) {
-      DB::rollBack();
-      Log::error('Erro ao enviar código de verificação.', [
-        'error' => $e->getMessage(),
-        'data' => $data,
-      ]);
-      return false;
-    }
-  }
+            if (! empty($data['email'])) {
+                $this->emailService->sendVerificationCode(
+                    email: $data['email'],
+                    code: $code,
+                    recipientName: $data['name'] ?? '',
+                );
+            } elseif (! empty($data['phone'])) {
+                Log::info('SMS: envio de código por telefone ainda não implementado.', [
+                    'phone' => $data['phone'],
+                ]);
+            }
 
-  public function providerSendCode(array $data): bool|array|null
-  {
-    try {
-      DB::beginTransaction();
-      $code = str_pad((string) random_int(0, 999999), 6, '0', STR_PAD_LEFT);
+            DB::commit();
 
-      $user = User::where(function ($query) use ($data) {
-        $query->when(!empty($data['email']), function ($q) use ($data) {
-          $q->where('email', $data['email']);
-        })
-          ->when(!empty($data['phone']), function ($q) use ($data) {
-            $q->where('phone', $data['phone']);
-          });
-      })
-        ->first();
-      $isLogin = false;
-      if ($user) {
-        if ($user->type->value !== UserTypeEnum::PROVIDER->value) {
-          DB::rollBack();
-          return ['error' => 'wrong_user_type'];
+            return $isLogin;
+        } catch (\Exception $e) {
+            DB::rollBack();
+            Log::error('Erro ao enviar código de verificação.', [
+                'error' => $e->getMessage(),
+                'data'  => $data,
+            ]);
+
+            return false;
         }
-        $provider = Provider::where('user_id', $user->id)->first();
-        if($provider && $provider->approval_status->value !== ApprovalStatusEnum::ACCEPTED->value) {
-          DB::rollBack();
-          return ['error' => 'provider_not_accepted'];
+    }
+
+    public function providerSendCode(array $data): bool|array|null
+    {
+        try {
+            DB::beginTransaction();
+            $code = str_pad((string) random_int(0, 999999), 6, '0', STR_PAD_LEFT);
+
+            $user = User::where(function ($query) use ($data) {
+                $query->when(! empty($data['email']), function ($q) use ($data) {
+                    $q->where('email', $data['email']);
+                })
+                    ->when(! empty($data['phone']), function ($q) use ($data) {
+                        $q->where('phone', $data['phone']);
+                    });
+            })
+                ->first();
+            $isLogin = false;
+            if ($user) {
+                if ($user->type->value !== UserTypeEnum::PROVIDER->value) {
+                    DB::rollBack();
+
+                    return ['error' => 'wrong_user_type'];
+                }
+                $provider = Provider::where('user_id', $user->id)->first();
+                if ($provider && $provider->approval_status->value !== ApprovalStatusEnum::ACCEPTED->value) {
+                    DB::rollBack();
+
+                    return ['error' => 'provider_not_accepted'];
+                }
+
+                $user->code = $code;
+                $user->validated_code = false;
+                $user->save();
+                $isLogin = true;
+            } else {
+                $user = new User;
+                $user->fill($data);
+                $user->code = $code;
+                $user->name = $data['name'] ?? 'Usuário';
+                $user->type = $data['type'] ?? UserTypeEnum::PROVIDER->value;
+                $user->save();
+            }
+
+            if (! empty($data['email'])) {
+                $this->emailService->sendVerificationCode(
+                    email: $data['email'],
+                    code: $code,
+                    recipientName: $data['name'] ?? '',
+                );
+            } elseif (! empty($data['phone'])) {
+                Log::info('SMS: envio de código por telefone ainda não implementado.', [
+                    'phone' => $data['phone'],
+                ]);
+            }
+
+            DB::commit();
+
+            return $isLogin;
+        } catch (\Exception $e) {
+            DB::rollBack();
+            Log::error('Erro ao enviar código de verificação.', [
+                'error' => $e->getMessage(),
+                'data'  => $data,
+            ]);
+
+            return false;
         }
-         
-        $user->code = $code;
-        $user->validated_code = false;
-        $user->save();
-        $isLogin = true;
-      } else {
-        $user = new User();
-        $user->fill($data);
-        $user->code = $code;
-        $user->name = $data['name'] ?? 'Usuário';
-        $user->type = $data['type'] ?? UserTypeEnum::PROVIDER->value;
-        $user->save();
-      }
-
-      if (!empty($data['email'])) {
-        $this->emailService->sendVerificationCode(
-          email: $data['email'],
-          code: $code,
-          recipientName: $data['name'] ?? '',
-        );
-      } elseif (!empty($data['phone'])) {
-        Log::info('SMS: envio de código por telefone ainda não implementado.', [
-          'phone' => $data['phone'],
-        ]);
-      }
-
-      DB::commit();
-      return $isLogin;
-    } catch (\Exception $e) {
-      DB::rollBack();
-      Log::error('Erro ao enviar código de verificação.', [
-        'error' => $e->getMessage(),
-        'data' => $data,
-      ]);
-      return false;
     }
-  }
 
     public function validateCodeClient(array $data, bool $isLogin): bool|array
     {
@@ -266,23 +272,23 @@ class AuthService
         $phone = $data['phone'] ?? null;
         $code = $data['code'] ?? '';
 
-    $user = User::where(function ($query) use ($email, $phone) {
-        $query->when($email, fn($q) => $q->where('email', $email))
-              ->when($phone,  fn($q) => $q->where('phone', $phone));
-      })
-      ->where('code', $code)
-      ->first();
+        $user = User::where(function ($query) use ($email, $phone) {
+            $query->when($email, fn ($q) => $q->where('email', $email))
+                ->when($phone, fn ($q) => $q->where('phone', $phone));
+        })
+            ->where('code', $code)
+            ->first();
 
-    if (!$user) {
-      return false;
-    }
+        if (! $user) {
+            return false;
+        }
 
-    if ($isLogin) {
-      return $this->loginWithEmail($user->email, $code);
-    }
+        if ($isLogin) {
+            return $this->loginWithEmail($user->email, $code);
+        }
 
-    return true;
-  }
+        return true;
+    }
 
     public function validateCodeProvider(array $data, bool $isLogin): bool|array
     {
@@ -290,69 +296,70 @@ class AuthService
         $phone = $data['phone'] ?? null;
         $code = $data['code'] ?? '';
 
-    $user = User::where(function ($query) use ($email, $phone) {
-        $query->when($email, fn($q) => $q->where('email', $email))
-              ->when($phone,  fn($q) => $q->where('phone', $phone));
-      })
-      ->where('code', $code)
-      ->first();
+        $user = User::where(function ($query) use ($email, $phone) {
+            $query->when($email, fn ($q) => $q->where('email', $email))
+                ->when($phone, fn ($q) => $q->where('phone', $phone));
+        })
+            ->where('code', $code)
+            ->first();
 
-    if (!$user) {
-      return false;
-    }
+        if (! $user) {
+            return false;
+        }
+
+        if ($isLogin) {
+            $user->load('provider');
+            $provider = $user->provider ?? null;
 
-    if ($isLogin) {
-      $user->load('provider');
-      $provider = $user->provider ?? null;
+            if ($provider && $provider->approval_status === ApprovalStatusEnum::PENDING->value) {
+                return ['error' => 'provider_pending'];
+            }
 
-      if ($provider && $provider->approval_status === ApprovalStatusEnum::PENDING->value) {
-        return ['error' => 'provider_pending'];
-      }
+            if ($provider && $provider->approval_status === ApprovalStatusEnum::REJECTED->value) {
+                return ['error' => 'provider_rejected'];
+            }
 
-      if ($provider && $provider->approval_status === ApprovalStatusEnum::REJECTED->value) {
-        return ['error' => 'provider_rejected'];
-      }
+            return $this->loginWithEmail($user->email, $code);
+        }
 
-      return $this->loginWithEmail($user->email, $code);
+        return true;
     }
 
-    return true;
-  }
-
     public function validateCode(array $data, bool $isLogin): bool|array
     {
         $email = $data['email'] ?? null;
         $phone = $data['phone'] ?? null;
         $code = $data['code'] ?? '';
 
-    $user = User::where(function ($query) use ($email, $phone) {
-      $query->when($email, function ($q) use ($email) {
-        $q->where('email', $email);
-      })
-        ->when($phone, function ($q) use ($phone) {
-          $q->where('phone', $phone);
-        });
-    })
-      ->where('code', $code)
-      ->first();
+        $user = User::where(function ($query) use ($email, $phone) {
+            $query->when($email, function ($q) use ($email) {
+                $q->where('email', $email);
+            })
+                ->when($phone, function ($q) use ($phone) {
+                    $q->where('phone', $phone);
+                });
+        })
+            ->where('code', $code)
+            ->first();
 
-    if (!$user) {
-      return false;
-    }
+        if (! $user) {
+            return false;
+        }
 
-    if($isLogin) {
-      $resultLogin = $this->loginWithEmail($user->email, $code);
-      return $resultLogin;
-    }
+        if ($isLogin) {
+            $resultLogin = $this->loginWithEmail($user->email, $code);
+
+            return $resultLogin;
+        }
 
-    return true;
-  }
+        return true;
+    }
 
-  public function loginWithEmail(string $email, string $code): ?array
-  {
-    $user = User::where('email', $email)
-      ->where('code', $code)
-      ->first();
+    public function loginWithEmail(string $email, string $code): ?array
+    {
+        $user = User::where('email', $email)
+            ->where('code', $code)
+            ->first();
 
         if (! $user) {
             return null;
@@ -369,12 +376,12 @@ class AuthService
 
         $user->save();
 
-    return [
-      "payload" => [
-        "access_token" => $accessToken,
-        "user" => $user,
-      ],
-      "refreshToken" => $refreshToken,
-    ];
-  }
+        return [
+            'payload' => [
+                'access_token' => $accessToken,
+                'user'         => $user,
+            ],
+            'refreshToken' => $refreshToken,
+        ];
+    }
 }

+ 7 - 9
app/Services/CustomScheduleService.php

@@ -2,6 +2,7 @@
 
 namespace App\Services;
 
+use App\Enums\NotificationTypeEnum;
 use App\Models\Address;
 use App\Models\CustomSchedule;
 use App\Models\CustomScheduleSpeciality;
@@ -10,13 +11,10 @@ use App\Models\Schedule;
 use App\Models\ScheduleProposal;
 use App\Models\ScheduleRefuse;
 use App\Rules\ScheduleBusinessRules;
-use App\Services\DistanceService;
 use Carbon\Carbon;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Log;
 use Illuminate\Support\Facades\Storage;
-use App\Enums\NotificationTypeEnum;
-use App\Services\NotificationService;
 
 class CustomScheduleService
 {
@@ -110,7 +108,7 @@ class CustomScheduleService
             return $createdCustomSchedules;
         } catch (\Exception $e) {
             DB::rollBack();
-            Log::error('Error creating custom schedule: ' . $e->getMessage());
+            Log::error('Error creating custom schedule: '.$e->getMessage());
             throw $e;
         }
     }
@@ -202,7 +200,7 @@ class CustomScheduleService
             ]);
         } catch (\Exception $e) {
             DB::rollBack();
-            Log::error('Error updating custom schedule: ' . $e->getMessage());
+            Log::error('Error updating custom schedule: '.$e->getMessage());
             throw $e;
         }
     }
@@ -226,7 +224,7 @@ class CustomScheduleService
             return $customSchedule;
         } catch (\Exception $e) {
             DB::rollBack();
-            Log::error('Error deleting custom schedule: ' . $e->getMessage());
+            Log::error('Error deleting custom schedule: '.$e->getMessage());
             throw $e;
         }
     }
@@ -409,8 +407,7 @@ class CustomScheduleService
             $notificationService->create([
                 'title' => 'Proposta aceita!',
 
-                'description' =>
-                'O cliente aceitou sua proposta de diária.',
+                'description' => 'O cliente aceitou sua proposta de diária.',
 
                 'origin' => 'schedule',
 
@@ -543,13 +540,14 @@ class CustomScheduleService
             $firstSchedule = $clientSchedules->first();
 
             $clientPhotoPath = $firstSchedule->client->profileMedia?->path;
+
             return [
                 'client_id'      => $firstSchedule->client_id,
                 'client_name'    => $firstSchedule->client->user->name ?? 'N/A',
                 'customer_photo' => $clientPhotoPath
                     ? Storage::temporaryUrl($clientPhotoPath, now()->addMinutes(60))
                     : null,
-                'schedules'   => $clientSchedules->map(function ($schedule) {
+                'schedules' => $clientSchedules->map(function ($schedule) {
                     $customSchedule = $schedule->customSchedule;
 
                     return [

+ 21 - 21
app/Services/DashboardService.php

@@ -7,15 +7,14 @@ use App\Models\Address;
 use App\Models\Client;
 use App\Models\ClientFavoriteProvider;
 use App\Models\ClientPaymentMethod;
+use App\Models\Notification;
 use App\Models\Provider;
 use App\Models\ProviderSpeciality;
 use App\Models\Review;
 use App\Models\Schedule;
 use App\Models\ScheduleProposal;
 use App\Models\Speciality;
-use App\Models\Notification;
 use App\Rules\ScheduleBusinessRules;
-use App\Services\DistanceService;
 use Illuminate\Auth\Access\AuthorizationException;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\DB;
@@ -53,8 +52,8 @@ class DashboardService
             ->first();
 
         $summaryInfos = [
-            'name'             => $user->name,
-            'profile_photo'    => $cliente->profileMedia?->path
+            'name'          => $user->name,
+            'profile_photo' => $cliente->profileMedia?->path
                 ? Storage::temporaryUrl($cliente->profileMedia->path, now()->addMinutes(60))
                 : null,
             'address'          => $address,
@@ -152,7 +151,7 @@ class DashboardService
             unset($item->provider_photo_path);
         });
 
-        $blockedProviderIds       = ScheduleBusinessRules::getBlockedProviderIdsForClient($cliente->id);
+        $blockedProviderIds = ScheduleBusinessRules::getBlockedProviderIdsForClient($cliente->id);
         $providersWithWorkingDays = ScheduleBusinessRules::getProviderIdsWithWorkingDays();
 
         $clientPrimaryAddress = Address::where('source', 'client')
@@ -336,6 +335,7 @@ class DashboardService
                 $item->provider_photo = $item->provider_photo
                     ? Storage::temporaryUrl($item->provider_photo, now()->addMinutes(60))
                     : null;
+
                 return $item;
             });
 
@@ -346,12 +346,12 @@ class DashboardService
             ->get()
             ->map(function ($notification) {
                 return [
-                    'id' => $notification->id,
-                    'title' => $notification->title,
+                    'id'          => $notification->id,
+                    'title'       => $notification->title,
                     'description' => $notification->description,
-                    'time' => $notification->created_at->diffForHumans(),
-                    'read' => $notification->read,
-                    'avatar' => '/icons/avatar.svg',
+                    'time'        => $notification->created_at->diffForHumans(),
+                    'read'        => $notification->read,
+                    'avatar'      => '/icons/avatar.svg',
                 ];
             });
 
@@ -402,7 +402,7 @@ class DashboardService
             ->pluck('speciality_id')
             ->all();
 
-        $specialities = $allSpecialities->map(fn($sp) => [
+        $specialities = $allSpecialities->map(fn ($sp) => [
             'id'             => $sp->id,
             'description'    => $sp->description,
             'has_speciality' => in_array($sp->id, $providerSpecialityIds),
@@ -414,8 +414,8 @@ class DashboardService
             'provider_photo'      => $schedule->provider_photo
                 ? Storage::temporaryUrl($schedule->provider_photo, now()->addMinutes(60))
                 : null,
-            'offers_meal'         => $schedule->offers_meal,
-            'specialities'        => $specialities,
+            'offers_meal'  => $schedule->offers_meal,
+            'specialities' => $specialities,
         ];
     }
 
@@ -438,8 +438,8 @@ class DashboardService
         $address = Address::where('source', 'provider')->where('source_id', $provider->id)->with(['city', 'state'])->first();
 
         $summaryInfos = [
-            'name'             => $user->name,
-            'profile_photo'    => $provider->profileMedia?->path
+            'name'          => $user->name,
+            'profile_photo' => $provider->profileMedia?->path
                 ? Storage::temporaryUrl($provider->profileMedia->path, now()->addMinutes(60))
                 : null,
             'address'          => $address,
@@ -621,12 +621,12 @@ class DashboardService
             ->get()
             ->map(function ($notification) {
                 return [
-                    'id' => $notification->id,
-                    'title' => $notification->title,
+                    'id'          => $notification->id,
+                    'title'       => $notification->title,
                     'description' => $notification->description,
-                    'time' => $notification->created_at->diffForHumans(),
-                    'read' => $notification->read,
-                    'avatar' => '/icons/avatar.svg',
+                    'time'        => $notification->created_at->diffForHumans(),
+                    'read'        => $notification->read,
+                    'avatar'      => '/icons/avatar.svg',
                 ];
             });
 
@@ -646,7 +646,7 @@ class DashboardService
             'todayServices'  => $todayServices,
             'nextSchedules'  => $nextSchedules,
             'opportunities'  => $opportunities,
-            'notifications' => $notifications,
+            'notifications'  => $notifications,
         ];
     }
 

+ 1 - 1
app/Services/DistanceService.php

@@ -44,7 +44,7 @@ class DistanceService
                 WHEN {$targetLatCol} IS NOT NULL
                 AND {$targetLngCol} IS NOT NULL
                 THEN ROUND((
-                    " . self::EARTH_RADIUS_KM . " * acos(
+                    ".self::EARTH_RADIUS_KM." * acos(
                         least(1, greatest(-1,
                             cos(radians({$clientLatitude}))
                             * cos(radians({$targetLatCol}))

+ 1 - 1
app/Services/MediaService.php

@@ -10,7 +10,7 @@ use Illuminate\Http\UploadedFile;
 
 class MediaService
 {
-    use UploadsFile, RemoveArchiveS3;
+    use RemoveArchiveS3, UploadsFile;
 
     public function getAll(): Collection
     {

+ 2 - 2
app/Services/NotificationService.php

@@ -28,7 +28,7 @@ class NotificationService
     public function markAsRead(Notification $notification): Notification
     {
         $notification->update([
-            'read' => true,
+            'read'    => true,
             'read_at' => now(),
         ]);
 
@@ -40,7 +40,7 @@ class NotificationService
         Notification::where('user_id', $userId)
             ->where('read', false)
             ->update([
-                'read' => true,
+                'read'    => true,
                 'read_at' => now(),
             ]);
     }

+ 2 - 3
app/Services/Pagarme/Concerns/SendsPagarmeRequests.php

@@ -2,7 +2,6 @@
 
 namespace App\Services\Pagarme\Concerns;
 
-use App\Data\Pagarme\PagarmeData;
 use Illuminate\Support\Facades\Http;
 use Illuminate\Support\Facades\Log;
 use Throwable;
@@ -14,9 +13,9 @@ trait SendsPagarmeRequests
         string $path,
         string $idempotencyKey,
         string $errorMessage,
-        array|PagarmeData $payload,
+        array|Data $payload,
     ): array {
-        $payload = $payload instanceof PagarmeData ? $payload->toArray() : $payload;
+        $payload = $payload instanceof Data ? $payload->toArray() : $payload;
 
         $endpoint = $this->pagarmeUrl($path);
 

+ 6 - 6
app/Services/Pagarme/PagarmeCardService.php

@@ -2,9 +2,9 @@
 
 namespace App\Services\Pagarme;
 
-use App\Data\Pagarme\Request\PagarmeCardRequestData\PagarmeCardBillingAddressData;
-use App\Data\Pagarme\Request\PagarmeCardRequestData\PagarmeCardRequestData;
-use App\Data\Pagarme\Response\PagarmeCardResponseData;
+use App\Data\Pagarme\Request\CardRequestData\CardBillingAddressData;
+use App\Data\Pagarme\Request\CardRequestData\CardRequestData;
+use App\Data\Pagarme\Response\CardResponseData;
 use App\Models\Address;
 use App\Models\ClientPaymentMethod;
 use App\Services\Pagarme\Concerns\SendsPagarmeRequests;
@@ -30,14 +30,14 @@ class PagarmeCardService
             []
         );
 
-        $cardData = PagarmeCardResponseData::fromArray($this->pagarmeRequest(
+        $cardData = CardResponseData::fromArray($this->pagarmeRequest(
             method: 'POST',
             path: "/customers/{$customerId}/cards",
 
-            payload: new PagarmeCardRequestData(
+            payload: new CardRequestData(
                 token: $paymentMethod->token,
                 label: $paymentMethod->card_name,
-                billingAddress: PagarmeCardBillingAddressData::fromAddress(
+                billingAddress: CardBillingAddressData::fromAddress(
                     Address::query()
                         ->with(['city.state', 'state'])
                         ->where('source', 'client')

+ 32 - 32
app/Services/Pagarme/PagarmeCustomerService.php

@@ -2,11 +2,11 @@
 
 namespace App\Services\Pagarme;
 
-use App\Data\Pagarme\Request\PagarmeCustomerRequestData\PagarmeCustomerAddressRequestData;
-use App\Data\Pagarme\Request\PagarmeCustomerRequestData\PagarmeCustomerPhonesRequestData\PagarmeCustomerPhoneData;
-use App\Data\Pagarme\Request\PagarmeCustomerRequestData\PagarmeCustomerPhonesRequestData\PagarmeCustomerPhonesRequestData;
-use App\Data\Pagarme\Request\PagarmeCustomerRequestData\PagarmeCustomerRequestData;
-use App\Data\Pagarme\Response\PagarmeCustomerResponseData\PagarmeCustomerResponseData;
+use App\Data\Pagarme\Request\CustomerRequestData\CustomerAddressRequestData;
+use App\Data\Pagarme\Request\CustomerRequestData\CustomerPhonesRequestData\CustomerPhoneData;
+use App\Data\Pagarme\Request\CustomerRequestData\CustomerPhonesRequestData\CustomerPhonesRequestData;
+use App\Data\Pagarme\Request\CustomerRequestData\CustomerRequestData;
+use App\Data\Pagarme\Response\CustomerResponseData\CustomerResponseData;
 use App\Models\Client;
 use App\Services\Pagarme\Concerns\SendsPagarmeRequests;
 use Illuminate\Support\Str;
@@ -23,28 +23,28 @@ class PagarmeCustomerService
 
         $client->loadMissing('user');
 
-        $name  = $client->user?->name ?? $data['name'] ?? 'Cliente';
+        $name = $client->user?->name ?? $data['name'] ?? 'Cliente';
         $email = $client->user?->email ?? $data['email'] ?? null;
-        $code  = $this->ensureCustomerCode($client);
+        $code = $this->ensureCustomerCode($client);
 
-        $document    = $this->onlyDigits($client->document ?? $data['document'] ?? null);
+        $document = $this->onlyDigits($client->document ?? $data['document'] ?? null);
         $documentLen = strlen($document);
 
         $address = $this->buildAddressData($data);
-        $phones  = $this->buildPhones($client->user?->phone ?? $data['phone'] ?? null);
+        $phones = $this->buildPhones($client->user?->phone ?? $data['phone'] ?? null);
 
-        $customerRequest = new PagarmeCustomerRequestData(
-            name:         $name,
-            email:        (string) $email,
-            document:     $document,
-            type:         $documentLen === 14 ? 'company' : 'individual',
+        $customerRequest = new CustomerRequestData(
+            name: $name,
+            email: (string) $email,
+            document: $document,
+            type: $documentLen === 14 ? 'company' : 'individual',
             documentType: $documentLen === 14 ? 'CNPJ' : 'CPF',
-            code:         $code,
-            address:      $address,
-            phones:       $phones,
+            code: $code,
+            address: $address,
+            phones: $phones,
         );
 
-        $customerData = PagarmeCustomerResponseData::fromArray($this->pagarmeRequest(
+        $customerData = CustomerResponseData::fromArray($this->pagarmeRequest(
             method: 'POST',
             path: '/customers',
             payload: $customerRequest,
@@ -64,7 +64,7 @@ class PagarmeCustomerService
 
     //
 
-    private function buildAddressData(array $data): PagarmeCustomerAddressRequestData
+    private function buildAddressData(array $data): CustomerAddressRequestData
     {
         $line1Parts = array_filter([
             (string) ($data['number'] ?? '0'),
@@ -72,37 +72,37 @@ class PagarmeCustomerService
             (string) ($data['district'] ?? ''),
         ], static fn ($value) => $value !== '');
 
-        return new PagarmeCustomerAddressRequestData(
-            line1:   implode(', ', $line1Parts),
-            line2:   (string) ($data['complement'] ?? $data['instructions'] ?? ''),
+        return new CustomerAddressRequestData(
+            line1: implode(', ', $line1Parts),
+            line2: (string) ($data['complement'] ?? $data['instructions'] ?? ''),
             zipCode: $this->onlyDigits($data['zip_code'] ?? null),
-            city:    (string) ($data['city'] ?? ''),
-            state:   (string) ($data['state'] ?? ''),
+            city: (string) ($data['city'] ?? ''),
+            state: (string) ($data['state'] ?? ''),
             country: (string) ($data['country'] ?? 'BR'),
         );
     }
 
-    private function buildPhones(?string $phone): PagarmeCustomerPhonesRequestData
+    private function buildPhones(?string $phone): CustomerPhonesRequestData
     {
         $digits = $this->onlyDigits($phone);
 
         if ($digits === '') {
-            return new PagarmeCustomerPhonesRequestData;
+            return new CustomerPhonesRequestData;
         }
 
         $areaCode = substr($digits, 0, 2);
-        $number   = substr($digits, 2);
+        $number = substr($digits, 2);
 
         if (strlen($digits) <= 2) {
             $areaCode = '';
-            $number   = $digits;
+            $number = $digits;
         }
 
-        return new PagarmeCustomerPhonesRequestData(
-            mobilePhone: new PagarmeCustomerPhoneData(
+        return new CustomerPhonesRequestData(
+            mobilePhone: new CustomerPhoneData(
                 countryCode: '55',
-                areaCode:    $areaCode,
-                number:      $number,
+                areaCode: $areaCode,
+                number: $number,
             ),
         );
     }

+ 270 - 47
app/Services/Pagarme/PagarmePaymentService.php

@@ -2,17 +2,25 @@
 
 namespace App\Services\Pagarme;
 
-use App\Data\Pagarme\Request\PagarmeCustomerRequestData\PagarmeCustomerRequestData;
-use App\Data\Pagarme\Request\PagarmeOrderRequestData\PagarmeOrderItemData;
-use App\Data\Pagarme\Request\PagarmeOrderRequestData\PagarmeOrderPaymentData\PagarmeOrderCreditCardData;
-use App\Data\Pagarme\Request\PagarmeOrderRequestData\PagarmeOrderPaymentData\PagarmeOrderPaymentData;
-use App\Data\Pagarme\Request\PagarmeOrderRequestData\PagarmeOrderPaymentData\PagarmeOrderPixData;
-use App\Data\Pagarme\Request\PagarmeOrderRequestData\PagarmeOrderRequestData;
-use App\Data\Pagarme\Response\PagarmeOrderResponseData\PagarmeOrderResponseData;
+use App\Data\Pagarme\Request\CustomerRequestData\CustomerAddressRequestData;
+use App\Data\Pagarme\Request\CustomerRequestData\CustomerPhonesRequestData\CustomerPhoneData;
+use App\Data\Pagarme\Request\CustomerRequestData\CustomerPhonesRequestData\CustomerPhonesRequestData;
+use App\Data\Pagarme\Request\CustomerRequestData\CustomerRequestData;
+use App\Data\Pagarme\Request\OrderRequestData\OrderItemData;
+use App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData\OrderCreditCardData;
+use App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData\OrderPaymentData;
+use App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData\OrderPixAdditionalInformationData;
+use App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData\OrderPixData;
+use App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData\OrderSplitData;
+use App\Data\Pagarme\Request\OrderRequestData\OrderPaymentData\OrderSplitOptionsData;
+use App\Data\Pagarme\Request\OrderRequestData\OrderRequestData;
+use App\Data\Pagarme\Response\OrderResponseData\OrderResponseData;
 use App\Enums\PaymentSplitStatusEnum;
 use App\Enums\PaymentStatusEnum;
+use App\Models\Address;
 use App\Models\Payment;
 use App\Models\PaymentSplit;
+use App\Models\Schedule;
 use App\Services\Pagarme\Concerns\SendsPagarmeRequests;
 use Illuminate\Support\Str;
 
@@ -20,18 +28,73 @@ class PagarmePaymentService
 {
     use SendsPagarmeRequests;
 
+    public function processPayment(
+        Payment $payment,
+        Schedule $schedule,
+        string $paymentMethod,
+        ?string $cardId = null,
+        array $options = [],
+    ): array {
+        $grossAmount = (float) $payment->gross_amount;
+
+        $items = $this->buildOrderItems($schedule, $grossAmount);
+        $customer = $this->buildCustomer($schedule, $options);
+        $split = $this->buildSplit($payment, $options);
+
+        $pixOptions = config('services.pagarme.pix_disable_split')
+            ? []
+            : ['split' => $split];
+
+        $orderOptions = array_merge(['split' => $split], $pixOptions);
+
+        if ($paymentMethod === 'credit_card') {
+            $creditCard = new OrderCreditCardData(
+                cardId: $cardId,
+                installments: 1,
+                statementDescriptor: Str::limit((string) config('app.name', 'SOFTPAR'), 13, ''),
+                operationType: 'auth_and_capture',
+            );
+
+            return $this->createOrderWithCreditCard(
+                payment: $payment,
+                items: $items,
+                customer: $customer,
+                creditCard: $creditCard,
+                options: $orderOptions,
+            );
+        }
+
+        $pixData = new OrderPixData(
+            expiresIn: 1800,
+            additionalInformation: [
+                new OrderPixAdditionalInformationData(
+                    name: 'Agendamento',
+                    value: (string) $schedule->id,
+                ),
+            ],
+        );
+
+        return $this->createOrderWithPix(
+            payment: $payment,
+            items: $items,
+            customer: $customer,
+            pix: $pixData,
+            options: $pixOptions,
+        );
+    }
+
     public function createOrderWithCreditCard(
         Payment $payment,
         array $items,
-        PagarmeCustomerRequestData $customer,
-        PagarmeOrderCreditCardData $creditCard,
+        CustomerRequestData $customer,
+        OrderCreditCardData $creditCard,
         array $options = []
     ): array {
         return $this->createOrder(
             payment: $payment,
             items: $items,
             customer: $customer,
-            paymentMethod: PagarmeOrderRequestData::creditCardPaymentMethod(
+            paymentMethod: OrderRequestData::creditCardPaymentMethod(
                 creditCard: $creditCard,
                 split: is_array($options['split'] ?? null) ? $options['split'] : null,
             ),
@@ -42,15 +105,15 @@ class PagarmePaymentService
     public function createOrderWithPix(
         Payment $payment,
         array $items,
-        PagarmeCustomerRequestData $customer,
-        PagarmeOrderPixData $pix,
+        CustomerRequestData $customer,
+        OrderPixData $pix,
         array $options = []
     ): array {
         return $this->createOrder(
             payment: $payment,
             items: $items,
             customer: $customer,
-            paymentMethod: PagarmeOrderRequestData::pixPaymentMethod(
+            paymentMethod: OrderRequestData::pixPaymentMethod(
                 pix: $pix,
                 split: is_array($options['split'] ?? null) ? $options['split'] : null,
             ),
@@ -58,13 +121,11 @@ class PagarmePaymentService
         );
     }
 
-    // criacao de pedidos por metodo de pagamento
-
     public function createOrder(
         Payment $payment,
         array $items,
-        PagarmeCustomerRequestData $customer,
-        PagarmeOrderPaymentData $paymentMethod,
+        CustomerRequestData $customer,
+        OrderPaymentData $paymentMethod,
         array $options = []
     ): array {
         $metadata = array_merge([
@@ -74,18 +135,18 @@ class PagarmePaymentService
             'provider_id' => (string) $payment->provider_id,
         ], $options['metadata'] ?? []);
 
-        $requestData = new PagarmeOrderRequestData(
-            code:       $this->ensurePaymentCode($payment),
-            items:      $items,
-            payments:   [$paymentMethod],
-            metadata:   $metadata,
-            customer:   $customer,
+        $requestData = new OrderRequestData(
+            code: $this->ensurePaymentCode($payment),
+            items: $items,
+            payments: [$paymentMethod],
+            metadata: $metadata,
+            customer: $customer,
             customerId: $options['customer_id'] ?? null,
-            closed:     $options['closed'] ?? true,
-            channel:    $options['channel'] ?? null,
+            closed: $options['closed'] ?? true,
+            channel: $options['channel'] ?? null,
         );
 
-        $order = PagarmeOrderResponseData::fromArray($this->pagarmeRequest(
+        $order = OrderResponseData::fromArray($this->pagarmeRequest(
             method: 'POST',
             path: '/orders',
             payload: $requestData,
@@ -98,31 +159,11 @@ class PagarmePaymentService
         return $order->toArray();
     }
 
-    // evita criacao duplicada de pedidos
-
-    private function idempotencyKey(Payment $payment): string
-    {
-        return "payment-{$payment->id}-schedule-{$payment->schedule_id}";
-    }
-
-    private function ensurePaymentCode(Payment $payment): string
-    {
-        if (! empty($payment->gateway_code)) {
-            return $payment->gateway_code;
-        }
-
-        $code = 'payment-'.(string) Str::uuid();
-
-        $payment->forceFill(['gateway_code' => $code])->save();
-
-        return $code;
-    }
-
     //
 
     public function applyGatewayResponseToPayment(Payment $payment, array $orderResponse): Payment
     {
-        $order = PagarmeOrderResponseData::fromArray($orderResponse);
+        $order = OrderResponseData::fromArray($orderResponse);
         $newStatus = $order->paymentStatus();
         $failureCode = null;
         $failureMessage = null;
@@ -160,4 +201,186 @@ class PagarmePaymentService
 
         return $payment->fresh();
     }
+
+    //
+
+    public function ensureCustomerPhone(Schedule $schedule, array $options): void
+    {
+        $phone = $this->buildPhonePayload($schedule->client?->user?->phone)
+            ?: $this->buildPhonePayload($options['phone'] ?? null);
+
+        if (! $phone) {
+            throw new \InvalidArgumentException(
+                'Voce precisa cadastrar um numero de celular valido no seu perfil para concluir o pagamento.'
+            );
+        }
+    }
+
+    //
+
+    private function buildOrderItems(Schedule $schedule, float $grossAmount): array
+    {
+        $description = $schedule->customSchedule?->serviceType?->description
+            ?? "Servico {$schedule->id}";
+
+        return [new OrderItemData(
+            code: "schedule-{$schedule->id}",
+            amount: OrderRequestData::amountInCents($grossAmount),
+            quantity: 1,
+            description: $description,
+        )];
+    }
+
+    private function buildCustomer(Schedule $schedule, array $options = []): CustomerRequestData
+    {
+        $client = $schedule->client;
+        $user = $client->user()->first(['id', 'name', 'email', 'phone']);
+        $address = Address::with(['city.state', 'state'])->find($schedule->address_id);
+
+        foreach ([
+            'nome'      => $user?->name,
+            'email'     => $user?->email,
+            'documento' => $client->document,
+        ] as $field => $value) {
+            if ($value === null || $value === '') {
+                throw new \InvalidArgumentException("Cliente precisa ter {$field} para criar pedido no Pagar.me.");
+            }
+        }
+
+        if (! $address) {
+            throw new \InvalidArgumentException('Endereco do agendamento nao encontrado para criar pedido no Pagar.me.');
+        }
+
+        $document = $this->digits($client->document);
+
+        $phone = $this->buildPhonePayload($user->phone)
+            ?: $this->buildPhonePayload($options['phone'] ?? null);
+
+        $state = $address->state?->code ?? $address->city?->state?->code;
+        $city = $address->city?->name;
+        $zipCode = $this->digits($address->zip_code);
+
+        $line1 = implode(', ', array_filter([
+            $address->number ?: 'S/N',
+            $address->address,
+            $address->district,
+        ]));
+
+        foreach ([
+            'documento' => $document,
+            'estado'    => $state,
+            'cidade'    => $city,
+            'cep'       => $zipCode,
+            'endereco'  => $line1,
+            'telefone'  => $phone,
+        ] as $field => $value) {
+            if ($value === null || $value === '' || $value === []) {
+                throw new \InvalidArgumentException("Cliente precisa ter {$field} valido para criar pedido no Pagar.me.");
+            }
+        }
+
+        $customerAddress = new CustomerAddressRequestData(
+            line1: $line1,
+            line2: $address->complement ?: $address->instructions,
+            zipCode: $zipCode,
+            city: $city,
+            state: $state,
+            country: 'BR',
+        );
+
+        $customerPhones = null;
+
+        if ($phone) {
+            $customerPhones = new CustomerPhonesRequestData(
+                mobilePhone: new CustomerPhoneData(
+                    countryCode: $phone['country_code'],
+                    areaCode: $phone['area_code'],
+                    number: $phone['number'],
+                ),
+            );
+        }
+
+        return new CustomerRequestData(
+            name: $user->name,
+            email: $user->email,
+            document: $document,
+            type: strlen($document) === 14 ? 'company' : 'individual',
+            documentType: strlen($document) === 14 ? 'CNPJ' : 'CPF',
+            code: "client-{$client->id}",
+            address: $customerAddress,
+            phones: $customerPhones,
+        );
+    }
+
+    private function buildPhonePayload(?string $phone): ?array
+    {
+        $digits = $this->digits($phone);
+
+        if (strlen($digits) < 10) {
+            return null;
+        }
+
+        if (str_starts_with($digits, '55')) {
+            $digits = substr($digits, 2);
+        }
+
+        return [
+            'country_code' => '55',
+            'area_code'    => substr($digits, 0, 2),
+            'number'       => substr($digits, 2),
+        ];
+    }
+
+    private function buildSplit(Payment $payment, array $options): array
+    {
+        $transfers = PaymentSplit::query()
+            ->where('payment_id', $payment->id)
+            ->get();
+
+        $split = OrderRequestData::splitFromTransfers($transfers);
+
+        $platformFee = (float) ($payment->platform_fee_amount ?? 0);
+
+        if ($platformFee > 0) {
+            $platformRecipientId = config('services.pagarme.platform_recipient_id');
+
+            $split[] = new OrderSplitData(
+                amount: OrderRequestData::amountInCents($platformFee),
+                recipientId: $platformRecipientId,
+                type: 'flat',
+                options: new OrderSplitOptionsData(
+                    chargeProcessingFee: true,
+                    chargeRemainderFee: true,
+                    liable: true,
+                ),
+            );
+        }
+
+        return $split;
+    }
+
+    private function digits(?string $value): string
+    {
+        return preg_replace('/\D+/', '', (string) $value) ?? '';
+    }
+
+    //
+
+    private function idempotencyKey(Payment $payment): string
+    {
+        return "payment-{$payment->id}-schedule-{$payment->schedule_id}";
+    }
+
+    private function ensurePaymentCode(Payment $payment): string
+    {
+        if (! empty($payment->gateway_code)) {
+            return $payment->gateway_code;
+        }
+
+        $code = 'payment-'.(string) Str::uuid();
+
+        $payment->forceFill(['gateway_code' => $code])->save();
+
+        return $code;
+    }
 }

+ 65 - 65
app/Services/Pagarme/PagarmeRecipientService.php

@@ -2,16 +2,16 @@
 
 namespace App\Services\Pagarme;
 
-use App\Data\Pagarme\Request\PagarmeBankAccountUpdateRequestData;
-use App\Data\Pagarme\Request\PagarmeRecipientRequestData\PagarmeRecipientAddressData;
-use App\Data\Pagarme\Request\PagarmeRecipientRequestData\PagarmeRecipientAutomaticAnticipationSettingsData;
-use App\Data\Pagarme\Request\PagarmeRecipientRequestData\PagarmeRecipientBankAccountData;
-use App\Data\Pagarme\Request\PagarmeRecipientRequestData\PagarmeRecipientPhoneData;
-use App\Data\Pagarme\Request\PagarmeRecipientRequestData\PagarmeRecipientPhoneNumbersData;
-use App\Data\Pagarme\Request\PagarmeRecipientRequestData\PagarmeRecipientRegisterInformationData;
-use App\Data\Pagarme\Request\PagarmeRecipientRequestData\PagarmeRecipientRequestData;
-use App\Data\Pagarme\Request\PagarmeRecipientRequestData\PagarmeRecipientTransferSettingsData;
-use App\Data\Pagarme\Response\PagarmeRecipientResponseData\PagarmeRecipientResponseData;
+use App\Data\Pagarme\Request\BankAccountUpdateRequestData;
+use App\Data\Pagarme\Request\RecipientRequestData\RecipientAddressData;
+use App\Data\Pagarme\Request\RecipientRequestData\RecipientAutomaticAnticipationSettingsData;
+use App\Data\Pagarme\Request\RecipientRequestData\RecipientBankAccountData;
+use App\Data\Pagarme\Request\RecipientRequestData\RecipientPhoneData;
+use App\Data\Pagarme\Request\RecipientRequestData\RecipientPhoneNumbersData;
+use App\Data\Pagarme\Request\RecipientRequestData\RecipientRegisterInformationData;
+use App\Data\Pagarme\Request\RecipientRequestData\RecipientRequestData;
+use App\Data\Pagarme\Request\RecipientRequestData\RecipientTransferSettingsData;
+use App\Data\Pagarme\Response\RecipientResponseData\RecipientResponseData;
 use App\Models\Provider;
 use App\Services\Pagarme\Concerns\SendsPagarmeRequests;
 use Carbon\Carbon;
@@ -27,33 +27,33 @@ class PagarmeRecipientService
             return $provider->recipient_id;
         }
 
-        $metadata      = $data['recipient_metadata'] ?? [];
-        $paymentMode   = $data['recipient_payment_mode'];
+        $metadata = $data['recipient_metadata'] ?? [];
+        $paymentMode = $data['recipient_payment_mode'];
         $recipientCode = $this->ensureRecipientCode($provider);
 
         $addressParts = $this->extractAddressParts($data);
 
-        $registerInformation = new PagarmeRecipientRegisterInformationData(
-            name:                   $data['recipient_name'],
-            email:                  $data['recipient_email'],
-            document:               $this->onlyDigits($data['recipient_document'] ?? null),
-            type:                   $data['recipient_type'] ?? 'individual',
-            birthdate:              $this->formatBirthdate($data['birth_date'] ?? null),
-            monthlyIncome:          isset($data['monthly_income']) ? (int) $data['monthly_income'] : 1000,
+        $registerInformation = new RecipientRegisterInformationData(
+            name: $data['recipient_name'],
+            email: $data['recipient_email'],
+            document: $this->onlyDigits($data['recipient_document'] ?? null),
+            type: $data['recipient_type'] ?? 'individual',
+            birthdate: $this->formatBirthdate($data['birth_date'] ?? null),
+            monthlyIncome: isset($data['monthly_income']) ? (int) $data['monthly_income'] : 1000,
             professionalOccupation: $data['professional_occupation'] ?? 'autonomo',
 
-            phoneNumbers: new PagarmeRecipientPhoneNumbersData(
+            phoneNumbers: new RecipientPhoneNumbersData(
                 $this->buildRecipientPhone($data['phone'] ?? null),
             ),
 
-            address: new PagarmeRecipientAddressData(
-                street:         $data['address'],
-                complementary:  $addressParts['complementary'],
-                streetNumber:   $addressParts['street_number'],
-                neighborhood:   $addressParts['neighborhood'],
-                city:           $data['city'] ?? null,
-                state:          $data['state'] ?? null,
-                zipCode:        $this->onlyDigits($data['zip_code'] ?? null),
+            address: new RecipientAddressData(
+                street: $data['address'],
+                complementary: $addressParts['complementary'],
+                streetNumber: $addressParts['street_number'],
+                neighborhood: $addressParts['neighborhood'],
+                city: $data['city'] ?? null,
+                state: $data['state'] ?? null,
+                zipCode: $this->onlyDigits($data['zip_code'] ?? null),
                 referencePoint: $addressParts['reference_point'],
             ),
         );
@@ -62,19 +62,19 @@ class PagarmeRecipientService
             $data['recipient_default_bank_account'],
         );
 
-        $payload = new PagarmeRecipientRequestData(
+        $payload = new RecipientRequestData(
             code: $recipientCode,
 
             registerInformation: $registerInformation,
-            defaultBankAccount:  $defaultBankAccount,
+            defaultBankAccount: $defaultBankAccount,
 
-            transferSettings: new PagarmeRecipientTransferSettingsData(
-                transferEnabled:  false,
+            transferSettings: new RecipientTransferSettingsData(
+                transferEnabled: false,
                 transferInterval: 'Daily',
-                transferDay:      0,
+                transferDay: 0,
             ),
 
-            automaticAnticipationSettings: new PagarmeRecipientAutomaticAnticipationSettingsData(
+            automaticAnticipationSettings: new RecipientAutomaticAnticipationSettingsData(
                 enabled: false,
             ),
         );
@@ -89,7 +89,7 @@ class PagarmeRecipientService
             errorMessage: 'Erro ao criar recebedor no Pagar.me.',
         );
 
-        $recipientData = PagarmeRecipientResponseData::fromArray($raw);
+        $recipientData = RecipientResponseData::fromArray($raw);
 
         $recipientId = $recipientData->requireId();
 
@@ -122,16 +122,16 @@ class PagarmeRecipientService
 
     public function updateDefaultBankAccount(Provider $provider, array $bankAccountData): Provider
     {
-        $payload = new PagarmeBankAccountUpdateRequestData(
-            holderName:        $this->normalizeHolderName($bankAccountData['holder_name']),
-            holderType:        $bankAccountData['holder_type'],
-            holderDocument:    $this->onlyDigits($bankAccountData['holder_document']),
-            bank:              $bankAccountData['bank'],
-            branchNumber:      $bankAccountData['branch_number'],
-            branchCheckDigit:  $bankAccountData['branch_check_digit'] ?? null,
-            accountNumber:     $bankAccountData['account_number'],
+        $payload = new BankAccountUpdateRequestData(
+            holderName: $this->normalizeHolderName($bankAccountData['holder_name']),
+            holderType: $bankAccountData['holder_type'],
+            holderDocument: $this->onlyDigits($bankAccountData['holder_document']),
+            bank: $bankAccountData['bank'],
+            branchNumber: $bankAccountData['branch_number'],
+            branchCheckDigit: $bankAccountData['branch_check_digit'] ?? null,
+            accountNumber: $bankAccountData['account_number'],
             accountCheckDigit: $bankAccountData['account_check_digit'],
-            type:              $bankAccountData['type'],
+            type: $bankAccountData['type'],
         );
 
         $raw = $this->pagarmeRequest(
@@ -142,7 +142,7 @@ class PagarmeRecipientService
             errorMessage: 'Erro ao atualizar conta bancaria do recebedor no Pagar.me.',
         );
 
-        $recipientData = PagarmeRecipientResponseData::fromArray($raw);
+        $recipientData = RecipientResponseData::fromArray($raw);
 
         $provider->forceFill([
             'recipient_default_bank_account' => $recipientData->defaultBankAccount?->toArray() ?: $payload->toArray()['bank_account'],
@@ -153,30 +153,30 @@ class PagarmeRecipientService
 
     //
 
-    private function buildRecipientBankAccount(array $data): PagarmeRecipientBankAccountData
+    private function buildRecipientBankAccount(array $data): RecipientBankAccountData
     {
-        return new PagarmeRecipientBankAccountData(
-            holderName:        $this->normalizeHolderName($data['holder_name']),
-            holderType:        $data['holder_type'],
-            holderDocument:    $this->onlyDigits($data['holder_document']),
-            bank:              $data['bank'],
-            branchNumber:      $data['branch_number'],
-            branchCheckDigit:  $data['branch_check_digit'] ?? null,
-            accountNumber:     $data['account_number'],
+        return new RecipientBankAccountData(
+            holderName: $this->normalizeHolderName($data['holder_name']),
+            holderType: $data['holder_type'],
+            holderDocument: $this->onlyDigits($data['holder_document']),
+            bank: $data['bank'],
+            branchNumber: $data['branch_number'],
+            branchCheckDigit: $data['branch_check_digit'] ?? null,
+            accountNumber: $data['account_number'],
             accountCheckDigit: $data['account_check_digit'],
-            type:              $data['type'],
+            type: $data['type'],
         );
     }
 
-    private function buildRecipientPhone(?string $phone): PagarmeRecipientPhoneData
+    private function buildRecipientPhone(?string $phone): RecipientPhoneData
     {
         $digits = $this->onlyDigits($phone);
 
         if (strlen($digits) < 10) {
-            return new PagarmeRecipientPhoneData(
-                ddd:    '11',
+            return new RecipientPhoneData(
+                ddd: '11',
                 number: '999999999',
-                type:   'mobile',
+                type: 'mobile',
             );
         }
 
@@ -184,17 +184,17 @@ class PagarmeRecipientService
             $digits = substr($digits, 2);
         }
 
-        return new PagarmeRecipientPhoneData(
-            ddd:    substr($digits, 0, 2),
+        return new RecipientPhoneData(
+            ddd: substr($digits, 0, 2),
             number: substr($digits, 2),
-            type:   'mobile',
+            type: 'mobile',
         );
     }
 
     private function extractAddressParts(array $data): array
     {
-        $addressLine   = trim((string) ($data['address'] ?? ''));
-        $segments      = array_map('trim', explode(',', $addressLine));
+        $addressLine = trim((string) ($data['address'] ?? ''));
+        $segments = array_map('trim', explode(',', $addressLine));
         $streetSegment = $segments[0] ?? '';
 
         if (($data['number'] ?? null) === null) {
@@ -244,7 +244,7 @@ class PagarmeRecipientService
 
         if (count($parts) >= 3) {
             $firstName = array_shift($parts);
-            $lastName  = array_pop($parts);
+            $lastName = array_pop($parts);
 
             $initials = array_map(
                 static fn (string $part): string => Str::upper(Str::substr($part, 0, 1)),

+ 32 - 32
app/Services/Pagarme/PagarmeTransferService.php

@@ -2,8 +2,8 @@
 
 namespace App\Services\Pagarme;
 
-use App\Data\Pagarme\Request\PagarmeTransferRequestData;
-use App\Data\Pagarme\Response\PagarmeTransferResponseData;
+use App\Data\Pagarme\Request\TransferRequestData;
+use App\Data\Pagarme\Response\TransferResponseData;
 use App\Models\Provider;
 use App\Models\ProviderWithdrawal;
 use App\Services\Pagarme\Concerns\SendsPagarmeRequests;
@@ -13,7 +13,7 @@ class PagarmeTransferService
 {
     use SendsPagarmeRequests;
 
-    public function createTransfer(int $amountInCents, string $recipientId, string $idempotencyKey): PagarmeTransferResponseData
+    public function createTransfer(int $amountInCents, string $recipientId, string $idempotencyKey): TransferResponseData
     {
         if ($this->shouldMockTransferRequest()) {
             return $this->mockTransferResponse(
@@ -23,11 +23,11 @@ class PagarmeTransferService
             );
         }
 
-        return PagarmeTransferResponseData::fromArray($this->pagarmeRequest(
+        return TransferResponseData::fromArray($this->pagarmeRequest(
             method: 'POST',
             path: '/transfers',
-            payload: new PagarmeTransferRequestData(
-                amount:      $amountInCents,
+            payload: new TransferRequestData(
+                amount: $amountInCents,
                 recipientId: $recipientId,
             ),
             idempotencyKey: $idempotencyKey,
@@ -35,13 +35,13 @@ class PagarmeTransferService
         ));
     }
 
-    public function getTransfer(string $transferId): PagarmeTransferResponseData
+    public function getTransfer(string $transferId): TransferResponseData
     {
         if ($this->shouldMockTransferRequest()) {
             return $this->mockTransferLookupResponse($transferId);
         }
 
-        return PagarmeTransferResponseData::fromArray($this->pagarmeRequest(
+        return TransferResponseData::fromArray($this->pagarmeRequest(
             method: 'GET',
             path: "/transfers/{$transferId}",
             payload: [],
@@ -57,22 +57,22 @@ class PagarmeTransferService
         return app()->environment('local', 'development');
     }
 
-    private function mockTransferResponse(int $amountInCents, string $recipientId, string $idempotencyKey): PagarmeTransferResponseData
+    private function mockTransferResponse(int $amountInCents, string $recipientId, string $idempotencyKey): TransferResponseData
     {
-        $provider  = Provider::query()->where('recipient_id', $recipientId)->first();
+        $provider = Provider::query()->where('recipient_id', $recipientId)->first();
         $createdAt = Carbon::now();
 
-        return new PagarmeTransferResponseData(
-            id:                   $this->mockTransferId($idempotencyKey),
-            amount:               $amountInCents,
-            type:                 'credito_em_conta',
-            status:               'pending_transfer',
-            fee:                  0,
-            fundingDate:          null,
+        return new TransferResponseData(
+            id: $this->mockTransferId($idempotencyKey),
+            amount: $amountInCents,
+            type: 'credito_em_conta',
+            status: 'pending_transfer',
+            fee: 0,
+            fundingDate: null,
             fundingEstimatedDate: $createdAt->copy()->addWeekday()->toISOString(),
-            bankAccount:          $provider?->recipient_default_bank_account,
-            bankResponse:         null,
-            createdAt:            $createdAt->toISOString(),
+            bankAccount: $provider?->recipient_default_bank_account,
+            bankResponse: null,
+            createdAt: $createdAt->toISOString(),
             metadata: [
                 'mocked'          => true,
                 'environment'     => app()->environment(),
@@ -83,27 +83,27 @@ class PagarmeTransferService
         );
     }
 
-    private function mockTransferLookupResponse(string $transferId): PagarmeTransferResponseData
+    private function mockTransferLookupResponse(string $transferId): TransferResponseData
     {
         $withdrawal = ProviderWithdrawal::query()->where('transfer_id', $transferId)->first();
 
         if ($withdrawal?->gateway_payload) {
-            return PagarmeTransferResponseData::fromArray($withdrawal->gateway_payload);
+            return TransferResponseData::fromArray($withdrawal->gateway_payload);
         }
 
         $createdAt = Carbon::now();
 
-        return new PagarmeTransferResponseData(
-            id:                   $transferId,
-            amount:               $withdrawal ? (int) round((float) $withdrawal->gross_amount * 100) : 0,
-            type:                 $withdrawal?->type ?? 'credito_em_conta',
-            status:               $withdrawal?->status?->value ?? 'pending_transfer',
-            fee:                  $withdrawal ? (int) round((float) $withdrawal->gateway_fee_amount * 100) : 0,
-            fundingDate:          $withdrawal?->completed_at?->toISOString(),
+        return new TransferResponseData(
+            id: $transferId,
+            amount: $withdrawal ? (int) round((float) $withdrawal->gross_amount * 100) : 0,
+            type: $withdrawal?->type ?? 'credito_em_conta',
+            status: $withdrawal?->status?->value ?? 'pending_transfer',
+            fee: $withdrawal ? (int) round((float) $withdrawal->gateway_fee_amount * 100) : 0,
+            fundingDate: $withdrawal?->completed_at?->toISOString(),
             fundingEstimatedDate: $createdAt->copy()->addWeekday()->toISOString(),
-            bankAccount:          $withdrawal?->bank_account,
-            bankResponse:         $withdrawal?->bank_response,
-            createdAt:            $withdrawal?->created_at?->toISOString() ?? $createdAt->toISOString(),
+            bankAccount: $withdrawal?->bank_account,
+            bankResponse: $withdrawal?->bank_response,
+            createdAt: $withdrawal?->created_at?->toISOString() ?? $createdAt->toISOString(),
             metadata: $withdrawal?->metadata ?? [
                 'mocked'      => true,
                 'environment' => app()->environment(),

+ 17 - 230
app/Services/PaymentService.php

@@ -2,20 +2,8 @@
 
 namespace App\Services;
 
-use App\Data\Pagarme\Request\PagarmeCustomerRequestData\PagarmeCustomerAddressRequestData;
-use App\Data\Pagarme\Request\PagarmeCustomerRequestData\PagarmeCustomerPhonesRequestData\PagarmeCustomerPhoneData;
-use App\Data\Pagarme\Request\PagarmeCustomerRequestData\PagarmeCustomerPhonesRequestData\PagarmeCustomerPhonesRequestData;
-use App\Data\Pagarme\Request\PagarmeCustomerRequestData\PagarmeCustomerRequestData;
-use App\Data\Pagarme\Request\PagarmeOrderRequestData\PagarmeOrderItemData;
-use App\Data\Pagarme\Request\PagarmeOrderRequestData\PagarmeOrderPaymentData\PagarmeOrderCreditCardData;
-use App\Data\Pagarme\Request\PagarmeOrderRequestData\PagarmeOrderPaymentData\PagarmeOrderPixAdditionalInformationData;
-use App\Data\Pagarme\Request\PagarmeOrderRequestData\PagarmeOrderPaymentData\PagarmeOrderPixData;
-use App\Data\Pagarme\Request\PagarmeOrderRequestData\PagarmeOrderPaymentData\PagarmeOrderSplitData;
-use App\Data\Pagarme\Request\PagarmeOrderRequestData\PagarmeOrderPaymentData\PagarmeOrderSplitOptionsData;
-use App\Data\Pagarme\Request\PagarmeOrderRequestData\PagarmeOrderRequestData;
 use App\Enums\PaymentSplitStatusEnum;
 use App\Enums\PaymentStatusEnum;
-use App\Models\Address;
 use App\Models\ClientPaymentMethod;
 use App\Models\Payment;
 use App\Models\PaymentSplit;
@@ -135,6 +123,7 @@ class PaymentService
         }
 
         $clientPaymentMethod = null;
+        $cardId = null;
 
         if ($paymentMethod === 'credit_card') {
             if (! $clientPaymentMethodId && empty($options['card_id'])) {
@@ -153,10 +142,9 @@ class PaymentService
                 }
             }
 
-            if (
-                empty($clientPaymentMethod?->gateway_card_id)
-                && empty($options['card_id'])
-            ) {
+            $cardId = $options['card_id'] ?? $clientPaymentMethod?->gateway_card_id ?? null;
+
+            if (empty($cardId)) {
                 throw new \InvalidArgumentException('Cartao de pagamento invalido ou sem gateway_card_id do Pagar.me.');
             }
         }
@@ -164,11 +152,6 @@ class PaymentService
         $serviceAmount = (float) $schedule->total_amount;
         $platformFee = round($serviceAmount * 0.11, 2);
         $grossAmount = round($serviceAmount + $platformFee, 2);
-        $items = $this->buildOrderItems($schedule, $grossAmount);
-
-        $this->ensureCustomerPhoneForPayment($schedule, $options);
-
-        $customer = $this->buildCustomerPayload(schedule: $schedule, options: $options, requirePhone: true);
 
         $platformRecipientId = config('services.pagarme.platform_recipient_id');
 
@@ -180,7 +163,7 @@ class PaymentService
             'schedule_id'              => $schedule->id,
             'client_id'                => $schedule->client_id,
             'provider_id'              => $schedule->provider_id,
-            'client_payment_method_id' => $paymentMethod === 'credit_card' ? $clientPaymentMethod->id : null,
+            'client_payment_method_id' => $paymentMethod === 'credit_card' ? ($clientPaymentMethod?->id ?? null) : null,
             'gateway_provider'         => 'pagarme',
             'gateway_code'             => 'payment-'.(string) Str::uuid(),
             'payment_method'           => $paymentMethod,
@@ -199,7 +182,7 @@ class PaymentService
             ],
         ]);
 
-        $transfer = PaymentSplit::create([
+        PaymentSplit::create([
             'payment_id'                        => $payment->id,
             'provider_id'                       => $schedule->provider_id,
             'gateway_provider'                  => 'pagarme',
@@ -215,60 +198,16 @@ class PaymentService
             ],
         ]);
 
-        $split = PagarmeOrderRequestData::splitFromTransfers(collect([$transfer]));
-
-        if ($platformFee > 0) {
-            $split[] = new PagarmeOrderSplitData(
-                amount:      PagarmeOrderRequestData::amountInCents($platformFee),
-                recipientId: $platformRecipientId,
-                type:        'flat',
-                options:     new PagarmeOrderSplitOptionsData(
-                    chargeProcessingFee: true,
-                    chargeRemainderFee:  true,
-                    liable:              true,
-                ),
-            );
-        }
-
-        $pixOptions = config('services.pagarme.pix_disable_split')
-            ? []
-            : ['split' => $split];
+        $this->pagarmePaymentService->ensureCustomerPhone($schedule, $options);
 
         try {
-            $creditCardReference = $paymentMethod === 'credit_card'
-                ? $this->resolveCreditCardReference($clientPaymentMethod, $options)
-                : [];
-
-            $orderResponse = $paymentMethod === 'credit_card'
-                ? $this->pagarmePaymentService->createOrderWithCreditCard(
-                    payment: $payment,
-                    items: $items,
-                    customer: $customer,
-                    creditCard: new PagarmeOrderCreditCardData(
-                        installments: 1,
-                        statementDescriptor: Str::limit((string) config('app.name', 'SOFTPAR'), 13, ''),
-                        operationType: 'auth_and_capture',
-                        cardId: $creditCardReference['card_id'],
-                    ),
-                    options: [
-                        'split' => $split,
-                    ],
-                )
-                : $this->pagarmePaymentService->createOrderWithPix(
-                    payment: $payment,
-                    items: $items,
-                    customer: $customer,
-                    pix: new PagarmeOrderPixData(
-                        expiresIn: 1800,
-                        additionalInformation: [
-                            new PagarmeOrderPixAdditionalInformationData(
-                                name:  'Agendamento',
-                                value: (string) $schedule->id,
-                            ),
-                        ],
-                    ),
-                    options: $pixOptions,
-                );
+            $orderResponse = $this->pagarmePaymentService->processPayment(
+                payment: $payment,
+                schedule: $schedule,
+                paymentMethod: $paymentMethod,
+                cardId: $cardId,
+                options: $options,
+            );
         } catch (\Throwable $e) {
             $payment->forceFill([
                 'status'          => PaymentStatusEnum::FAILED,
@@ -276,7 +215,9 @@ class PaymentService
                 'failure_message' => $e->getMessage(),
             ])->save();
 
-            $transfer->update(['status' => PaymentSplitStatusEnum::FAILED]);
+            PaymentSplit::query()
+                ->where('payment_id', $payment->id)
+                ->update(['status' => PaymentSplitStatusEnum::FAILED]);
 
             throw $e;
         }
@@ -290,147 +231,6 @@ class PaymentService
 
     //
 
-    private function buildOrderItems(Schedule $schedule, float $grossAmount): array
-    {
-        $description = $schedule->customSchedule?->serviceType?->description
-            ?? "Servico {$schedule->id}";
-
-        return [new PagarmeOrderItemData(
-            code: "schedule-{$schedule->id}",
-            amount: PagarmeOrderRequestData::amountInCents($grossAmount),
-            quantity: 1,
-            description: $description,
-        )];
-    }
-
-    private function buildCustomerPayload(
-        Schedule $schedule,
-        array $options = [],
-        bool $requirePhone = true
-    ): PagarmeCustomerRequestData {
-        $client = $schedule->client;
-        $user = $client->user()->first(['id', 'name', 'email', 'phone']);
-        $address = Address::with(['city.state', 'state'])->find($schedule->address_id);
-
-        foreach ([
-            'nome'      => $user?->name,
-            'email'     => $user?->email,
-            'documento' => $client->document,
-        ] as $field => $value) {
-            if ($value === null || $value === '') {
-                throw new \InvalidArgumentException("Cliente precisa ter {$field} para criar pedido no Pagar.me.");
-            }
-        }
-
-        if (! $address) {
-            throw new \InvalidArgumentException('Endereco do agendamento nao encontrado para criar pedido no Pagar.me.');
-        }
-
-        $document = $this->digits($client->document);
-
-        $phone = $this->buildPhonePayload($user->phone)
-            ?: $this->buildPhonePayload($options['phone'] ?? null);
-
-        $state = $address->state?->code ?? $address->city?->state?->code;
-        $city = $address->city?->name;
-        $zipCode = $this->digits($address->zip_code);
-
-        $line1 = implode(', ', array_filter([
-            $address->number ?: 'S/N',
-            $address->address,
-            $address->district,
-        ]));
-
-        $requiredFields = [
-            'documento' => $document,
-            'estado'    => $state,
-            'cidade'    => $city,
-            'cep'       => $zipCode,
-            'endereco'  => $line1,
-        ];
-
-        if ($requirePhone) {
-            $requiredFields['telefone'] = $phone;
-        }
-
-        foreach ($requiredFields as $field => $value) {
-            if ($value === null || $value === '' || $value === []) {
-                throw new \InvalidArgumentException("Cliente precisa ter {$field} valido para criar pedido no Pagar.me.");
-            }
-        }
-
-        $customerAddress = new PagarmeCustomerAddressRequestData(
-            line1: $line1,
-            line2: $address->complement ?: $address->instructions,
-            zipCode: $zipCode,
-            city: $city,
-            state: $state,
-            country: 'BR',
-        );
-
-        $customerPhones = null;
-
-        if ($phone) {
-            $customerPhones = new PagarmeCustomerPhonesRequestData(
-                mobilePhone: new PagarmeCustomerPhoneData(
-                    countryCode: $phone['country_code'],
-                    areaCode: $phone['area_code'],
-                    number: $phone['number'],
-                ),
-            );
-        }
-
-        return new PagarmeCustomerRequestData(
-            name: $user->name,
-            email: $user->email,
-            document: $document,
-            type: strlen($document) === 14 ? 'company' : 'individual',
-            documentType: strlen($document) === 14 ? 'CNPJ' : 'CPF',
-            code: "client-{$client->id}",
-            address: $customerAddress,
-            phones: $customerPhones,
-        );
-    }
-
-    private function buildPhonePayload(?string $phone): ?array
-    {
-        $digits = $this->digits($phone);
-
-        if (strlen($digits) < 10) {
-            return null;
-        }
-
-        if (str_starts_with($digits, '55')) {
-            $digits = substr($digits, 2);
-        }
-
-        return [
-            'country_code' => '55',
-            'area_code'    => substr($digits, 0, 2),
-            'number'       => substr($digits, 2),
-        ];
-    }
-
-    private function ensureCustomerPhoneForPayment(Schedule $schedule, array $options = []): void
-    {
-        $userPhone = $schedule->client?->user?->phone;
-        $phone = $this->buildPhonePayload($userPhone)
-            ?: $this->buildPhonePayload($options['phone'] ?? null);
-
-        if ($phone) {
-            return;
-        }
-
-        throw new \InvalidArgumentException(
-            'Voce precisa cadastrar um numero de celular valido no seu perfil para concluir o pagamento.'
-        );
-    }
-
-    private function digits(?string $value): string
-    {
-        return preg_replace('/\D+/', '', (string) $value) ?? '';
-    }
-
     private function isIncompleteGatewayPayment(Payment $payment): bool
     {
         return $payment->status === PaymentStatusEnum::PENDING
@@ -439,19 +239,6 @@ class PaymentService
             && empty($payment->gateway_payload);
     }
 
-    private function resolveCreditCardReference(?ClientPaymentMethod $clientPaymentMethod, array $options): array
-    {
-        if (! empty($options['card_id'])) {
-            return ['card_id' => $options['card_id']];
-        }
-
-        if (! empty($clientPaymentMethod?->gateway_card_id)) {
-            return ['card_id' => $clientPaymentMethod->gateway_card_id];
-        }
-
-        throw new \InvalidArgumentException('Cartao de pagamento precisa ter gateway_card_id do Pagar.me.');
-    }
-
     public function syncScheduleStatusAfterPayment(Schedule $schedule, Payment $payment): void
     {
         if ($payment->status !== PaymentStatusEnum::PAID || $schedule->status === 'paid') {

+ 237 - 234
app/Services/ProviderService.php

@@ -13,10 +13,10 @@ use App\Models\State;
 use App\Models\User;
 use App\Services\Pagarme\PagarmeRecipientService;
 use Illuminate\Database\Eloquent\Collection;
+use Illuminate\Http\UploadedFile;
 use Illuminate\Pagination\LengthAwarePaginator;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Log;
-use Illuminate\Http\UploadedFile;
 
 class ProviderService
 {
@@ -26,20 +26,20 @@ class ProviderService
         private readonly MediaService $mediaService,
     ) {}
 
-  public function getAll(): Collection
-  {
-    $providers = Provider::query()
-      ->with(['user', 'profileMedia'])
-      ->orderBy('created_at', 'desc')
-      ->get();
+    public function getAll(): Collection
+    {
+        $providers = Provider::query()
+            ->with(['user', 'profileMedia'])
+            ->orderBy('created_at', 'desc')
+            ->get();
 
-    return $providers;
-  }
+        return $providers;
+    }
 
-  public function findById(int $id): ?Provider
-  {
-    return Provider::with(['user', 'profileMedia'])->find($id);
-  }
+    public function findById(int $id): ?Provider
+    {
+        return Provider::with(['user', 'profileMedia'])->find($id);
+    }
 
     public function create(array $data): Provider
     {
@@ -54,30 +54,30 @@ class ProviderService
         });
     }
 
-  public function update(int $id, array $data): ?Provider
-  {
-    $model = $this->findById($id);
+    public function update(int $id, array $data): ?Provider
+    {
+        $model = $this->findById($id);
 
-    if (!$model) {
-      return null;
-    }
+        if (! $model) {
+            return null;
+        }
 
-    if (isset($data['avatar']) && $data['avatar'] instanceof UploadedFile) {
-      $media = $this->mediaService->replaceFile(
-        newFile:  $data['avatar'],
-        folder:   "provider/avatar/{$model->id}",
-        source:   'provider',
-        sourceId: $model->id,
-        old:      $model->profileMedia,
-      );
-      $data['profile_media_id'] = $media->id;
-      unset($data['avatar']);
-    }
+        if (isset($data['avatar']) && $data['avatar'] instanceof UploadedFile) {
+            $media = $this->mediaService->replaceFile(
+                newFile: $data['avatar'],
+                folder: "provider/avatar/{$model->id}",
+                source: 'provider',
+                sourceId: $model->id,
+                old: $model->profileMedia,
+            );
+            $data['profile_media_id'] = $media->id;
+            unset($data['avatar']);
+        }
 
-    $model->update($data);
+        $model->update($data);
 
-    return $model->fresh(['user', 'profileMedia']);
-  }
+        return $model->fresh(['user', 'profileMedia']);
+    }
 
     public function updateBankAccount(int $id, array $bankAccountData): ?Provider
     {
@@ -92,239 +92,242 @@ class ProviderService
         return $provider->fresh(['user', 'profileMedia']);
     }
 
-  public function delete(int $id): bool
-  {
-    $model = $this->findById($id);
+    public function delete(int $id): bool
+    {
+        $model = $this->findById($id);
+
+        if (! $model) {
+            return false;
+        }
+
+        return $model->delete();
+    }
+
+    public function getPending(int $page = 1, int $perPage = 10): LengthAwarePaginator
+    {
+        return Provider::query()
+            ->where('approval_status', ApprovalStatusEnum::PENDING->value)
+            ->with(['user', 'profileMedia'])
+            ->orderBy('created_at', 'asc')
+            ->paginate($perPage, ['*'], 'page', $page);
+    }
 
-    if (!$model) {
-      return false;
+    public function approve(int $id): Provider
+    {
+        return DB::transaction(function () use ($id) {
+            $provider = Provider::findOrFail($id);
+            $provider->update(['approval_status' => ApprovalStatusEnum::ACCEPTED->value]);
+
+            return $provider->fresh(['user', 'profileMedia']);
+        });
     }
 
-    return $model->delete();
-  }
-
-  public function getPending(int $page = 1, int $perPage = 10): LengthAwarePaginator
-  {
-    return Provider::query()
-      ->where('approval_status', ApprovalStatusEnum::PENDING->value)
-      ->with(['user', 'profileMedia'])
-      ->orderBy('created_at', 'asc')
-      ->paginate($perPage, ['*'], 'page', $page);
-  }
-
-  public function approve(int $id): Provider
-  {
-    return DB::transaction(function () use ($id) {
-      $provider = Provider::findOrFail($id);
-      $provider->update(['approval_status' => ApprovalStatusEnum::ACCEPTED->value]);
-      return $provider->fresh(['user', 'profileMedia']);
-    });
-  }
-
-  public function reject(int $id): Provider
-  {
-    return DB::transaction(function () use ($id) {
-      $provider = Provider::findOrFail($id);
-      $provider->update(['approval_status' => ApprovalStatusEnum::REJECTED->value]);
-      return $provider->fresh(['user', 'profileMedia']);
-    });
-  }
-
-  public function register(array $data): ?array
-  {
-    try {
-      DB::beginTransaction();
+    public function reject(int $id): Provider
+    {
+        return DB::transaction(function () use ($id) {
+            $provider = Provider::findOrFail($id);
+            $provider->update(['approval_status' => ApprovalStatusEnum::REJECTED->value]);
+
+            return $provider->fresh(['user', 'profileMedia']);
+        });
+    }
+
+    public function register(array $data): ?array
+    {
+        try {
+            DB::beginTransaction();
 
             $email = $data['email'] ?? null;
             $phone = $data['phone'] ?? null;
             $code = $data['code'] ?? null;
 
-      $user = User::query()
-        ->where('type', UserTypeEnum::PROVIDER->value)
-        ->where('code', $code)
-        ->where(function ($query) use ($email, $phone) {
-          if (!empty($email)) {
-            $query->orWhere('email', $email);
-          }
-
-          if (!empty($phone)) {
-            $query->orWhere('phone', $phone);
-          }
-        })
-        ->latest('id')
-        ->first();
-
-      if (!$user) {
-        throw new \Exception(__('messages.user_not_found_or_code_not_validated'));
-      }
-
-      $user->name = $data['name'];
-
-      if (empty($user->email) && !empty($email)) {
-        $user->email = $email;
-      }
-
-      if (empty($user->phone) && !empty($phone)) {
-        $user->phone = $phone;
-      }
-
-      $user->save();
-
-      $provider = new Provider();
-      $provider->user_id = $user->id;
-      $provider->rg = $data['rg'] ?? null;
-      $provider->document = $this->sanitizeDigits($data['document'] ?? null);
-      $provider->birth_date = $data['birth_date'] ?? null;
-      $provider->daily_price_8h = $data['daily_price_8h'] ?? null;
-      $provider->daily_price_6h = $data['daily_price_6h'] ?? null;
-      $provider->daily_price_4h = $data['daily_price_4h'] ?? null;
-      $provider->daily_price_2h = $data['daily_price_2h'] ?? null;
-      $provider->approval_status = ApprovalStatusEnum::PENDING->value;
-      $provider->save();
-      $provider->refresh();
-
-      $selfie = $this->mediaService->createFromFile(
-          file:     $data['selfie'],
-          folder:   "provider/avatar/{$provider->id}",
-          source:   'provider',
-          sourceId: $provider->id,
-      );
-      $provider->profile_media_id = $selfie->id;
-
-      $front = $this->mediaService->createFromFile(
-          file:     $data['document_front'],
-          folder:   "provider/documentos/{$provider->id}",
-          source:   'provider_document',
-          sourceId: $provider->id,
-          filename: 'frente.'.$data['document_front']->getClientOriginalExtension(),
-      );
-      $provider->document_front_media_id = $front->id;
-
-      $back = $this->mediaService->createFromFile(
-          file:     $data['document_back'],
-          folder:   "provider/documentos/{$provider->id}",
-          source:   'provider_document',
-          sourceId: $provider->id,
-          filename: 'verso.'.$data['document_back']->getClientOriginalExtension(),
-      );
-      $provider->document_back_media_id = $back->id;
-
-      $provider->save();
-
-      if (!empty($data['recipient_code'])) {
-          $this->pagarmeRecipientService->createRecipientForProvider($provider, $data);
-      }
-      $this->createProviderAddress($provider->id, $data);
-      $this->createProviderServicesTypes($provider->id, $data);
-      $this->createProviderWorkingDays($provider->id, $data);
-
-      if (empty($user->email) || empty($user->code)) {
-        throw new \Exception(__('messages.user_not_found_or_code_not_validated'));
-      }
-
-      $result = $this->authService->loginWithEmail(
-        email: $user->email,
-        code: $user->code,
-      );
-
-      DB::commit();
-      return $result;
-    } catch (\Exception $e) {
-      DB::rollBack();
-      Log::error('Error registering provider: ' . $e->getMessage(), [
-        'data' => $data,
-      ]);
-      throw $e;
+            $user = User::query()
+                ->where('type', UserTypeEnum::PROVIDER->value)
+                ->where('code', $code)
+                ->where(function ($query) use ($email, $phone) {
+                    if (! empty($email)) {
+                        $query->orWhere('email', $email);
+                    }
+
+                    if (! empty($phone)) {
+                        $query->orWhere('phone', $phone);
+                    }
+                })
+                ->latest('id')
+                ->first();
+
+            if (! $user) {
+                throw new \Exception(__('messages.user_not_found_or_code_not_validated'));
+            }
+
+            $user->name = $data['name'];
+
+            if (empty($user->email) && ! empty($email)) {
+                $user->email = $email;
+            }
+
+            if (empty($user->phone) && ! empty($phone)) {
+                $user->phone = $phone;
+            }
+
+            $user->save();
+
+            $provider = new Provider;
+            $provider->user_id = $user->id;
+            $provider->rg = $data['rg'] ?? null;
+            $provider->document = $this->sanitizeDigits($data['document'] ?? null);
+            $provider->birth_date = $data['birth_date'] ?? null;
+            $provider->daily_price_8h = $data['daily_price_8h'] ?? null;
+            $provider->daily_price_6h = $data['daily_price_6h'] ?? null;
+            $provider->daily_price_4h = $data['daily_price_4h'] ?? null;
+            $provider->daily_price_2h = $data['daily_price_2h'] ?? null;
+            $provider->approval_status = ApprovalStatusEnum::PENDING->value;
+            $provider->save();
+            $provider->refresh();
+
+            $selfie = $this->mediaService->createFromFile(
+                file: $data['selfie'],
+                folder: "provider/avatar/{$provider->id}",
+                source: 'provider',
+                sourceId: $provider->id,
+            );
+            $provider->profile_media_id = $selfie->id;
+
+            $front = $this->mediaService->createFromFile(
+                file: $data['document_front'],
+                folder: "provider/documentos/{$provider->id}",
+                source: 'provider_document',
+                sourceId: $provider->id,
+                filename: 'frente.'.$data['document_front']->getClientOriginalExtension(),
+            );
+            $provider->document_front_media_id = $front->id;
+
+            $back = $this->mediaService->createFromFile(
+                file: $data['document_back'],
+                folder: "provider/documentos/{$provider->id}",
+                source: 'provider_document',
+                sourceId: $provider->id,
+                filename: 'verso.'.$data['document_back']->getClientOriginalExtension(),
+            );
+            $provider->document_back_media_id = $back->id;
+
+            $provider->save();
+
+            if (! empty($data['recipient_code'])) {
+                $this->pagarmeRecipientService->createRecipientForProvider($provider, $data);
+            }
+            $this->createProviderAddress($provider->id, $data);
+            $this->createProviderServicesTypes($provider->id, $data);
+            $this->createProviderWorkingDays($provider->id, $data);
+
+            if (empty($user->email) || empty($user->code)) {
+                throw new \Exception(__('messages.user_not_found_or_code_not_validated'));
+            }
+
+            $result = $this->authService->loginWithEmail(
+                email: $user->email,
+                code: $user->code,
+            );
+
+            DB::commit();
+
+            return $result;
+        } catch (\Exception $e) {
+            DB::rollBack();
+            Log::error('Error registering provider: '.$e->getMessage(), [
+                'data' => $data,
+            ]);
+            throw $e;
+        }
     }
-  }
 
     private function createProviderAddress(int $providerId, array $data): void
     {
         $state = null;
         $city = null;
 
-    if (!empty($data['state'])) {
-      $state = State::query()
-        ->whereRaw('LOWER(code) = ?', [mb_strtolower($data['state'])])
-        ->first();
-    }
+        if (! empty($data['state'])) {
+            $state = State::query()
+                ->whereRaw('LOWER(code) = ?', [mb_strtolower($data['state'])])
+                ->first();
+        }
 
-    if (!empty($data['city'])) {
-      $cityQuery = City::query()
-        ->whereRaw('LOWER(name) = ?', [mb_strtolower($data['city'])]);
+        if (! empty($data['city'])) {
+            $cityQuery = City::query()
+                ->whereRaw('LOWER(name) = ?', [mb_strtolower($data['city'])]);
 
-      if ($state) {
-        $cityQuery->where('state_id', $state->id);
-      }
+            if ($state) {
+                $cityQuery->where('state_id', $state->id);
+            }
+
+            $city = $cityQuery->first();
+        }
 
-      $city = $cityQuery->first();
+        $address = new Address;
+        $address->source = 'provider';
+        $address->source_id = $providerId;
+        $address->zip_code = $this->sanitizeDigits($data['zip_code'] ?? null);
+        $address->address = $data['address'] ?? null;
+        $address->has_complement = (bool) ($data['has_complement'] ?? false);
+        $address->complement = $data['complement'] ?? null;
+        $address->nickname = $data['nickname'] ?? null;
+        $address->instructions = $data['instructions'] ?? null;
+        $address->address_type = $data['address_type'] ?? 'home';
+        $address->state_id = $state?->id;
+        $address->city_id = $city?->id;
+        $address->save();
     }
 
-    $address = new Address();
-    $address->source = 'provider';
-    $address->source_id = $providerId;
-    $address->zip_code = $this->sanitizeDigits($data['zip_code'] ?? null);
-    $address->address = $data['address'] ?? null;
-    $address->has_complement = (bool) ($data['has_complement'] ?? false);
-    $address->complement = $data['complement'] ?? null;
-    $address->nickname = $data['nickname'] ?? null;
-    $address->instructions = $data['instructions'] ?? null;
-    $address->address_type = $data['address_type'] ?? 'home';
-    $address->state_id = $state?->id;
-    $address->city_id = $city?->id;
-    $address->save();
-  }
-
-  private function createProviderServicesTypes(int $providerId, array $data): void
-  {
-    $serviceTypeIds = $data['services_types_ids'] ?? $data['service_types_ids'] ?? [];
-
-    $uniqueIds = array_values(array_unique(array_map('intval', $serviceTypeIds)));
-
-    foreach ($uniqueIds as $serviceTypeId) {
-      ProviderServicesType::create([
-        'provider_id' => $providerId,
-        'service_type_id' => $serviceTypeId,
-      ]);
+    private function createProviderServicesTypes(int $providerId, array $data): void
+    {
+        $serviceTypeIds = $data['services_types_ids'] ?? $data['service_types_ids'] ?? [];
+
+        $uniqueIds = array_values(array_unique(array_map('intval', $serviceTypeIds)));
+
+        foreach ($uniqueIds as $serviceTypeId) {
+            ProviderServicesType::create([
+                'provider_id'     => $providerId,
+                'service_type_id' => $serviceTypeId,
+            ]);
+        }
     }
-  }
 
-  private function createProviderWorkingDays(int $providerId, array $data): void
-  {
-    $workingDays = $data['working_days'] ?? [];
-    $seen = [];
+    private function createProviderWorkingDays(int $providerId, array $data): void
+    {
+        $workingDays = $data['working_days'] ?? [];
+        $seen = [];
 
         foreach ($workingDays as $workingDay) {
             $day = (int) ($workingDay['day'] ?? -1);
             $period = $workingDay['period'] ?? null;
 
-      if ($day < 0 || $day > 6 || !in_array($period, ['morning', 'afternoon'], true)) {
-        continue;
-      }
+            if ($day < 0 || $day > 6 || ! in_array($period, ['morning', 'afternoon'], true)) {
+                continue;
+            }
 
-      $uniqueKey = $day . '-' . $period;
-      if (isset($seen[$uniqueKey])) {
-        continue;
-      }
+            $uniqueKey = $day.'-'.$period;
+            if (isset($seen[$uniqueKey])) {
+                continue;
+            }
 
-      $seen[$uniqueKey] = true;
+            $seen[$uniqueKey] = true;
 
-      ProviderWorkingDay::create([
-        'provider_id' => $providerId,
-        'day' => $day,
-        'period' => $period,
-      ]);
+            ProviderWorkingDay::create([
+                'provider_id' => $providerId,
+                'day'         => $day,
+                'period'      => $period,
+            ]);
+        }
     }
-  }
 
-  private function sanitizeDigits(?string $value): ?string
-  {
-    if ($value === null) {
-      return null;
-    }
+    private function sanitizeDigits(?string $value): ?string
+    {
+        if ($value === null) {
+            return null;
+        }
 
-    $digits = preg_replace('/\D+/', '', $value);
+        $digits = preg_replace('/\D+/', '', $value);
 
-    return $digits === '' ? null : $digits;
-  }
+        return $digits === '' ? null : $digits;
+    }
 }

+ 2 - 2
app/Services/ProviderWithdrawalService.php

@@ -35,7 +35,7 @@ class ProviderWithdrawalService
                 ProviderWithdrawalStatusEnum::TRANSFERRED,
             ])
             ->sum('gross_amount');
-            
+
         return max(0, $earnings - $withdrawn);
     }
 
@@ -217,7 +217,7 @@ class ProviderWithdrawalService
             ->when(
                 ! app()->environment('local', 'development'),
                 fn ($query) => $query->whereRaw(
-                    $this->scheduleEndedAtExpression() . ' <= ?',
+                    $this->scheduleEndedAtExpression().' <= ?',
                     [$this->withdrawalReleaseCutoff()]
                 )
             );

+ 26 - 26
app/Services/PushNotificationDispatcher.php

@@ -7,12 +7,12 @@ use App\Notifications\Push\BasePushNotification;
 use App\Notifications\Push\Cliente\Contextual\ContextualSegundaPush;
 use App\Notifications\Push\Cliente\Contextual\ContextualSextaPush;
 use App\Notifications\Push\Cliente\Contextual\ContextualVisitaPush;
-use App\Notifications\Push\Cliente\EducativoConversao\EducativoConversao1Push;
-use App\Notifications\Push\Cliente\EducativoConversao\EducativoConversao2Push;
 use App\Notifications\Push\Cliente\Educativo\Educativo1Push;
 use App\Notifications\Push\Cliente\Educativo\Educativo2Push;
 use App\Notifications\Push\Cliente\Educativo\Educativo3Push;
 use App\Notifications\Push\Cliente\Educativo\Educativo4Push;
+use App\Notifications\Push\Cliente\EducativoConversao\EducativoConversao1Push;
+use App\Notifications\Push\Cliente\EducativoConversao\EducativoConversao2Push;
 use App\Notifications\Push\Cliente\Marketing\Marketing1Push;
 use App\Notifications\Push\Cliente\Marketing\Marketing2Push;
 use App\Notifications\Push\Cliente\Marketing\Marketing3Push;
@@ -44,44 +44,44 @@ class PushNotificationDispatcher
     {
         return [
             // Prestador
-            new ReforcoEducativo1Push(),
-            new ReforcoEducativo2Push(),
-            new PrestadorMotivacional1Push(),
+            new ReforcoEducativo1Push,
+            new ReforcoEducativo2Push,
+            new PrestadorMotivacional1Push,
 
             // Cliente — Marketing
-            new Marketing1Push(),
-            new Marketing2Push(),
-            new Marketing3Push(),
-            new Marketing4Push(),
+            new Marketing1Push,
+            new Marketing2Push,
+            new Marketing3Push,
+            new Marketing4Push,
 
             // Cliente — Recorrência
-            new Recorrencia1Push(),
-            new Recorrencia2Push(),
-            new Recorrencia3Push(),
+            new Recorrencia1Push,
+            new Recorrencia2Push,
+            new Recorrencia3Push,
 
             // Cliente — Educativo
-            new Educativo1Push(),
-            new Educativo2Push(),
-            new Educativo3Push(),
-            new Educativo4Push(),
+            new Educativo1Push,
+            new Educativo2Push,
+            new Educativo3Push,
+            new Educativo4Push,
 
             // Cliente — Educativo + Conversão
-            new EducativoConversao1Push(),
-            new EducativoConversao2Push(),
+            new EducativoConversao1Push,
+            new EducativoConversao2Push,
 
             // Cliente — Social Proof
-            new SocialProof1Push(),
-            new SocialProof2Push(),
+            new SocialProof1Push,
+            new SocialProof2Push,
 
             // Cliente — Motivacional
-            new ClienteMotivacional1Push(),
-            new ClienteMotivacional2Push(),
-            new ClienteMotivacional3Push(),
+            new ClienteMotivacional1Push,
+            new ClienteMotivacional2Push,
+            new ClienteMotivacional3Push,
 
             // Cliente — Contextual
-            new ContextualSextaPush(),
-            new ContextualSegundaPush(),
-            new ContextualVisitaPush(),
+            new ContextualSextaPush,
+            new ContextualSegundaPush,
+            new ContextualVisitaPush,
         ];
     }
 

+ 0 - 1
app/Services/PushNotificationService.php

@@ -10,7 +10,6 @@ use Illuminate\Support\Collection;
 use Kreait\Firebase\Contract\Messaging;
 use Kreait\Firebase\Messaging\CloudMessage;
 use Kreait\Firebase\Messaging\Notification;
-use Throwable;
 
 class PushNotificationService
 {

+ 6 - 5
app/Services/ReviewService.php

@@ -17,6 +17,7 @@ use Illuminate\Support\Facades\Log;
 class ReviewService
 {
     public function __construct(private readonly MediaService $mediaService) {}
+
     public function getAll()
     {
         return Review::with(['schedule.client.user', 'schedule.provider.user', 'reviewsImprovements.improvementType'])
@@ -122,14 +123,14 @@ class ReviewService
             }
 
             if (! empty($data['photos'])) {
-                $schedule  = Schedule::find($data['schedule_id']);
-                $origin    = $data['origin'];
+                $schedule = Schedule::find($data['schedule_id']);
+                $origin = $data['origin'];
 
                 foreach ($data['photos'] as $photo) {
                     $media = $this->mediaService->createFromFile(
-                        file:     $photo,
-                        folder:   "review/{$schedule->id}/{$origin}",
-                        source:   'review',
+                        file: $photo,
+                        folder: "review/{$schedule->id}/{$origin}",
+                        source: 'review',
                         sourceId: $review->id,
                     );
 

+ 14 - 27
app/Services/ScheduleService.php

@@ -2,12 +2,11 @@
 
 namespace App\Services;
 
+use App\Enums\NotificationTypeEnum;
 use App\Jobs\StartScheduleJob;
 use App\Models\Provider;
 use App\Models\Schedule;
 use App\Rules\ScheduleBusinessRules;
-use App\Services\NotificationService;
-use App\Enums\NotificationTypeEnum;
 use Carbon\Carbon;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\DB;
@@ -48,23 +47,19 @@ class ScheduleService
 
             $createdSchedules = [];
 
-
             foreach ($schedules as $schedule) {
 
                 $datasMerged = array_merge($baseData, $schedule);
 
-
                 $this->validateProviderAvailability($datasMerged, null);
 
-
                 $scheduleData = array_merge($datasMerged, [
                     'code' => str_pad(random_int(0, 9999), 4, '0', STR_PAD_LEFT),
                 ]);
 
-
                 $newSchedule = Schedule::create($scheduleData);
 
-                /*NOTIFICAÇÃO PRESTADOR*/
+                /* NOTIFICAÇÃO PRESTADOR */
                 if ($newSchedule->provider_id) {
 
                     $notificationService = app(NotificationService::class);
@@ -72,8 +67,7 @@ class ScheduleService
                     $notificationService->create([
                         'title' => 'Nova solicitação de diária!',
 
-                        'description' =>
-                        'Você recebeu uma nova solicitação de diária.',
+                        'description' => 'Você recebeu uma nova solicitação de diária.',
 
                         'origin' => 'schedule',
 
@@ -317,8 +311,7 @@ class ScheduleService
                     $notificationService->create([
                         'title' => 'Agendamento aceito!',
 
-                        'description' =>
-                        $schedule->provider->user->name .
+                        'description' => $schedule->provider->user->name.
                             ' aceitou sua solicitação de diária.',
 
                         'origin' => 'schedule',
@@ -340,8 +333,7 @@ class ScheduleService
                     $notificationService->create([
                         'title' => 'Agendamento recusado!',
 
-                        'description' =>
-                        'O diarista não poderá atender. Veja outros profissionais disponíveis.',
+                        'description' => 'O diarista não poderá atender. Veja outros profissionais disponíveis.',
 
                         'origin' => 'schedule',
 
@@ -364,8 +356,7 @@ class ScheduleService
                         $notificationService->create([
                             'title' => 'Pagamento confirmado!',
 
-                            'description' =>
-                            'O cliente confirmou o pagamento da diária.',
+                            'description' => 'O cliente confirmou o pagamento da diária.',
 
                             'origin' => 'schedule',
 
@@ -381,7 +372,7 @@ class ScheduleService
                         ->format('Y-m-d');
 
                     $date_time_dispatch = Carbon::parse(
-                        $date_cleaned . ' ' . $schedule->start_time
+                        $date_cleaned.' '.$schedule->start_time
                     )->subHour();
 
                     StartScheduleJob::dispatch($schedule->id)
@@ -393,7 +384,6 @@ class ScheduleService
 
                     $notificationService = app(NotificationService::class);
 
-
                     switch (Auth::user()->type) {
                         case 'client':
 
@@ -402,7 +392,7 @@ class ScheduleService
 
                                 $notificationService->create(['title' => 'Agendamento cancelado!',
 
-                                    'description' =>'O cliente cancelou a diária.',
+                                    'description' => 'O cliente cancelou a diária.',
 
                                     'origin' => 'schedule',
 
@@ -422,8 +412,7 @@ class ScheduleService
                             $notificationService->create([
                                 'title' => 'Agendamento cancelado!',
 
-                                'description' =>
-                                $schedule->provider->user->name .
+                                'description' => $schedule->provider->user->name.
                                     ' cancelou a diária.',
 
                                 'origin' => 'schedule',
@@ -451,9 +440,8 @@ class ScheduleService
                     $notificationService->create([
                         'title' => 'Diarista a caminho!',
 
-                        'description' =>
-                        'Informe o código ' .
-                            $schedule->code .
+                        'description' => 'Informe o código '.
+                            $schedule->code.
                             ' para confirmar a chegada da diarista e liberar o início do serviço.',
 
                         'origin' => 'schedule',
@@ -475,8 +463,7 @@ class ScheduleService
                     $notificationService->create([
                         'title' => 'Diária finalizada!',
 
-                        'description' =>
-                        'Avalie o serviço feito pelo diarista e conte-nos como foi sua experiência.',
+                        'description' => 'Avalie o serviço feito pelo diarista e conte-nos como foi sua experiência.',
 
                         'origin' => 'schedule',
 
@@ -495,7 +482,7 @@ class ScheduleService
             return $schedule->fresh(['client.user', 'provider.user', 'address']);
         } catch (\Exception $e) {
             DB::rollBack();
-            Log::error('Erro ao atualizar status do agendamento: ' . $e->getMessage());
+            Log::error('Erro ao atualizar status do agendamento: '.$e->getMessage());
             throw new \Exception('Não foi possível atualizar o status do agendamento.');
         }
     }
@@ -527,7 +514,7 @@ class ScheduleService
         } catch (\Exception $e) {
             DB::rollBack();
 
-            Log::error('Erro ao cancelar agendamento: ' . $e->getMessage());
+            Log::error('Erro ao cancelar agendamento: '.$e->getMessage());
 
             throw new \Exception('Não foi possível cancelar o agendamento.');
         }

+ 0 - 1
app/Services/SearchService.php

@@ -6,7 +6,6 @@ use App\Models\Address;
 use App\Models\Client;
 use App\Models\Provider;
 use App\Rules\ScheduleBusinessRules;
-use App\Services\DistanceService;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\DB;
 

+ 7 - 7
app/Services/UserService.php

@@ -85,13 +85,13 @@ class UserService
             }
 
             if (isset($data['avatar']) && $data['avatar'] instanceof UploadedFile) {
-                $client  = $user->client ?? Client::create(['user_id' => $user->id]);
-                $media   = $this->mediaService->replaceFile(
-                    newFile:   $data['avatar'],
-                    folder:    "client/avatar/{$client->id}",
-                    source:    'client',
-                    sourceId:  $client->id,
-                    old:       $client->profileMedia,
+                $client = $user->client ?? Client::create(['user_id' => $user->id]);
+                $media = $this->mediaService->replaceFile(
+                    newFile: $data['avatar'],
+                    folder: "client/avatar/{$client->id}",
+                    source: 'client',
+                    sourceId: $client->id,
+                    old: $client->profileMedia,
                 );
                 $client->profile_media_id = $media->id;
                 $client->save();

+ 1 - 1
app/Tasks/SendPushNotificationsTask.php

@@ -15,7 +15,7 @@ class SendPushNotificationsTask
         try {
             $this->dispatcher->dispatch();
         } catch (Throwable $e) {
-            Log::error('SendPushNotificationsTask failed: ' . $e->getMessage(), [
+            Log::error('SendPushNotificationsTask failed: '.$e->getMessage(), [
                 'exception' => $e,
             ]);
         }

+ 2 - 2
app/Traits/RemoveArchiveS3.php

@@ -14,11 +14,11 @@ trait RemoveArchiveS3
      */
     public function removeArchiveByPath(string $path): bool
     {
-        if (!Storage::exists($path)) {
+        if (! Storage::exists($path)) {
             return false;
         }
 
-        if (!Storage::delete($path)) {
+        if (! Storage::delete($path)) {
             throw new Exception('Deletion was not possible');
         }
 

+ 2 - 2
app/Traits/UploadsFile.php

@@ -11,8 +11,8 @@ trait UploadsFile
     public function uploadFile(UploadedFile $file, string $folder, ?string $filename = null): string
     {
         $extension = $file->getClientOriginalExtension();
-        $name      = $filename ?? Str::random(20).'.'.$extension;
-        $path      = $folder.'/'.$name;
+        $name = $filename ?? Str::random(20).'.'.$extension;
+        $path = $folder.'/'.$name;
 
         Storage::disk('s3')->put($path, file_get_contents($file));
 

+ 1 - 1
config/firebase.php

@@ -166,7 +166,7 @@ return [
              */
 
             'logging' => [
-                'http_log_channel' => env('FIREBASE_HTTP_LOG_CHANNEL'),
+                'http_log_channel'       => env('FIREBASE_HTTP_LOG_CHANNEL'),
                 'http_debug_log_channel' => env('FIREBASE_HTTP_DEBUG_LOG_CHANNEL'),
             ],
 

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است