Ver Fonte

feat: listagem propostas enviadas pelo prestador

Gustavo Zanatta há 1 semana atrás
pai
commit
1ba50e9ce5

+ 16 - 0
app/Http/Resources/CustomScheduleResource.php

@@ -2,8 +2,10 @@
 
 namespace App\Http\Resources;
 
+use App\Models\ScheduleProposal;
 use Illuminate\Http\Request;
 use Illuminate\Http\Resources\Json\JsonResource;
+use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Storage;
 
 class CustomScheduleResource extends JsonResource
@@ -18,6 +20,7 @@ class CustomScheduleResource extends JsonResource
         return [
             'id'              => $this->id,
             'schedule_id'     => $this->schedule_id,
+            'proposal_sent'   => $this->proposalSentByAuthProvider(),
             'address_type'    => $this->address_type,
             'service_type_id' => $this->service_type_id,
 
@@ -81,4 +84,17 @@ class CustomScheduleResource extends JsonResource
             }),
         ];
     }
+
+    private function proposalSentByAuthProvider(): bool
+    {
+        $providerId = Auth::user()?->provider?->id;
+
+        if (! $providerId) {
+            return false;
+        }
+
+        return ScheduleProposal::where('schedule_id', $this->schedule_id)
+            ->where('provider_id', $providerId)
+            ->exists();
+    }
 }

+ 12 - 2
app/Services/CustomScheduleService.php

@@ -326,7 +326,15 @@ class CustomScheduleService
             )
             ->get();
 
-        $availableOpportunities = $opportunities->filter(function ($opportunity) use ($providerId) {
+        $proposedScheduleIds = ScheduleProposal::where('provider_id', $providerId)
+            ->pluck('schedule_id')
+            ->flip();
+
+        $availableOpportunities = $opportunities->filter(function ($opportunity) use ($providerId, $proposedScheduleIds) {
+            if ($proposedScheduleIds->has($opportunity->id)) {
+                return true;
+            }
+
             try {
                 return $this->checkProviderAvailability($providerId, $opportunity);
             } catch (\Exception $e) {
@@ -334,7 +342,7 @@ class CustomScheduleService
             }
         });
 
-        $availableOpportunities->each(function ($opportunity) use ($providerAddress) {
+        $availableOpportunities->each(function ($opportunity) use ($providerAddress, $proposedScheduleIds) {
             $opportunity->distance_km = $this->zipCodeCoordinatesService->calculateDistance(
                 $providerAddress?->latitude !== null ? (float) $providerAddress->latitude : null,
                 $providerAddress?->longitude !== null ? (float) $providerAddress->longitude : null,
@@ -349,6 +357,8 @@ class CustomScheduleService
             $opportunity->customer_photo = $photoPath
                 ? Storage::temporaryUrl($photoPath, now()->addMinutes(60))
                 : null;
+
+            $opportunity->proposal_sent = $proposedScheduleIds->has($opportunity->id);
         });
 
         return $availableOpportunities->values();