- Delete unused Livewire Search test and fuel type select Blade component - Move subscription webhook listener from EventServiceProvider to AppServiceProvider - Add FUEL_TYPES global config to app layout for client-side use - Add Billable trait to User model and include email_verified_at in fillable - Implement monthly/annual cadence toggle with pricing display and smart CTA routing on homepage - Update VerifyApiKeyMiddlewareTest to use e10 instead of petrol - Refactor PollFuelPrices to auto-refresh stale stations based on last_seen_at - Add incremental polling with cached timestamp and effective-start-timestamp param to FuelPriceService - Normalize amenities/fuel_types from API objects to flat arrays, skip stations missing required fields - Log response body on API failures in ApiLogger - Default homepage sort to 'reliable' instead of 'price'
51 lines
1.3 KiB
PHP
51 lines
1.3 KiB
PHP
<?php
|
|
|
|
namespace App\Services;
|
|
|
|
use App\Models\ApiLog;
|
|
use Illuminate\Http\Client\Response;
|
|
use Illuminate\Support\Str;
|
|
use Throwable;
|
|
|
|
class ApiLogger
|
|
{
|
|
/**
|
|
* Execute an HTTP request and log it to api_logs.
|
|
*
|
|
* The callable must return an Illuminate\Http\Client\Response.
|
|
* Exceptions are logged and re-thrown so the caller handles them.
|
|
*
|
|
* @param callable(): Response $request
|
|
*/
|
|
public function send(string $service, string $method, string $url, callable $request): Response
|
|
{
|
|
$start = microtime(true);
|
|
$statusCode = null;
|
|
$error = null;
|
|
|
|
try {
|
|
$response = $request();
|
|
$statusCode = $response->status();
|
|
|
|
if ($response->failed()) {
|
|
$error = Str::limit($response->body(), 1000);
|
|
}
|
|
|
|
return $response;
|
|
} catch (Throwable $e) {
|
|
$error = $e->getMessage();
|
|
|
|
throw $e;
|
|
} finally {
|
|
ApiLog::create([
|
|
'service' => $service,
|
|
'method' => strtoupper($method),
|
|
'url' => $url,
|
|
'status_code' => $statusCode,
|
|
'duration_ms' => (int) round((microtime(true) - $start) * 1000),
|
|
'error' => $error,
|
|
]);
|
|
}
|
|
}
|
|
}
|