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)
This commit is contained in:
@@ -6,9 +6,8 @@ use Database\Factories\BrentPriceFactory;
|
||||
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Support\Carbon;
|
||||
|
||||
#[Fillable(['date', 'price_usd'])]
|
||||
#[Fillable(['date', 'price_usd', 'prediction_generated_at'])]
|
||||
class BrentPrice extends Model
|
||||
{
|
||||
/** @use HasFactory<BrentPriceFactory> */
|
||||
@@ -27,6 +26,7 @@ class BrentPrice extends Model
|
||||
return [
|
||||
'date' => 'date',
|
||||
'price_usd' => 'decimal:2',
|
||||
'prediction_generated_at' => 'datetime',
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user