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;
}
}