HEX
Server: nginx/1.24.0
System: Linux DGT-WORDPRESS-VM-SERVER 6.14.0-1017-azure #17~24.04.1-Ubuntu SMP Mon Dec 1 20:10:50 UTC 2025 x86_64
User: ubuntu (1000)
PHP: 8.4.12
Disabled: NONE
Upload Files
File: /mnt/data/ghayatcom/ghayatcom-api/app/Library/SubscriptionLibrary.php
<?php 
namespace App\Library;
use Illuminate\Support\Carbon;
use App\Subscription;
use App\SubscriptionPlan;
use DB;
use Config;

/**
 * @param mixed $stripe
 * @param mixed $result
 * @param mixed $return
 */

class SubscriptionLibrary {

	private $stripe;

	public function __construct()
    {
    	$stripeSecret = Config::get('stripe.stripe_secret_key');
        $this->stripe = new \Stripe\StripeClient($stripeSecret);
    }

	public function status($user_id){
		$subscription = Subscription::with('subscriptionPriceDetails')->where('user_id',$user_id)->where('status','1')->latest()->first();
		if(!empty($subscription)) {
			// $result = $this->stripe->subscriptions->retrieve($subscription->stripe_subscription_id,[]);
			if($subscription->status == 1) {
				$status = 'active';
			} else {
				$status = 'expired';
			}

			$carbon = Carbon::parse($subscription->created_at);
			if($subscription->subscriptionPriceDetails->interval == 'month') {
				$carbon = $carbon->addMonth();
			} elseif ($subscription->subscriptionPriceDetails->interval == 'week') {
				$carbon = $carbon->addWeek();
			} elseif ($subscription->subscriptionPriceDetails->interval == 'year') {
				$carbon = $carbon->addYear();
			} else {
				$carbon = $carbon->addDay();
			}

			$return = ['plan' => 'premium', 'status' => $status, 'end_period' => $carbon->format('Y-m-d')];
		} else {
			$return = ['plan' => 'free', 'status' => 'active', 'end_period' => Carbon::now()->addDay()->format('Y-m-d')];
		}
		return $return;
	}

	public function list(){
		$return = SubscriptionPlan::with(['subscriptionDetails','priceDetails' => function($q){
                $q->where('status','active');
            }])->get();
		return $return;
	}


	public function newStatus($user_id){
		$subscription = Subscription::where('user_id',$user_id)->where('status','1')->latest()->first();
		if(!empty($subscription)) {
			$subscription_history = Subscription::where('user_id',$user_id)->where('status','1')->with(['subscriptionPlanDetails' => function ($query) { // Specify fields from subscriptionPlanDetails
                $query->select('id', 'name');
            },'subscriptionPriceDetails'])->get()->toArray();
        
            if (empty($subscription_history)) {
                $return = ['plan' => 'free', 'status' => 'active', 'end_period' => Carbon::now()->addDay()->format('Y-m-d')];
               
            } else{
    
            $createdAt = $subscription_history[0]['created_at'];
			$status = $subscription_history[0]['status'];
         
            $date = new \DateTime($createdAt);

            $interval = $subscription_history[0]['subscription_price_details']['interval'] ?? null;

            if ($interval === 'year') {
                $date->modify('+365 days');
            } elseif ($interval === 'month') {
                $date->modify('+30 days');
            } elseif ($interval === 'week') {
                $date->modify('+7 days');
            } elseif ($interval === 'day') {
                $date->modify('+1 day');
            } else {
                return self::sentResponse(400, [], __('digimed_validation.error_response.invalid_interval'));
            }
            $nextDue = $date->format('Y-m-d');

            // Populate subscription details
			$return = [
            'plan' => $subscription_history[0]['subscription_plan_details']['name'] ?? 'N/A',
            'end_period' => $nextDue,
			'status' => $status
       		 ];
		} }else{
			$return = ['plan' => 'free', 'status' => 'active', 'end_period' => Carbon::now()->addDay()->format('Y-m-d')];
		}
		return $return;
	
}
}