fix free subscribe issue

This commit is contained in:
m.razaghi
2026-08-14 21:05:21 +03:30
parent d7f6131a33
commit fcaa51626d

View File

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