ソースを参照

chore: add logs no fluxo de zip-code-coordinate

Gustavo Mantovani 1 週間 前
コミット
7aecb0453f
2 ファイル変更173 行追加13 行削除
  1. 99 10
      app/Services/DashboardService.php
  2. 74 3
      app/Services/ZipCodeCoordinatesService.php

+ 99 - 10
app/Services/DashboardService.php

@@ -18,6 +18,7 @@ use App\Rules\ScheduleBusinessRules;
 use Illuminate\Auth\Access\AuthorizationException;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Log;
 use Illuminate\Support\Facades\Storage;
 
 class DashboardService
@@ -218,15 +219,7 @@ class DashboardService
             $clientCoordinates['longitude'] ?? null,
         );
 
-        $providersClose = Provider::leftJoin(
-            'users as provider_user',
-            'provider_user.id',
-            '=',
-            'providers.user_id'
-        )
-            ->visibleToCustomers()
-            ->leftJoin(
-                DB::raw("
+        $providerAddressLatestSubquery = DB::raw("
                     (
                         SELECT DISTINCT ON (source_id)
                             *
@@ -239,7 +232,86 @@ class DashboardService
                             is_primary DESC,
                             id DESC
                     ) AS provider_address
-                "),
+                ");
+
+        $providersCloseDebugQuery = Provider::leftJoin(
+            'users as provider_user',
+            'provider_user.id',
+            '=',
+            'providers.user_id'
+        )
+            ->visibleToCustomers()
+            ->leftJoin(
+                $providerAddressLatestSubquery,
+                'provider_address.source_id',
+                '=',
+                'providers.id'
+            )
+            ->whereNull('providers.deleted_at');
+
+        Log::info('Dashboard providersClose context', [
+            'client_id'                       => $cliente->id,
+            'user_id'                         => $user->id,
+            'client_primary_address_id'       => $clientPrimaryAddress?->id,
+            'client_primary_address_city_id'  => $clientPrimaryAddress?->city_id,
+            'client_primary_address_state_id' => $clientPrimaryAddress?->state_id,
+            'client_distance_address_id'      => $clientDistanceAddress?->id,
+            'client_distance_zip_code'        => $clientDistanceAddress?->zip_code,
+            'client_coordinates'              => $clientCoordinates,
+            'blocked_provider_ids_count'      => $blockedProviderIds->count(),
+            'providers_working_days_count'    => $providersWithWorkingDays->count(),
+        ]);
+
+        Log::info('Dashboard providersClose filter counts', [
+            'visible_with_bank' => (clone $providersCloseDebugQuery)
+                ->distinct('providers.id')
+                ->count('providers.id'),
+
+            'with_provider_address' => (clone $providersCloseDebugQuery)
+                ->whereNotNull('provider_address.id')
+                ->distinct('providers.id')
+                ->count('providers.id'),
+
+            'after_city_filter' => (clone $providersCloseDebugQuery)
+                ->whereNotNull('provider_address.id')
+                ->when(
+                    $clientPrimaryAddress?->city_id,
+                    fn ($query, int $cityId) => $query->where('provider_address.city_id', $cityId)
+                )
+                ->distinct('providers.id')
+                ->count('providers.id'),
+
+            'after_block_filter' => (clone $providersCloseDebugQuery)
+                ->whereNotNull('provider_address.id')
+                ->when(
+                    $clientPrimaryAddress?->city_id,
+                    fn ($query, int $cityId) => $query->where('provider_address.city_id', $cityId)
+                )
+                ->whereNotIn('providers.id', $blockedProviderIds)
+                ->distinct('providers.id')
+                ->count('providers.id'),
+
+            'after_working_days_filter' => (clone $providersCloseDebugQuery)
+                ->whereNotNull('provider_address.id')
+                ->when(
+                    $clientPrimaryAddress?->city_id,
+                    fn ($query, int $cityId) => $query->where('provider_address.city_id', $cityId)
+                )
+                ->whereNotIn('providers.id', $blockedProviderIds)
+                ->whereIn('providers.id', $providersWithWorkingDays)
+                ->distinct('providers.id')
+                ->count('providers.id'),
+        ]);
+
+        $providersClose = Provider::leftJoin(
+            'users as provider_user',
+            'provider_user.id',
+            '=',
+            'providers.user_id'
+        )
+            ->visibleToCustomers()
+            ->leftJoin(
+                $providerAddressLatestSubquery,
                 'provider_address.source_id',
                 '=',
                 'providers.id'
@@ -291,6 +363,13 @@ class DashboardService
             ->orderByRaw('distance_km ASC NULLS LAST')
             ->get();
 
+        Log::info('Dashboard providersClose query result', [
+            'count'                => $providersClose->count(),
+            'provider_ids_sample'  => $providersClose->pluck('provider_id')->take(20)->values()->all(),
+            'null_distance_count'  => $providersClose->whereNull('distance_km')->count(),
+            'provider_city_filter' => $clientPrimaryAddress?->city_id,
+        ]);
+
         $this->zipCodeCoordinatesService->preload(
             $providersClose->whereNull('distance_km')->pluck('provider_zip_code')
         );
@@ -328,6 +407,16 @@ class DashboardService
             ->sortBy(fn ($provider) => $provider->distance_km ?? PHP_FLOAT_MAX)
             ->values();
 
+        Log::info('Dashboard providersClose final result', [
+            'count' => $providersClose->count(),
+            'items_sample' => $providersClose->take(5)->map(fn ($provider) => [
+                'provider_id'   => $provider->provider_id,
+                'provider_name' => $provider->provider_name,
+                'district'      => $provider->district,
+                'distance_km'   => $provider->distance_km,
+            ])->values()->all(),
+        ]);
+
         $pendingSchedules = Schedule::with([
             'address:district,address,number,source_id,source,id,address_type',
         ])

+ 74 - 3
app/Services/ZipCodeCoordinatesService.php

@@ -6,6 +6,7 @@ use Illuminate\Http\Client\Pool;
 use Illuminate\Http\Client\Response;
 use Illuminate\Support\Facades\Cache;
 use Illuminate\Support\Facades\Http;
+use Illuminate\Support\Facades\Log;
 use Throwable;
 
 class ZipCodeCoordinatesService
@@ -15,9 +16,22 @@ class ZipCodeCoordinatesService
     public function resolve(?float $latitude, ?float $longitude, ?string $zipCode): ?array
     {
         if ($latitude !== null && $longitude !== null) {
+            Log::debug('ZipCodeCoordinates resolve using address coordinates', [
+                'latitude'  => $latitude,
+                'longitude' => $longitude,
+                'zip_code'  => $this->normalize($zipCode),
+            ]);
+
             return compact('latitude', 'longitude');
         }
 
+        Log::info('ZipCodeCoordinates fallback to zip code lookup', [
+            'zip_code'      => $this->normalize($zipCode),
+            'has_latitude'  => $latitude !== null,
+            'has_longitude' => $longitude !== null,
+            'reason'        => 'missing_address_coordinates',
+        ]);
+
         return $this->findByZipCode($zipCode);
     }
 
@@ -45,17 +59,34 @@ class ZipCodeCoordinatesService
         $zipCode = $this->normalize($zipCode);
 
         if ($zipCode === null) {
+            Log::info('ZipCodeCoordinates skipped lookup: invalid zip code');
+
             return null;
         }
 
         if (array_key_exists($zipCode, $this->resolvedZipCodes)) {
+            Log::debug('ZipCodeCoordinates memory cache hit', [
+                'zip_code' => $zipCode,
+                'found'    => $this->resolvedZipCodes[$zipCode] !== null,
+            ]);
+
             return $this->resolvedZipCodes[$zipCode];
         }
 
         if ($this->restoreFromCache($zipCode)) {
+            Log::debug('ZipCodeCoordinates persistent cache hit', [
+                'zip_code' => $zipCode,
+                'found'    => $this->resolvedZipCodes[$zipCode] !== null,
+            ]);
+
             return $this->resolvedZipCodes[$zipCode];
         }
 
+        Log::info('ZipCodeCoordinates Brasil API lookup required', [
+            'zip_code' => $zipCode,
+            'mode'     => 'single',
+        ]);
+
         $coordinates = $this->requestCoordinates($zipCode);
 
         $this->remember($zipCode, $coordinates);
@@ -82,9 +113,17 @@ class ZipCodeCoordinatesService
         }
 
         if ($pending === []) {
+            Log::debug('ZipCodeCoordinates preload skipped: no pending zip codes');
+
             return;
         }
 
+        Log::info('ZipCodeCoordinates Brasil API lookup required', [
+            'mode'             => 'preload',
+            'pending_count'    => count($pending),
+            'zip_codes_sample' => array_slice(array_values($pending), 0, 20),
+        ]);
+
         try {
             $baseUrl = rtrim((string) config('services.brasil_api.base_url'), '/');
 
@@ -97,7 +136,12 @@ class ZipCodeCoordinatesService
                     ->get("{$baseUrl}/api/cep/v2/{$zipCode}"),
                 $pending,
             ));
-        } catch (Throwable) {
+        } catch (Throwable $exception) {
+            Log::warning('ZipCodeCoordinates Brasil API preload failed', [
+                'pending_count' => count($pending),
+                'error'         => $exception->getMessage(),
+            ]);
+
             $responses = [];
         }
 
@@ -108,6 +152,14 @@ class ZipCodeCoordinatesService
                 ? $this->coordinatesFromResponse($response)
                 : null;
 
+            Log::info('ZipCodeCoordinates Brasil API preload response', [
+                'zip_code'     => $zipCode,
+                'has_response' => $response instanceof Response,
+                'status'       => $response instanceof Response ? $response->status() : null,
+                'found'        => $coordinates !== null,
+                'coordinates'  => $coordinates,
+            ]);
+
             $this->remember($zipCode, $coordinates);
         }
     }
@@ -155,14 +207,33 @@ class ZipCodeCoordinatesService
     private function requestCoordinates(string $zipCode): ?array
     {
         try {
+            Log::info('ZipCodeCoordinates calling Brasil API', [
+                'zip_code' => $zipCode,
+                'base_url' => rtrim((string) config('services.brasil_api.base_url'), '/'),
+            ]);
+
             $response = Http::baseUrl(rtrim((string) config('services.brasil_api.base_url'), '/'))
                 ->acceptJson()
                 ->connectTimeout((int) config('services.brasil_api.connect_timeout', 2))
                 ->timeout((int) config('services.brasil_api.timeout', 3))
                 ->get("api/cep/v2/{$zipCode}");
 
-            return $this->coordinatesFromResponse($response);
-        } catch (Throwable) {
+            $coordinates = $this->coordinatesFromResponse($response);
+
+            Log::info('ZipCodeCoordinates Brasil API response', [
+                'zip_code'    => $zipCode,
+                'status'      => $response->status(),
+                'found'       => $coordinates !== null,
+                'coordinates' => $coordinates,
+            ]);
+
+            return $coordinates;
+        } catch (Throwable $exception) {
+            Log::warning('ZipCodeCoordinates Brasil API request failed', [
+                'zip_code' => $zipCode,
+                'error'    => $exception->getMessage(),
+            ]);
+
             return null;
         }
     }