// app/Enums/SubscriptionTier.php
<?php
namespace App\Enums;
enum SubscriptionTier: string
{
case FREE = 'free';
case BASIC = 'basic';
case PRO = 'pro';
case ENTERPRISE = 'enterprise';
public function getMonthlyLimit(): int
{
return match($this) {
self::FREE => 1000,
self::BASIC => 5000,
self::PRO => 20000,
self::ENTERPRISE => 100000
};
}
}
// app/Controllers/AccountController.php
namespace App\Http\Controllers;
use App\Enums\SubscriptionTier;
use App\Models\Account;
use Illuminate\Http\Request;
class AccountController extends Controller
{
public function updateSubscription(Request $request, Account $account)
{
$newTier = $request->enum('tier', SubscriptionTier::class);
if (!$newTier) {
return response()->json([
'error' => 'Invalid subscription tier provided'
], 422);
}
$account->update([
'subscription_tier' => $newTier,
'monthly_limit' => $newTier->getMonthlyLimit(),
'upgraded_at' => now()
]);
return response()->json([
'message' => 'Subscription updated successfully',
'account' => $account->fresh()
]);
}
}