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, '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, ], ], ]); } }