Procházet zdrojové kódy

fix: register provider

Gustavo Mantovani před 1 týdnem
rodič
revize
a46ac81900

+ 7 - 2
app/Http/Requests/AddressRequest.php

@@ -11,11 +11,13 @@ class AddressRequest extends FormRequest
         $rules = [
             'source'    => 'sometimes|string|in:provider,client',
             'source_id' => 'sometimes|integer|min:1',
-            'zip_code'  => [
+
+            'zip_code' => [
                 'sometimes',
                 'string',
                 'regex:/^[0-9]{8}$/',
             ],
+
             'address'        => 'sometimes|string',
             'number'         => 'nullable|string|max:20',
             'district'       => 'nullable|string|max:255',
@@ -32,17 +34,20 @@ class AddressRequest extends FormRequest
         ];
 
         if ($this->isMethod('post')) {
-            $rules['source']    = 'required|string|in:provider,client';
+            $rules['source'] = 'required|string|in:provider,client';
+
             $rules['source_id'] = [
                 'required',
                 'integer',
                 'min:1',
             ];
+
             $rules['zip_code'] = [
                 'required',
                 'string',
                 'regex:/^[0-9]{8}$/',
             ];
+
             $rules['address']      = 'required|string';
             $rules['address_type'] = 'required|in:home,commercial,other';
         }

+ 7 - 2
app/Http/Requests/CityRequest.php

@@ -13,10 +13,12 @@ class CityRequest extends FormRequest
         $rules = [
             'name'       => 'sometimes|string|max:255',
             'country_id' => 'sometimes|exists:countries,id',
-            'state_id'   => [
+
+            'state_id' => [
                 'sometimes',
                 'exists:states,id',
             ],
+
             'status' => ['sometimes', Rule::enum(DefaultStatusEnum::class)],
         ];
 
@@ -29,11 +31,14 @@ class CityRequest extends FormRequest
                     return $query->where('state_id', $this->state_id);
                 }),
             ];
+
             $rules['country_id'] = 'required|exists:countries,id';
-            $rules['state_id']   = [
+
+            $rules['state_id'] = [
                 'required',
                 'exists:states,id',
             ];
+
             $rules['status'] = ['required', Rule::enum(DefaultStatusEnum::class)];
         }
 

+ 5 - 2
app/Http/Requests/ClientFavoriteProviderRequest.php

@@ -18,7 +18,8 @@ class ClientFavoriteProviderRequest extends FormRequest
         $favoriteId = $this->route('id');
 
         $rules = [
-            'client_id'   => ['sometimes', 'integer', 'exists:clients,id'],
+            'client_id' => ['sometimes', 'integer', 'exists:clients,id'],
+
             'provider_id' => [
                 'sometimes',
                 'integer',
@@ -28,11 +29,13 @@ class ClientFavoriteProviderRequest extends FormRequest
                     ->whereNull('deleted_at')
                     ->ignore($favoriteId),
             ],
+
             'notes' => ['nullable', 'string', 'max:1000'],
         ];
 
         if ($this->isMethod('POST')) {
-            $rules['client_id']   = ['required', 'integer', 'exists:clients,id'];
+            $rules['client_id'] = ['required', 'integer', 'exists:clients,id'];
+
             $rules['provider_id'] = [
                 'required',
                 'integer',

+ 4 - 2
app/Http/Requests/ClientProviderBlockRequest.php

@@ -18,7 +18,8 @@ class ClientProviderBlockRequest extends FormRequest
         $blockId  = $this->route('id');
 
         $rules = [
-            'client_id'   => ['sometimes', 'integer', 'exists:clients,id'],
+            'client_id' => ['sometimes', 'integer', 'exists:clients,id'],
+
             'provider_id' => [
                 'sometimes',
                 'integer',
@@ -31,7 +32,8 @@ class ClientProviderBlockRequest extends FormRequest
         ];
 
         if ($this->isMethod('POST')) {
-            $rules['client_id']   = ['required', 'integer', 'exists:clients,id'];
+            $rules['client_id'] = ['required', 'integer', 'exists:clients,id'];
+
             $rules['provider_id'] = [
                 'required',
                 'integer',

+ 6 - 0
app/Http/Requests/ClientRequest.php

@@ -21,6 +21,7 @@ class ClientRequest extends FormRequest
                     }
                 },
             ],
+
             'user_id' => [
                 'sometimes',
                 'exists:users,id',
@@ -60,6 +61,7 @@ class ClientRequest extends FormRequest
                     }
                 },
             ];
+
             $rules['user_id'] = [
                 'required',
                 'exists:users,id',
@@ -111,7 +113,9 @@ class ClientRequest extends FormRequest
             for ($d = 0, $c = 0; $c < $t; $c++) {
                 $d += $cpf[$c] * (($t + 1) - $c);
             }
+
             $d = ((10 * $d) % 11) % 10;
+
             if ($cpf[$c] != $d) {
                 return false;
             }
@@ -134,6 +138,7 @@ class ClientRequest extends FormRequest
 
         for ($i = $length; $i >= 1; $i--) {
             $sum += $numbers[$length - $i] * $pos--;
+
             if ($pos < 2) {
                 $pos = 9;
             }
@@ -152,6 +157,7 @@ class ClientRequest extends FormRequest
 
         for ($i = $length; $i >= 1; $i--) {
             $sum += $numbers[$length - $i] * $pos--;
+
             if ($pos < 2) {
                 $pos = 9;
             }

+ 4 - 2
app/Http/Requests/ProviderClientBlockRequest.php

@@ -19,7 +19,8 @@ class ProviderClientBlockRequest extends FormRequest
 
         $rules = [
             'provider_id' => ['sometimes', 'integer', 'exists:providers,id'],
-            'client_id'   => [
+
+            'client_id' => [
                 'sometimes',
                 'integer',
                 'exists:clients,id',
@@ -32,7 +33,8 @@ class ProviderClientBlockRequest extends FormRequest
 
         if ($this->isMethod('POST')) {
             $rules['provider_id'] = ['required', 'integer', 'exists:providers,id'];
-            $rules['client_id']   = [
+
+            $rules['client_id'] = [
                 'required',
                 'integer',
                 'exists:clients,id',

+ 22 - 10
app/Http/Requests/ProviderRequest.php

@@ -2,10 +2,10 @@
 
 namespace App\Http\Requests;
 
+use App\Enums\ApprovalStatusEnum;
+use App\Enums\UserTypeEnum;
 use Illuminate\Foundation\Http\FormRequest;
 use Illuminate\Validation\Rule;
-use App\Enums\UserTypeEnum;
-use App\Enums\ApprovalStatusEnum;
 
 class ProviderRequest extends FormRequest
 {
@@ -27,7 +27,9 @@ class ProviderRequest extends FormRequest
                     ->ignore($providerId)
                     ->whereNull('deleted_at'),
             ],
+
             'rg' => 'sometimes|nullable|string|max:20',
+
             'user_id' => [
                 'sometimes',
                 'exists:users,id',
@@ -51,11 +53,13 @@ class ProviderRequest extends FormRequest
                             $query->where('id', '!=', $providerId);
                         })
                         ->exists();
+
                     if ($providerExists) {
                         $fail(__('validation.custom.user_id.already_linked_to_provider'));
                     }
                 },
             ],
+
             'average_rating'         => 'sometimes|nullable|numeric|min:0|max:5',
             'total_services'         => 'sometimes|integer|min:0',
             'birth_date'             => 'sometimes|nullable|date|before:today',
@@ -90,6 +94,7 @@ class ProviderRequest extends FormRequest
                 },
                 Rule::unique('providers', 'document')->whereNull('deleted_at'),
             ];
+
             $rules['recipient_name']                                     = 'required|string|max:255';
             $rules['recipient_email']                                    = 'required|email|max:255';
             $rules['recipient_description']                              = 'required|string';
@@ -109,7 +114,8 @@ class ProviderRequest extends FormRequest
             $rules['recipient_default_bank_account.type']                = ['required', Rule::in(['checking', 'savings'])];
             $rules['recipient_default_bank_account.metadata']            = 'required|array';
             $rules['recipient_metadata']                                 = 'required|array';
-            $rules['user_id']                                            = [
+
+            $rules['user_id'] = [
                 'required',
                 'exists:users,id',
                 Rule::unique('providers', 'user_id')->whereNull('deleted_at'),
@@ -127,6 +133,7 @@ class ProviderRequest extends FormRequest
                         ->where('user_id', $value)
                         ->whereNull('deleted_at')
                         ->exists();
+
                     if ($providerExists) {
                         $fail(__('validation.custom.user_id.already_linked_to_provider'));
                     }
@@ -168,7 +175,9 @@ class ProviderRequest extends FormRequest
             for ($d = 0, $c = 0; $c < $t; $c++) {
                 $d += $cpf[$c] * (($t + 1) - $c);
             }
+
             $d = ((10 * $d) % 11) % 10;
+
             if ($cpf[$c] != $d) {
                 return false;
             }
@@ -188,14 +197,15 @@ class ProviderRequest extends FormRequest
         }
 
         // Valida primeiro dígito verificador
-        $length = strlen($cnpj) - 2;
+        $length  = strlen($cnpj) - 2;
         $numbers = substr($cnpj, 0, $length);
-        $digits = substr($cnpj, $length);
-        $sum = 0;
-        $pos = $length - 7;
+        $digits  = substr($cnpj, $length);
+        $sum     = 0;
+        $pos     = $length - 7;
 
         for ($i = $length; $i >= 1; $i--) {
             $sum += $numbers[$length - $i] * $pos--;
+
             if ($pos < 2) {
                 $pos = 9;
             }
@@ -208,13 +218,15 @@ class ProviderRequest extends FormRequest
         }
 
         // Valida segundo dígito verificador
-        $length = $length + 1;
+
+        $length  = $length + 1;
         $numbers = substr($cnpj, 0, $length);
-        $sum = 0;
-        $pos = $length - 7;
+        $sum     = 0;
+        $pos     = $length - 7;
 
         for ($i = $length; $i >= 1; $i--) {
             $sum += $numbers[$length - $i] * $pos--;
+
             if ($pos < 2) {
                 $pos = 9;
             }

+ 11 - 8
app/Http/Requests/RegisterProviderRequest.php

@@ -11,12 +11,12 @@ class RegisterProviderRequest extends FormRequest
   public function rules(): array
   {
     $rules = [
-      'email' => 'sometimes|email',
-      'phone' => 'sometimes|string|nullable|max:20',
-      'name' => 'required|string|max:255',
-      'code' => 'required|string|max:6',
-      'document' => ['required', 'string', 'max:20'],
-      'rg' => 'required|string|max:20',
+      'email'      => 'sometimes|email',
+      'phone'      => 'sometimes|string|nullable|max:20',
+      'name'       => 'required|string|max:255',
+      'code'       => 'required|string|max:6',
+      'document'   => ['required', 'string', 'max:20'],
+      'rg'         => 'required|string|max:20',
       'birth_date' => 'required|date|before:today',
 
       'recipient_name'        => 'sometimes|string|max:255',
@@ -59,13 +59,16 @@ class RegisterProviderRequest extends FormRequest
       'daily_price_2h' => 'required|numeric|min:0',
 
       'services_types_ids' => 'sometimes|array',
+
       'services_types_ids.*' => [
         'integer',
         Rule::exists('service_types', 'id')->where(function ($query) {
           $query->whereNull('deleted_at')->where('is_active', true);
         }),
       ],
+
       'service_types_ids' => 'sometimes|array',
+
       'service_types_ids.*' => [
         'integer',
         Rule::exists('service_types', 'id')->where(function ($query) {
@@ -73,8 +76,8 @@ class RegisterProviderRequest extends FormRequest
         }),
       ],
 
-      'working_days' => 'required|array|min:1',
-      'working_days.*.day' => 'required|integer|min:0|max:6',
+      'working_days'          => 'required|array|min:1',
+      'working_days.*.day'    => 'required|integer|min:0|max:6',
       'working_days.*.period' => ['required', Rule::in([WorkingPeriodEnum::MORNING->value, WorkingPeriodEnum::AFTERNOON->value])],
 
       'selfie'          => 'required|file|image|mimes:jpg,jpeg,png,webp|max:5120',

+ 2 - 1
app/Http/Requests/ReviewImprovementRequest.php

@@ -23,7 +23,8 @@ class ReviewImprovementRequest extends FormRequest
         ];
 
         if ($this->isMethod('POST')) {
-            $rules['review_id']           = ['required', 'integer', 'exists:reviews,id'];
+            $rules['review_id'] = ['required', 'integer', 'exists:reviews,id'];
+
             $rules['improvement_type_id'] = [
                 'required',
                 'integer',

+ 3 - 1
app/Http/Requests/ReviewRequest.php

@@ -38,7 +38,8 @@ class ReviewRequest extends FormRequest
 
             $rules['schedule_id'] = ['required', 'integer', 'exists:schedules,id'];
             $rules['origin']      = ['required', 'string', Rule::in(['provider', 'client'])];
-            $rules['origin_id']   = [
+
+            $rules['origin_id'] = [
                 'required',
                 'integer',
                 Rule::unique('reviews', 'origin_id')
@@ -47,6 +48,7 @@ class ReviewRequest extends FormRequest
                     ->whereNull('deleted_at')
                     ->ignore($reviewId),
             ];
+
             $rules['stars']              = ['required', 'numeric', 'min:0', 'max:5'];
             $rules['improvements_ids']   = ['sometimes', 'array'];
             $rules['improvements_ids.*'] = ['integer', 'exists:improvement_types,id'];

+ 2 - 0
app/Http/Requests/StateRequest.php

@@ -26,6 +26,7 @@ class StateRequest extends FormRequest
                     return $query->where('country_id', $this->country_id);
                 }),
             ];
+
             $rules['code'] = [
                 'required',
                 'string',
@@ -34,6 +35,7 @@ class StateRequest extends FormRequest
                     return $query->where('country_id', $this->country_id);
                 }),
             ];
+
             $rules['country_id'] = 'required|exists:countries,id';
             $rules['status']     = ['required', Rule::enum(DefaultStatusEnum::class)];
         }

+ 1 - 0
app/Http/Requests/UserAppsValidateCodeRequest.php

@@ -15,6 +15,7 @@ class UserAppsValidateCodeRequest extends FormRequest
         if ($this->has('email')) {
             $rules['email'] = 'required|email';
         }
+
         if (! $this->has('phone')) {
             $rules['phone'] = 'required|string|max:20';
         }

+ 4 - 1
app/Http/Requests/UserRequest.php

@@ -14,11 +14,13 @@ class UserRequest extends FormRequest
         $rules = [
             'avatar' => 'sometimes|string|nullable',
             'name'   => 'sometimes|string|nullable',
-            'email'  => [
+
+            'email' => [
                 'sometimes',
                 'email',
                 Rule::unique('users', 'email')->ignore($this->route('id')),
             ],
+
             'password' => 'sometimes|string|nullable',
             'type'     => ['sometimes', Rule::enum(UserTypeEnum::class)],
             'language' => ['sometimes', Rule::enum(LanguageEnum::class)],
@@ -29,6 +31,7 @@ class UserRequest extends FormRequest
             $rules['name']     = 'required|string|max:255';
             $rules['email']    = 'required|email|unique:users,email';
             $rules['password'] = 'required|string|min:6';
+
             if (! $this->has('language')) {
                 $this->merge(['language' => LanguageEnum::PORTUGUESE->value]);
             }

+ 41 - 15
app/Services/ProviderService.php

@@ -46,7 +46,7 @@ class ProviderService
         return DB::transaction(function () use ($data) {
             $provider = Provider::create($data);
 
-            if (! empty($data['recipient_code'])) {
+            if (! empty($data['recipient_name']) && ! empty($data['recipient_default_bank_account'])) {
                 $this->pagarmeRecipientService->createRecipientForProvider($provider, $data);
             }
 
@@ -70,7 +70,9 @@ class ProviderService
                 sourceId: $model->id,
                 old: $model->profileMedia,
             );
+
             $data['profile_media_id'] = $media->id;
+
             unset($data['avatar']);
         }
 
@@ -79,19 +81,6 @@ class ProviderService
         return $model->fresh(['user', 'profileMedia']);
     }
 
-    public function updateBankAccount(int $id, array $bankAccountData): ?Provider
-    {
-        $provider = $this->findById($id);
-
-        if (! $provider) {
-            return null;
-        }
-
-        $this->pagarmeRecipientService->updateDefaultBankAccount($provider, $bankAccountData);
-
-        return $provider->fresh(['user', 'profileMedia']);
-    }
-
     public function delete(int $id): bool
     {
         $model = $this->findById($id);
@@ -103,6 +92,8 @@ class ProviderService
         return $model->delete();
     }
 
+    //
+
     public function getPending(int $page = 1, int $perPage = 10): LengthAwarePaginator
     {
         return Provider::query()
@@ -112,10 +103,13 @@ class ProviderService
             ->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']);
@@ -126,12 +120,15 @@ class ProviderService
     {
         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 {
@@ -173,6 +170,7 @@ class ProviderService
             $user->save();
 
             $provider = new Provider;
+
             $provider->user_id = $user->id;
             $provider->rg = $data['rg'] ?? null;
             $provider->document = $this->sanitizeDigits($data['document'] ?? null);
@@ -182,7 +180,9 @@ class ProviderService
             $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(
@@ -191,6 +191,7 @@ class ProviderService
                 source: 'provider',
                 sourceId: $provider->id,
             );
+
             $provider->profile_media_id = $selfie->id;
 
             $front = $this->mediaService->createFromFile(
@@ -200,6 +201,7 @@ class ProviderService
                 sourceId: $provider->id,
                 filename: 'frente.'.$data['document_front']->getClientOriginalExtension(),
             );
+
             $provider->document_front_media_id = $front->id;
 
             $back = $this->mediaService->createFromFile(
@@ -209,13 +211,15 @@ class ProviderService
                 sourceId: $provider->id,
                 filename: 'verso.'.$data['document_back']->getClientOriginalExtension(),
             );
+
             $provider->document_back_media_id = $back->id;
 
             $provider->save();
 
-            if (! empty($data['recipient_code'])) {
+            if (! empty($data['recipient_name']) && ! empty($data['recipient_default_bank_account'])) {
                 $this->pagarmeRecipientService->createRecipientForProvider($provider, $data);
             }
+
             $this->createProviderAddress($provider->id, $data);
             $this->createProviderServicesTypes($provider->id, $data);
             $this->createProviderWorkingDays($provider->id, $data);
@@ -234,13 +238,30 @@ class ProviderService
             return $result;
         } catch (\Exception $e) {
             DB::rollBack();
+
             Log::error('Error registering provider: '.$e->getMessage(), [
                 'data' => $data,
             ]);
+
             throw $e;
         }
     }
 
+    public function updateBankAccount(int $id, array $bankAccountData): ?Provider
+    {
+        $provider = $this->findById($id);
+
+        if (! $provider) {
+            return null;
+        }
+
+        $this->pagarmeRecipientService->updateDefaultBankAccount($provider, $bankAccountData);
+
+        return $provider->fresh(['user', 'profileMedia']);
+    }
+
+    //
+
     private function createProviderAddress(int $providerId, array $data): void
     {
         $state = null;
@@ -264,6 +285,7 @@ class ProviderService
         }
 
         $address = new Address;
+
         $address->source = 'provider';
         $address->source_id = $providerId;
         $address->zip_code = $this->sanitizeDigits($data['zip_code'] ?? null);
@@ -275,6 +297,7 @@ class ProviderService
         $address->address_type = $data['address_type'] ?? 'home';
         $address->state_id = $state?->id;
         $address->city_id = $city?->id;
+
         $address->save();
     }
 
@@ -295,10 +318,12 @@ class ProviderService
     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)) {
@@ -306,6 +331,7 @@ class ProviderService
             }
 
             $uniqueKey = $day.'-'.$period;
+
             if (isset($seen[$uniqueKey])) {
                 continue;
             }