fix
This commit is contained in:
parent
33e8091a34
commit
be3f7bb67f
@ -15,9 +15,9 @@ return new class extends Migration
|
||||
$table->id();
|
||||
$table->unsignedInteger('user_id');
|
||||
$table->unsignedInteger('subscription_id');
|
||||
$table->unsignedInteger('remaining_number')->default(0);
|
||||
$table->json('remaining_number');
|
||||
$table->timestamp('expiry_at')->nullable();
|
||||
$table->timestamp('created_at');
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -3,7 +3,10 @@
|
||||
namespace IICN\Subscription\Concerns;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use IICN\Subscription\Models\Subscription;
|
||||
use IICN\Subscription\Models\SubscriptionUser;
|
||||
use IICN\Subscription\SubscriptionBuilder;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
|
||||
|
||||
trait ManagesSubscriptions
|
||||
{
|
||||
@ -19,64 +22,68 @@ trait ManagesSubscriptions
|
||||
// return new SubscriptionBuilder($this, $type, $prices);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the ending date of the trial.
|
||||
*
|
||||
* @param string $type
|
||||
* @return \Illuminate\Support\Carbon|null
|
||||
*/
|
||||
public function trialEndsAt($type = 'default')
|
||||
{
|
||||
// if (func_num_args() === 0 && $this->onGenericTrial()) {
|
||||
// return $this->trial_ends_at;
|
||||
// }
|
||||
//
|
||||
// if ($subscription = $this->subscription($type)) {
|
||||
// return $subscription->trial_ends_at;
|
||||
// }
|
||||
//
|
||||
// return $this->trial_ends_at;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine if the Stripe model has a given subscription.
|
||||
*
|
||||
* @param string $type
|
||||
* @return bool
|
||||
*/
|
||||
public function useSubscribe($type)
|
||||
public function useSubscribe(string $type)
|
||||
{
|
||||
// $subscription = $this->subscription($type);
|
||||
$subscription = $this->activeSubscriptionsWithType($type);
|
||||
|
||||
if (! isset($subscription[0]) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// $subscription->pivot->remaining_number[$type] = $subscription->pivot->remaining_number[$type] - 1;
|
||||
//
|
||||
// if (! $subscription || ! $subscription->valid()) {
|
||||
// return false;
|
||||
// }
|
||||
//
|
||||
// return $subscription->hasPrice($price);
|
||||
// $subscription->pivot->save();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a subscription instance by $type.
|
||||
*
|
||||
* @param string $type
|
||||
* @return \Laravel\Cashier\Subscription|null
|
||||
* @return BelongsToMany
|
||||
*/
|
||||
public function activeSubscriptions()
|
||||
public function activeSubscriptionsWithType(string $type): array
|
||||
{
|
||||
return $this->subscriptions->where(function ($query) {
|
||||
$query->wherePivot('expiry_at', '>', Carbon::now())->orWherePivotNull('expiry_at');
|
||||
})->wherePivot('remaining_number', '>', 0);
|
||||
$subscriptions = $this->activeSubscriptions()->whereHas('subscriptionAbilities', function ($query) use ($type) {
|
||||
$query->where('type', $type);
|
||||
})->get();
|
||||
|
||||
$activeSubscriptions = [];
|
||||
foreach ($subscriptions as $subscription) {
|
||||
if (isset($subscription->pivot->remaining_number[$type]) and $subscription->pivot->remaining_number[$type] > 0) {
|
||||
$activeSubscriptions[] = $subscription->pivot->remaining_number[$type];
|
||||
}
|
||||
}
|
||||
|
||||
return $activeSubscriptions;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a subscription instance by $type.
|
||||
*
|
||||
* @return BelongsToMany
|
||||
*/
|
||||
public function activeSubscriptions(): BelongsToMany
|
||||
{
|
||||
return $this->subscriptions()->wherePivot('expiry_at', '>', Carbon::now());
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all of the subscriptions for the Stripe model.
|
||||
*
|
||||
* @return \Illuminate\Database\Eloquent\Relations\HasMany
|
||||
* @return BelongsToMany
|
||||
*/
|
||||
public function subscriptions()
|
||||
public function subscriptions(): BelongsToMany
|
||||
{
|
||||
return $this->belongsToMany(\IICN\Subscription\Models\Subscription::class, 'subscription_user', 'user_id', 'subscription_id')
|
||||
->with(['created_at', 'expiry_at', 'remaining_number'])
|
||||
->orderBy('created_at');
|
||||
return $this->belongsToMany(\IICN\Subscription\Models\Subscription::class, SubscriptionUser::class, 'user_id', 'subscription_id')
|
||||
->withPivot(['expiry_at', 'remaining_number'])->withTimestamps()
|
||||
->orderBy('pivot_created_at');
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
namespace IICN\Subscription\Http\Controllers\Test;
|
||||
|
||||
use App\Models\User;
|
||||
use IICN\Subscription\Http\Controllers\Controller;
|
||||
use IICN\Subscription\Subscription;
|
||||
|
||||
@ -9,6 +10,9 @@ class Test extends Controller
|
||||
{
|
||||
public function __invoke()
|
||||
{
|
||||
return Subscription::canUse('ss');
|
||||
$user = User::query()->with("subscriptions")->find(2);
|
||||
|
||||
return $user->useSubscribe("istikhara");
|
||||
return $user->SubscriptionremaningNumber("istikhara");
|
||||
}
|
||||
}
|
||||
|
@ -5,6 +5,7 @@ namespace IICN\Subscription\Models;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
|
||||
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
|
||||
class Subscription extends Model
|
||||
@ -27,9 +28,14 @@ class Subscription extends Model
|
||||
'description',
|
||||
];
|
||||
|
||||
public function users(): BelongsToMany
|
||||
// public function users(): BelongsToMany
|
||||
// {
|
||||
// return $this->belongsToMany(config('subscription.user_model'), 'subscription_user')->with(['created_at', 'expiry_at', 'remaining_number']);
|
||||
// }
|
||||
|
||||
public function subscriptionAbilities(): HasMany
|
||||
{
|
||||
return $this->belongsToMany(config('subscription.user_model'), 'subscription_user')->with(['created_at', 'expiry_at', 'remaining_number']);
|
||||
return $this->hasMany(SubscriptionAbility::class);
|
||||
}
|
||||
|
||||
public function activeUsers(): BelongsToMany
|
||||
|
18
src/Models/SubscriptionUser.php
Normal file
18
src/Models/SubscriptionUser.php
Normal file
@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace IICN\Subscription\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Relations\Pivot;
|
||||
|
||||
class SubscriptionUser extends Pivot
|
||||
{
|
||||
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
*
|
||||
* @var array<int, string>
|
||||
*/
|
||||
protected $fillable = [
|
||||
'user_id', 'subscription_id', 'created_at', 'expiry_at', 'remaining_number'
|
||||
];
|
||||
}
|
Loading…
Reference in New Issue
Block a user