- Add comprehensive tier feature matrix spec defining Free/Basic/Plus/Pro capabilities across recommendations, predictions, history, logs, tools, and family sharing - Add `stripe_price_id_annual` column to plans table and rename existing column to `stripe_price_id_monthly` - Normalize legacy fuel type aliases (petrol→e10, diesel→b7_standard) in users table - Implement BillingController with checkout, portal, success/cancel routes supporting monthly/annual cadence - Add admin subscription assignment in Filament user edit page with admin-granted subscription support - Add DowngradeUserOnSubscriptionDeleted listener to disable WhatsApp/SMS preferences on subscription cancellation - Add MissedNotificationsOverview widget to Filament user detail page - Add PollFuelPricesTest covering auto-refresh scenarios - Add PriceReliability enum with reliability classification based on price age - Add fuelTypes.js constants file exporting FUEL_TYPES from window global
46 lines
1012 B
PHP
46 lines
1012 B
PHP
<?php
|
|
|
|
namespace App\Enums;
|
|
|
|
use Illuminate\Support\Carbon;
|
|
|
|
enum PriceReliability: string
|
|
{
|
|
case Reliable = 'reliable';
|
|
case Stale = 'stale';
|
|
case Outdated = 'outdated';
|
|
|
|
public static function fromUpdatedAt(?Carbon $updatedAt): self
|
|
{
|
|
if ($updatedAt === null) {
|
|
return self::Outdated;
|
|
}
|
|
|
|
$hours = $updatedAt->diffInHours(now());
|
|
|
|
return match (true) {
|
|
$hours <= 72 => self::Reliable,
|
|
$hours <= 168 => self::Stale,
|
|
default => self::Outdated,
|
|
};
|
|
}
|
|
|
|
public function weight(): int
|
|
{
|
|
return match ($this) {
|
|
self::Reliable => 0,
|
|
self::Stale => 1,
|
|
self::Outdated => 2,
|
|
};
|
|
}
|
|
|
|
public function label(): string
|
|
{
|
|
return match ($this) {
|
|
self::Reliable => 'Reliable',
|
|
self::Stale => 'Older price — verify before driving',
|
|
self::Outdated => 'Outdated — may be inaccurate',
|
|
};
|
|
}
|
|
}
|