74 lines
2.1 KiB
PHP
74 lines
2.1 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use App\Enums\SubscriptionPlan;
|
|
use App\Enums\SubscriptionStatus;
|
|
use Database\Factories\SubscriptionFactory;
|
|
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
|
use Illuminate\Database\Eloquent\Relations\HasMany;
|
|
use Illuminate\Support\Carbon;
|
|
|
|
/**
|
|
* @property int $id
|
|
* @property int $user_id
|
|
* @property SubscriptionPlan $plan
|
|
* @property SubscriptionStatus $status
|
|
* @property string|null $moneybird_contact_id
|
|
* @property string|null $moneybird_recurring_invoice_id
|
|
* @property Carbon|null $current_period_starts_at
|
|
* @property Carbon|null $current_period_ends_at
|
|
* @property Carbon|null $grace_ends_at
|
|
* @property bool $cancel_at_period_end
|
|
* @property Carbon|null $created_at
|
|
* @property Carbon|null $updated_at
|
|
*/
|
|
#[Fillable(['plan', 'status', 'moneybird_contact_id', 'moneybird_recurring_invoice_id', 'current_period_starts_at', 'current_period_ends_at', 'grace_ends_at', 'cancel_at_period_end'])]
|
|
class Subscription extends Model
|
|
{
|
|
/** @use HasFactory<SubscriptionFactory> */
|
|
use HasFactory;
|
|
|
|
/**
|
|
* @var array<string, mixed>
|
|
*/
|
|
protected $attributes = [
|
|
'plan' => 'free',
|
|
'status' => 'active',
|
|
'cancel_at_period_end' => false,
|
|
];
|
|
|
|
/**
|
|
* @return array<string, string>
|
|
*/
|
|
protected function casts(): array
|
|
{
|
|
return [
|
|
'plan' => SubscriptionPlan::class,
|
|
'status' => SubscriptionStatus::class,
|
|
'current_period_starts_at' => 'date',
|
|
'current_period_ends_at' => 'date',
|
|
'grace_ends_at' => 'date',
|
|
'cancel_at_period_end' => 'boolean',
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @return BelongsTo<User, $this>
|
|
*/
|
|
public function user(): BelongsTo
|
|
{
|
|
return $this->belongsTo(User::class);
|
|
}
|
|
|
|
/**
|
|
* @return HasMany<SubscriptionInvoice, $this>
|
|
*/
|
|
public function invoices(): HasMany
|
|
{
|
|
return $this->hasMany(SubscriptionInvoice::class);
|
|
}
|
|
}
|