57 lines
1.3 KiB
PHP
57 lines
1.3 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use App\Enums\SubscriptionStatusEnum;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
|
|
|
/**
|
|
* @property int $id
|
|
* @property int $planner_id
|
|
* @property Planner $planner
|
|
* @property string $stripe_subscription_id
|
|
* @property string $stripe_customer_id
|
|
* @property SubscriptionStatusEnum $status
|
|
* @property string $plan
|
|
* @property Carbon $trial_ends_at
|
|
* @property Carbon $ends_at
|
|
*/
|
|
class Subscription extends Model
|
|
{
|
|
protected $fillable = [
|
|
'planner_id',
|
|
'stripe_subscription_id',
|
|
'stripe_customer_id',
|
|
'status',
|
|
'plan',
|
|
'trial_ends_at',
|
|
'ends_at',
|
|
];
|
|
|
|
protected $casts = [
|
|
'status' => SubscriptionStatusEnum::class,
|
|
'trial_ends_at' => 'datetime',
|
|
'ends_at' => 'datetime',
|
|
];
|
|
|
|
public function planner(): BelongsTo
|
|
{
|
|
return $this->belongsTo(Planner::class);
|
|
}
|
|
|
|
public function isValid(): bool
|
|
{
|
|
if ($this->status->allowsAccess()) {
|
|
return true;
|
|
}
|
|
|
|
// Canceled but still in grace period
|
|
if ($this->status === SubscriptionStatusEnum::CANCELED && $this->ends_at?->isFuture()) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}
|