diff --git a/app/Http/Controllers/api/HomeController.php b/app/Http/Controllers/api/HomeController.php index 5556954..7bf5a80 100644 --- a/app/Http/Controllers/api/HomeController.php +++ b/app/Http/Controllers/api/HomeController.php @@ -7,7 +7,7 @@ use App\Models\Law; use App\Models\Notification; use App\Models\Category; use App\Models\RecentArt; -use App\Models\SubscribePlan; +use App\Models\SubscribePlan; // <-- Added this import use App\Models\UserSubscriber; use App\Services\AppMarketPurchaseVerifier; use App\Traits\BaseApiResponse; @@ -25,7 +25,7 @@ class HomeController extends Controller { $user = auth()->user(); - // 1. Check and grant 30-day free subscription if eligible + // --- NEW: Check and grant free subscription for existing logged-in users --- $this->checkAndGrantFreeSubscription($user); $this->refreshMarketSubscriptionAfterResponse($user); @@ -73,32 +73,41 @@ class HomeController extends Controller ]; }); - // 2. Fetch Active Subscription & Calculate Remaining Days - $activeSubscribers = $user->userSubscribers() - ->with('subscribe') + $freeSubscription = $user->userSubscribers() + ->whereHas('subscribe', function ($query) { + $query->where('is_free', true); + }) ->where('expired_at', '>=', now()) - ->get(); + ->first(); $current_plan = null; - if ($activeSubscribers->isNotEmpty()) { - $latestSubscription = $activeSubscribers->sortByDesc('expired_at')->first(); - $expiredDays = $activeSubscribers->sum(function ($subscriber) { - return $subscriber->expired_at->diffInDays(now()); - }); + if ($freeSubscription) { + $current_plan = [ + 'id' => $freeSubscription->id, + 'name' => $freeSubscription->subscribe->name, + 'price' => $freeSubscription->subscribe->price, + 'expired_day' => $freeSubscription->expired_at->diffInDays(now()), + 'is_free' => true, + ]; + } - // Accurately check if the active plan is free - $isFree = (bool) ( - $latestSubscription->is_free || - ($latestSubscription->subscribe && $latestSubscription->subscribe->is_free) - ); + $latestSubscription = $user->userSubscribers() + ->where('expired_at', '>=', now()) + ->latest('expired_at') + ->first(); + $expiredDays = UserSubscriber::query()->where('user_id', $user->id)->where('expired_at', '>=', now())->get()->sum(function ($subscriber) { + return $subscriber->expired_at->diffInDays(now()); + }); + + if ($latestSubscription) { $current_plan = [ 'id' => $latestSubscription->id, 'name' => $latestSubscription->subscribe->name ?? 'Subscription', - 'price' => $latestSubscription->subscribe->price ?? 0, + 'price' => $latestSubscription->subscribe->price ?? 100, 'expired_day' => $expiredDays, - 'is_free' => $isFree, + 'is_free' => (bool)$latestSubscription->is_free, ]; } @@ -115,8 +124,8 @@ class HomeController extends Controller return $this->success([ 'home' => $homeData, - 'hoqoqi_list' => $this->getCategoryList(1), - 'keyfari_list' => $this->getCategoryList(2), + 'hoqoqi_list' => $this->getCategoryList(1), // Category 1 + 'keyfari_list' => $this->getCategoryList(2), // Category 2 ]); } @@ -152,7 +161,7 @@ class HomeController extends Controller { $user = auth()->user(); - // 1. Check and grant 30-day free subscription if eligible + // --- NEW: Check and grant free subscription for existing logged-in users --- $this->checkAndGrantFreeSubscription($user); $this->refreshMarketSubscriptionAfterResponse($user); @@ -200,32 +209,41 @@ class HomeController extends Controller ]; }); - // 2. Fetch Active Subscription & Calculate Remaining Days - $activeSubscribers = $user->userSubscribers() - ->with('subscribe') + $freeSubscription = $user->userSubscribers() + ->whereHas('subscribe', function ($query) { + $query->where('is_free', true); + }) ->where('expired_at', '>=', now()) - ->get(); + ->first(); $current_plan = null; - if ($activeSubscribers->isNotEmpty()) { - $latestSubscription = $activeSubscribers->sortByDesc('expired_at')->first(); - $expiredDays = $activeSubscribers->sum(function ($subscriber) { - return $subscriber->expired_at->diffInDays(now()); - }); + if ($freeSubscription) { + $current_plan = [ + 'id' => $freeSubscription->id, + 'name' => $freeSubscription->subscribe->name, + 'price' => $freeSubscription->subscribe->price, + 'expired_day' => $freeSubscription->expired_at->diffInDays(now()), + 'is_free' => true, + ]; + } - // Accurately check if the active plan is free - $isFree = (bool) ( - $latestSubscription->is_free || - ($latestSubscription->subscribe && $latestSubscription->subscribe->is_free) - ); + $latestSubscription = $user->userSubscribers() + ->where('expired_at', '>=', now()) + ->latest('expired_at') + ->first(); + $expiredDays = UserSubscriber::query()->where('user_id', $user->id)->where('expired_at', '>=', now())->get()->sum(function ($subscriber) { + return $subscriber->expired_at->diffInDays(now()); + }); + + if ($latestSubscription) { $current_plan = [ 'id' => $latestSubscription->id, 'name' => $latestSubscription->subscribe->name ?? 'Subscription', - 'price' => $latestSubscription->subscribe->price ?? 0, + 'price' => $latestSubscription->subscribe->price ?? 100, 'expired_day' => $expiredDays, - 'is_free' => $isFree, + 'is_free' => (bool)$latestSubscription->is_free, ]; } @@ -255,6 +273,7 @@ class HomeController extends Controller $freePlan = SubscribePlan::where('is_free', true)->where('is_active', true)->first(); if ($freePlan) { + // Exactly matching the logic to keep the UI clean $user->userSubscribers()->create([ 'subscribe_plan_id' => $freePlan->id, 'expired_at' => now()->addDays($freePlan->expired_day + 1),