Browse Source

ajustes nas imagens

Gustavo Zanatta 3 days ago
parent
commit
cde3caabc2

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

@@ -11,6 +11,8 @@ class ClientRequest extends FormRequest
         $clientId = $this->route('id');
 
         $rules = [
+            'avatar' => 'sometimes|file|image|mimes:jpg,jpeg,png,webp|max:5120',
+
             'document' => [
                 'sometimes',
                 'string',

+ 2 - 0
app/Http/Resources/ProviderResource.php

@@ -32,6 +32,8 @@ class ProviderResource extends JsonResource
             'recipient_id'                   => $this->recipient_id,
             'recipient_default_bank_account' => $this->recipient_default_bank_account,
             'profile_media'                  => $this->profileMedia ? new MediaResource($this->profileMedia) : null,
+            'document_front_media'           => $this->whenLoaded('documentFrontMedia', fn () => $this->documentFrontMedia ? new MediaResource($this->documentFrontMedia) : null),
+            'document_back_media'            => $this->whenLoaded('documentBackMedia', fn () => $this->documentBackMedia ? new MediaResource($this->documentBackMedia) : null),
             'created_at'                     => Carbon::parse($this->created_at)->format('d/m/Y H:i'),
             'updated_at'                     => Carbon::parse($this->updated_at)->format('d/m/Y H:i'),
         ];

+ 20 - 5
app/Services/ClientService.php

@@ -9,23 +9,26 @@ use App\Models\State;
 use App\Models\User;
 use App\Services\Pagarme\PagarmeCustomerService;
 use Illuminate\Database\Eloquent\Collection;
+use Illuminate\Http\UploadedFile;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Log;
 
 class ClientService
 {
     public function __construct(
-        private readonly AuthService $authService, private readonly PagarmeCustomerService $pagarmeCustomerService
+        private readonly AuthService $authService,
+        private readonly PagarmeCustomerService $pagarmeCustomerService,
+        private readonly MediaService $mediaService,
     ) {}
 
     public function getAll(): Collection
     {
-        return Client::with(['user'])->get();
+        return Client::with(['user', 'profileMedia'])->get();
     }
 
     public function findById(int $id): ?Client
     {
-        return Client::with(['user'])->find($id);
+        return Client::with(['user', 'profileMedia'])->find($id);
     }
 
     public function create(array $data): Client
@@ -35,11 +38,23 @@ class ClientService
 
     public function update(array $data, int $id)
     {
-        $client = Client::findOrFail($id);
+        $client = Client::with(['profileMedia'])->findOrFail($id);
+
+        if (isset($data['avatar']) && $data['avatar'] instanceof UploadedFile) {
+            $media = $this->mediaService->replaceFile(
+                newFile: $data['avatar'],
+                folder: "client/avatar/{$client->id}",
+                source: 'client',
+                sourceId: $client->id,
+                old: $client->profileMedia,
+            );
+            $data['profile_media_id'] = $media->id;
+            unset($data['avatar']);
+        }
 
         $client->update($data);
 
-        return $client;
+        return $client->fresh(['user', 'profileMedia']);
     }
 
     public function delete(int $id): bool

+ 1 - 1
app/Services/ProviderService.php

@@ -38,7 +38,7 @@ class ProviderService
 
     public function findById(int $id): ?Provider
     {
-        return Provider::with(['user', 'profileMedia'])->find($id);
+        return Provider::with(['user', 'profileMedia', 'documentFrontMedia', 'documentBackMedia'])->find($id);
     }
 
     public function create(array $data): Provider

+ 30 - 12
app/Services/SearchService.php

@@ -4,10 +4,12 @@ namespace App\Services;
 
 use App\Models\Address;
 use App\Models\Client;
+use App\Models\Media;
 use App\Models\Provider;
 use App\Rules\ScheduleBusinessRules;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Storage;
 
 class SearchService
 {
@@ -54,6 +56,7 @@ class SearchService
             ->when($name, fn ($q) => $q->where('provider_user.name', 'ILIKE', "%{$name}%"))
             ->select(
                 'providers.id as provider_id',
+                'providers.profile_media_id',
                 'provider_user.name as provider_name',
                 'provider_address.district',
                 'provider_address.latitude as provider_latitude',
@@ -87,18 +90,33 @@ class SearchService
             $providers = $baseQuery->get();
         }
 
-        return $providers
-            ->when(
-                $date,
-                fn ($collection) => $collection->whereIn(
-                    'provider_id',
-                    ScheduleBusinessRules::getAvailableProviderIdsForDate(
-                        $date,
-                        $collection->pluck('provider_id')
-                    )->toArray()
-                )->values()
-            )
-            ->toArray();
+        $filtered = $providers->when(
+            $date,
+            fn ($collection) => $collection->whereIn(
+                'provider_id',
+                ScheduleBusinessRules::getAvailableProviderIdsForDate(
+                    $date,
+                    $collection->pluck('provider_id')
+                )->toArray()
+            )->values()
+        );
+
+        $mediaIds = $filtered->pluck('profile_media_id')->filter()->unique()->values();
+        $mediaUrls = [];
+        if ($mediaIds->isNotEmpty()) {
+            Media::whereIn('id', $mediaIds)->get()->each(function ($media) use (&$mediaUrls) {
+                $mediaUrls[$media->id] = $media->path
+                    ? Storage::temporaryUrl($media->path, now()->addMinutes(60))
+                    : null;
+            });
+        }
+
+        return $filtered->map(function ($item) use ($mediaUrls) {
+            $arr = is_array($item) ? $item : $item->toArray();
+            $arr['profile_media_url'] = $mediaUrls[$arr['profile_media_id'] ?? null] ?? null;
+            unset($arr['profile_media_id']);
+            return $arr;
+        })->values()->toArray();
     }
 
     private function distanceSelect(?float $clientLatitude, ?float $clientLongitude): \Illuminate\Contracts\Database\Query\Expression