47 lines
1.4 KiB
PHP
47 lines
1.4 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Enums\SubscriptionStatusEnum;
|
|
use App\Models\Subscription;
|
|
use Illuminate\Http\RedirectResponse;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Str;
|
|
|
|
class SubscriptionController extends Controller
|
|
{
|
|
public function subscribe(Request $request): RedirectResponse
|
|
{
|
|
$planner = $request->user();
|
|
|
|
if ($planner->hasActiveSubscription()) {
|
|
return redirect()->route('dashboard');
|
|
}
|
|
|
|
Subscription::create([
|
|
'planner_id' => $planner->id,
|
|
'stripe_subscription_id' => 'mock_' . Str::random(14),
|
|
'stripe_customer_id' => 'mock_' . Str::random(14),
|
|
'status' => SubscriptionStatusEnum::ACTIVE,
|
|
'plan' => 'default',
|
|
]);
|
|
|
|
return redirect()->route('dashboard')->with('success', 'Subscription activated!');
|
|
}
|
|
|
|
public function cancel(Request $request): RedirectResponse
|
|
{
|
|
$subscription = $request->user()->subscription;
|
|
|
|
if (! $subscription) {
|
|
return back()->with('error', 'No active subscription found.');
|
|
}
|
|
|
|
$subscription->update([
|
|
'status' => SubscriptionStatusEnum::CANCELED,
|
|
'ends_at' => now()->addDays(1), // Placeholder until Stripe webhook sets actual end date
|
|
]);
|
|
|
|
return back()->with('success', 'Subscription canceled. Access will continue until the end of your billing period.');
|
|
}
|
|
}
|