Files
fuel-price/app/Console/Commands/FetchOilPrices.php
Ovidiu U 486f0e689c refactor: split oil price ingestion and prediction into separate services + commands
- BrentPriceFetcher owns ingestion (fetchFromEia / fetchFromFred, each throws on failure)
- BrentPricePredictor owns prediction and marks latest brent_prices row as generated
- oil:fetch command tries EIA, falls back to FRED, fails loudly if both fail
- oil:predict command prompts if latest price already has a prediction; --force bypasses
- add prediction_generated_at column to brent_prices
- delete OilPriceService (replaced by the two focused services)
2026-04-14 16:59:43 +01:00

38 lines
1.1 KiB
PHP

<?php
namespace App\Console\Commands;
use App\Services\BrentPriceFetcher;
use App\Services\BrentPriceSources\BrentPriceFetchException;
use Illuminate\Console\Attributes\Description;
use Illuminate\Console\Attributes\Signature;
use Illuminate\Console\Command;
#[Signature('oil:fetch')]
#[Description('Fetch latest Brent crude prices (EIA primary, FRED fallback)')]
class FetchOilPrices extends Command
{
public function handle(BrentPriceFetcher $fetcher): int
{
try {
$fetcher->fetchFromEia();
$this->info('Fetched Brent prices from EIA.');
return self::SUCCESS;
} catch (BrentPriceFetchException $e) {
$this->warn('EIA fetch failed: '.$e->getMessage().'. Trying FRED...');
}
try {
$fetcher->fetchFromFred();
$this->info('Fetched Brent prices from FRED.');
return self::SUCCESS;
} catch (BrentPriceFetchException $e) {
$this->error('Both EIA and FRED failed: '.$e->getMessage());
return self::FAILURE;
}
}
}