88 lines
3.0 KiB
PHP
Executable File
88 lines
3.0 KiB
PHP
Executable File
<?php
|
|
|
|
namespace App\Http\Controllers\Api;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\Plan;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Http\JsonResponse;
|
|
|
|
class PlanController extends Controller
|
|
{
|
|
/**
|
|
* List all plans for pricing page
|
|
*/
|
|
public function index(): JsonResponse
|
|
{
|
|
// Get only active plans
|
|
$plans = Plan::active()->ordered()->get();
|
|
|
|
return response()->json([
|
|
'success' => true,
|
|
'data' => [
|
|
'plans' => $plans->map(function ($plan) {
|
|
return [
|
|
'id' => $plan->id,
|
|
'slug' => $plan->slug,
|
|
'name' => $plan->name,
|
|
'description' => $plan->description,
|
|
'price' => $plan->price,
|
|
'formatted_price' => $plan->formatted_price,
|
|
'monthly_price' => $plan->monthly_price,
|
|
'currency' => $plan->currency,
|
|
'billing_period' => $plan->billing_period,
|
|
'trial_days' => $plan->trial_days,
|
|
'features' => $plan->features,
|
|
'limits' => $plan->limits,
|
|
'is_free' => $plan->is_free,
|
|
'is_featured' => $plan->is_featured,
|
|
'is_active' => $plan->is_active,
|
|
'coming_soon' => !$plan->is_active,
|
|
'has_trial' => $plan->has_trial,
|
|
'savings_percent' => $plan->savings_percent,
|
|
];
|
|
}),
|
|
],
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Get a single plan by slug
|
|
*/
|
|
public function show(string $slug): JsonResponse
|
|
{
|
|
$plan = Plan::where('slug', $slug)->where('is_active', true)->first();
|
|
|
|
if (!$plan) {
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'Plan not found',
|
|
], 404);
|
|
}
|
|
|
|
return response()->json([
|
|
'success' => true,
|
|
'data' => [
|
|
'plan' => [
|
|
'id' => $plan->id,
|
|
'slug' => $plan->slug,
|
|
'name' => $plan->name,
|
|
'description' => $plan->description,
|
|
'price' => $plan->price,
|
|
'formatted_price' => $plan->formatted_price,
|
|
'monthly_price' => $plan->monthly_price,
|
|
'currency' => $plan->currency,
|
|
'billing_period' => $plan->billing_period,
|
|
'trial_days' => $plan->trial_days,
|
|
'features' => $plan->features,
|
|
'limits' => $plan->limits,
|
|
'is_free' => $plan->is_free,
|
|
'is_featured' => $plan->is_featured,
|
|
'has_trial' => $plan->has_trial,
|
|
'savings_percent' => $plan->savings_percent,
|
|
],
|
|
],
|
|
]);
|
|
}
|
|
}
|