Certified/app/Models/Subscription.php
2026-08-09 16:33:53 +02:00

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